轻易云平台实现企业微信审批数据集成与ETL转换

  • 轻易云集成顾问-贺强
### 查询微信审批并更新API资产审批状态:企业微信数据集成到MySQL的实战案例 在企业级应用中,对接企业微信的数据至关重要,特别是当涉及审批流程和业务逻辑同步时。本文将介绍如何高效集成企业微信的数据至MySQL数据库,以确保实时、准确地更新API资产的审批状态。 #### 获取企业微信数据 该方案主要通过调用企业微信接口`/cgi-bin/oa/getapprovalinfo`来获取最新的审批信息。这一步需要处理分页和限流问题,以防止遗漏任何一条关键记录。同时,通过定时任务可靠抓取数据信息,确保每次获取都是最新最全。 ```python def fetch_approval_info(): url = 'https://qyapi.weixin.qq.com/cgi-bin/oa/getapprovalinfo' params = { # 请求参数,如果有的话 } response = requests.get(url, params=params) if response.status_code == 200: data = response.json() return data else: log_error(response.status_code, response.content) ``` 为了应对大量数据,我们设计了批量处理机制,并配置相应的错误重试策略。例如,当请求限制被触发或网络异常发生时,可根据具体情况进行多次尝试,保证数据获取环节稳定运行。 #### 数据格式转换与存储 在将从企业微信获得的信息写入MySQL之前,需要对数据格式进行适配和转换。这是因为两者之间可能存在字段类型不一致等差异。此外,对于不同业务场景,还可以定制化映射需求,使得存储过程更加灵活高效。 ```python def transform_data(raw_data): transformed_data = [] for item in raw_data['approvals']: transformed_item = { 'id': item['sp_no'], 'status': map_status(item['sp_status']), 'apply_time': convert_timestamp(item['apply_time']), # 更多字段转换... } transformed_data.append(transformed_item) return transformed_data # 定义一个简单的示例如何映射状态码: def map_status(sp_status): status_mapping = {0: "Pending", 1: "Approved", 2: "Rejected"} return status_mapping.get(sp_status, "Unknown") ``` #### MySQL快速写入及异常处理 为确保海量数据能够快速且无损地插入到MySQL,我们使用了批量提交(Batch Insert)的方式,有助于显著提高数据库操作效率。此外,我们实现了完善的异常处理机制,当写入失败时,可以自动重试或者记录日志以便后续分析解决问题。 ```python import pymysql def batch_insert_to_mysql(data): connection = pymysql.connect(user='username', password='password', database=' ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/D23.png~tplv-syqr462i7n-qeasy.image) ### 调用企业微信接口获取审批信息并加工数据 在数据集成过程中,调用源系统的API接口是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台调用企业微信接口`/cgi-bin/oa/getapprovalinfo`,并对获取的数据进行加工处理。 #### 接口调用配置 企业微信提供了丰富的API接口,其中`/cgi-bin/oa/getapprovalinfo`用于查询审批信息。根据元数据配置,我们需要通过POST方法请求该接口,并传递以下参数: - `starttime`: 查询开始时间,通常设置为上次同步时间 `{LAST_SYNC_TIME}`。 - `endtime`: 查询结束时间,通常设置为当前时间 `{CURRENT_TIME}`。 - `cursor`: 分页游标,用于分页查询。 - `size`: 每次拉取的数据条数,这里设定为100。 - `filters`: 过滤条件,这里我们使用模板ID `template_id` 进行过滤。 以下是请求参数的详细配置: ```json { "starttime": "{LAST_SYNC_TIME}", "endtime": "{CURRENT_TIME}", "cursor": 0, "size": "100", "filters": { "key": "template_id", "value": "3WLJWotDSVU6dDkMwiWXdaZX5VT8rcec1gF7xRFs" } } ``` #### 数据清洗与加工 在获取到审批信息后,需要对数据进行清洗和加工。轻易云平台提供了自动填充响应(autoFillResponse)的功能,可以根据预定义的规则自动处理响应数据。 具体来说,我们需要关注以下几点: 1. **字段映射与转换**:将API返回的数据字段映射到目标系统所需的字段格式。例如,将审批状态字段 `sp_status` 映射到目标系统中的相应字段,并根据业务需求进行转换。 2. **条件过滤**:根据业务逻辑,仅保留特定状态的审批记录。元数据配置中定义了一个条件过滤规则: ```json [ { "field": "sp_status", "logic": "in", "value": "2,3" } ] ``` 这意味着我们只保留状态为2或3的审批记录。 3. **关联查询**:在某些情况下,需要进一步调用其他API获取详细信息。元数据配置中定义了一个关联查询: ```json { "otherapi": "/cgi-bin/oa/getapprovaldetail", "otherkey": "sp_no", "detailkey": "info" } ``` 当获取到审批编号 `sp_no` 后,可以通过调用 `/cgi-bin/oa/getapprovaldetail` 接口获取更详细的审批信息,并将其合并到最终的数据集中。 #### 实际应用案例 假设我们需要从企业微信中获取过去一天内所有已完成或已拒绝的审批记录,并更新到我们的资产管理系统中。具体步骤如下: 1. **初始化请求参数**: ```json { "starttime": "{LAST_SYNC_TIME}", "endtime": "{CURRENT_TIME}", "cursor": 0, "size": "100", "filters": { "key": "template_id", "value": "3WLJWotDSVU6dDkMwiWXdaZX5VT8rcec1gF7xRFs" } } ``` 2. **发送请求并接收响应**: 调用 `/cgi-bin/oa/getapprovalinfo` 接口,接收返回的审批记录列表。 3. **数据清洗与过滤**: 根据预定义的条件,仅保留状态为2(已完成)或3(已拒绝)的记录。 4. **关联查询详细信息**: 对于每条记录,通过 `sp_no` 调用 `/cgi-bin/oa/getapprovaldetail` 接口,获取更详细的信息并合并。 5. **数据写入目标系统**: 将处理后的数据写入资产管理系统中,更新相应的审批状态。 通过以上步骤,我们可以高效地实现企业微信审批信息的集成与加工。这不仅提升了数据处理的透明度和效率,也确保了业务流程的一致性和准确性。 ![如何对接企业微信API接口](https://pic.qeasy.cloud/S3.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现ETL转换并写入MySQL API接口 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,使其符合目标平台 MySQL API 接口所能接收的格式,并最终写入目标平台。以下是一个详细的技术案例,展示如何通过轻易云数据集成平台完成这一过程。 #### 元数据配置解析 首先,我们来看一下元数据配置: ```json { "api": "execute", "effect": "EXECUTE", "method": "SQL", "number": "id", "id": "id", "name": "id", "idCheck": true, "request": [ { "field": "main_params", "label": "主参数", "type": "object", "describe": "对应主语句内的动态参数", "children": [ { "field": "api_id", "label": "资产编码ID", "type": "string", "describe": "店铺名称", "value": "{{appcontents.API}}" }, { "field": "status", "label": "status", "type": "string", "value": "_function case when '{sp_status}'='2' then '5' else '1' end" } ] } ], "otherRequest": [ { "field": "main_sql", "label": "主语句", "type": "string", "describe": `SQL首次执行的语句,将会返回:lastInsertId`, `value`: `UPDATE dp_api_asset SET status =:status WHERE id = :api_id` } ] } ``` #### 数据请求与清洗 在数据请求与清洗阶段,我们从微信审批系统中获取原始数据。假设我们已经完成了这一步,接下来需要对这些数据进行转换,以便符合 MySQL API 的要求。 #### 数据转换与写入 1. **定义主参数**: - `api_id`:资产编码ID,这里使用的是动态值 `{{appcontents.API}}`,表示从上游数据中提取的API ID。 - `status`:状态值,根据业务逻辑进行转换。如果 `sp_status` 为 '2',则将状态设置为 '5',否则设置为 '1'。 2. **构建 SQL 主语句**: - 我们需要执行一条 SQL 更新语句:`UPDATE dp_api_asset SET status = :status WHERE id = :api_id`。 - 在这个过程中,`:status` 和 `:api_id` 是占位符,将由前面定义的主参数动态替换。 3. **执行 SQL 操作**: - 配置中的 `"method"` 字段指定了操作类型为 `"SQL"`。 - `"effect"` 字段设置为 `"EXECUTE"`,表示执行更新操作。 - 在执行过程中,系统会根据配置自动替换占位符并执行 SQL 更新语句。 #### 实际操作步骤 1. **配置 ETL 流程**: 在轻易云平台上创建一个新的 ETL 流程,选择 MySQL 数据库作为目标平台。 2. **添加元数据配置**: 将上述元数据配置添加到 ETL 流程中。确保所有字段和参数正确映射。 3. **测试与验证**: 执行 ETL 流程,并通过日志和监控功能验证数据是否正确写入目标数据库。如果有错误,可以通过调试功能查找问题并修正。 4. **部署与运行**: 确认无误后,将 ETL 流程部署到生产环境,并定期运行以保持数据同步。 通过以上步骤,我们成功地将源平台的数据进行了ETL转换,并写入到了目标平台 MySQL 中。这一过程充分利用了轻易云数据集成平台的强大功能,实现了不同系统间的数据无缝对接,提高了业务效率和透明度。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/T1.png~tplv-syqr462i7n-qeasy.image)