数据集成与ETL转换在钉钉API接口中的应用

  • 轻易云集成顾问-林峰
### SiHua-金蝶接口抛转失败-钉钉工作通知:MySQL数据集成到钉钉的技术解析 在多系统跨平台的数据对接过程中,如何实现高效、稳定且及时的消息通知,是业务运作中的一个核心需求。本文将聚焦于“SiHua-金蝶接口抛转失败-钉钉工作通知”这一具体案例,通过轻易云数据集成平台,将MySQL数据库内关键异常信息实时传递到企业内部使用的钉钉系统,从而大幅提升故障响应速度和处理效率。 #### 数据获取与筛选 首先,我们需要通过MySQL提供的标准API `SELECT`语句从数据库中提取特定条件下的数据。在本实例中,目标是筛选出所有由于种种原因导致失败的接口调用记录。这些记录包含了详尽的错误日志和时间戳,为后续分析和处理提供依据。 ```sql SELECT * FROM error_logs WHERE status = 'FAILED'; ``` 这类查询操作会产生大量数据,为确保不漏单,并能有效应对分页问题,我们在轻易云上配置了自动化脚本来周期性抓取这些异常条目,确保每次都能获得最新的错误信息。 #### 数据转换与格式调整 从MySQL导出的数据通常以表格形式存在,而为了适应不同API间的数据结构差异,需要进行自定义的数据转换逻辑。我们采用了JSON格式作为中间桥梁,通过预先设定好的映射关系,将原始数据重新组装,以满足钉钉 API 的要求。例如: ```json { "msg": "Interface call failed", "detail": { "timestamp": "{eventTime}", "errorCode": "{errCode}", "message": "{errMsg}" } } ``` 这种灵活且强大的自定义功能可以极大地减少编码过程中的复杂度,提高开发效率。 #### 批量写入到钉钉 针对批量式的数据写入需求,“topapi/message/corpconversation/asyncsend_v2” API 提供了一站式解决方案。在实现过程中,我们需特别关注限流策略及重试机制,以防止因网络波动或其他因素造成请求发送失败。通过集中监控和告警系统,可以实时跟踪各个任务节点,在任何环节发生问题时第一时间收到反馈,并启动相应补救措施。 在此次 MySQL 到 钉 钴 工作 通知 的 案例 中, 配 合 高 敏捷 性 和 大 吞吐量 能力, 我们 确保 在 极 短 时间 内 完成 从 异常 抓取 到 告警 通知 的 全流程 自动 化. --- 上述 ![如何开发钉钉API接口](https://pic.qeasy.cloud/D21.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台调用MySQL接口获取并加工数据 在数据集成过程中,调用源系统的API接口获取数据是至关重要的一步。本文将详细探讨如何在轻易云数据集成平台中配置和使用MySQL接口,通过`select`语句获取并加工数据。 #### 配置元数据 首先,我们需要配置元数据,以便定义API请求的具体参数和SQL查询语句。以下是一个详细的元数据配置示例: ```json { "api": "select", "effect": "QUERY", "method": "POST", "number": "id", "id": "id", "request": [ { "field": "main_params", "label": "主参数", "type": "object", "describe": "对应其它请求字段内SQL语句的主参数,必须一一对应。", "value": "1", "children": [ { "field": "limit", "label": "限制结果集返回的行数", "type": "int", "describe": "必要的参数!LIMIT 子句用于限制查询结果返回的行数。它指定了查询应该返回的最大行数。例如,LIMIT 10 表示查询结果只包含最多 10 行数据。这对于分页查询非常有用,可以在每次查询中返回一定数量的结果。", "value": "{PAGINATION_PAGE_SIZE}" }, { "field": "offset", "label": "偏移量", "type": "int", "describe": "OFFSET 子句用于指定查询结果的起始位置或偏移量。它表示查询应该从结果集的哪一行开始返回数据。例如,OFFSET 20 表示查询应该从结果集的第 21 行开始返回数据。结合 LIMIT 子句使用时,OFFSET 指定了查询结果的起始行数。", "value": "{PAGINATION_START_ROW}" } ] } ], ... } ``` #### 主SQL语句 主SQL语句是整个数据请求和处理过程中的核心部分。在这个案例中,我们使用了一条复杂的SQL语句来从多个表中获取所需的数据,并进行必要的数据转换和格式化。 ```sql select a.id, case a.business_type when '1' then '销售订单新增' when '2' then '销售单关闭' when '3' then '销售订单修改' when '11' then '预测订单新增' when '12' then '预测订单关闭' when '13' then '修改预测订单' when '21' then '采购入库新增' when '41' then 'BOM同步' when '33' then '应付单新增' when '43' then '修改BOM' end as business_type, a.json_result, a.create_time, a.create_by, user2.real_name, CONCAT(user3.userid,',064140631924255283') as userid, case a.business_type when '1' then '【物料编码必填】成品编号未分配到销售组织,供应组织;\\n\\n【销售人员未找到】部门与销售人员编号不符;\\n\\n【客户未找到】客户未分配到销售组织。\\n\\n【其他类型错误信息】请联系系统管理员' when '2' then '销售单已金蝶手工关闭' when '3' then '【变更生效失败】打开该销售订单变更单,先点击保存,再点击生效;\\n\\n 【部门与销售人员编号不符】更新销售人员资料。\\n\\n 【已关联下游单据】先在金蝶处理下游单据问题 \\n\\n【其他类型错误信息】请联系系统管理员' when '11' then '预测订单新增' when '12' then '预测订单关闭' when '13' then '修改预测订单' when '21' then '供应商未分配到采购组织;物料编号未分配,单工序物料金蝶未新建。\\n\\n【其他类型错误信息】请联系系统管理员' when '41' then '【子项物料编码”是必填项】 BOM中有未审核物料,禁用物料,未分配物料,请在金蝶进行物料操作。\\n\\n【其他类型错误信息】系统会重新发起5次请求,如果报错信息仍在提示,请联系系统管理员' when '33' then '联系系统管理员' when '43' then '【子项物料编码”是必填项】 BOM中有未审核物料,禁用物料,未分配物料,请在金蝶进行物料操作。\\n\\n【其他类型错误信息】请联系系统管理员' end as Solution, now() as time from sys_http_req_log a left join sys_user user2 on a.create_by=user2.user_id left join basic_dingding_userid user3 on user2.job_number=user3.workid where (a.is_success='1' or (a.is_success in ('2','3') and TIMESTAMPDIFF(MINUTE,a.create_time,now())>10)) and a.yn_delete='0' and a.business_type not in ('42','33') limit :limit offset :offset ``` #### 参数绑定 为了确保SQL语句中的动态字段(如`:limit`和`:offset`)能够正确地与请求参数对应,我们采用了参数绑定的方法。这种方法不仅提高了查询语句的可读性和维护性,还增强了其安全性。 1. 将主SQL查询语句中的动态字段`:limit`替换为占位符(例如`?`),表示参数的位置。 2. 在执行查询之前,使用参数绑定的方法,将请求参数的值与占位符进行对应绑定。 通过这种优化方式,我们能够确保动态语法字段与请求参数的一一对应关系,从而保证查询的准确性和安全性。 #### 数据处理 在获取到原始数据后,我们可以利用轻易云平台提供的数据清洗功能,对数据进行进一步加工。例如,可以对特定字段进行格式化处理、过滤无效数据、合并多条记录等操作。这些步骤可以通过可视化界面方便地完成,无需编写复杂代码。 #### 实时监控 轻易云平台还提供实时监控功能,可以实时查看数据流动和处理状态。这对于及时发现和解决问题,提高业务透明度具有重要意义。 通过上述步骤,我们成功实现了从MySQL数据库中调用接口获取并加工数据。在实际应用中,根据具体需求调整元数据配置和SQL语句,可以灵活应对各种复杂的数据集成场景。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/S13.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现ETL转换并写入钉钉API接口 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL转换,并转为目标平台钉钉API接口所能够接收的格式,最终写入目标平台。以下是详细的技术实现过程。 #### 针对钉钉API接口的数据转换与写入 我们将使用轻易云数据集成平台提供的元数据配置,将源平台的数据转换为钉钉API接口所需的格式。具体来说,我们需要将源数据通过ETL(提取、转换、加载)过程处理后,调用钉钉API接口`topapi/message/corpconversation/asyncsend_v2`,发送工作通知。 #### 元数据配置解析 以下是我们使用的元数据配置: ```json { "api": "topapi/message/corpconversation/asyncsend_v2", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "userid_list", "label": "userid_list", "type": "string", "describe": "111", "value": "{userid}" }, { "field": "to_all_user", "label": "to_all_user", "type": "string", "describe": "111", "value": "false" }, { "field": "msg", "label": "msg", "type": "object", "describe": "111", "value": "test", "children": [ { "field": "msgtype", "label": "msgtype", "type": "string", "value": "markdown" }, { ... } ] }, { ... } ] } ``` #### 数据请求与清洗 首先,我们从源系统提取相关数据,并进行必要的清洗和预处理。例如,从金蝶系统中获取操作时间、操作者姓名、单据类型等信息。这些信息会被用来填充钉钉消息模板中的占位符。 #### 数据转换与格式化 根据元数据配置,我们需要将清洗后的数据按照以下结构进行转换: 1. **userid_list**: 接收消息的用户ID列表。 2. **to_all_user**: 是否发送给所有用户,这里设置为`false`。 3. **msg**: 消息内容,包括消息类型和具体内容。 - **msgtype**: 消息类型,这里设置为`markdown`。 - **markdown**: Markdown格式的消息内容,包括标题和文本。 - **title**: 消息标题,这里设置为“金蝶接口数据抛转失败”。 - **text**: 消息文本,包含详细的信息和解决方案提示。 以下是一个示例消息文本: ```markdown ![](http://192.168.110.232:9000/img/logo.eb09f95f.png) # 四化MES金蝶接口失败提示: {time} ### 操作者:{real_name} ### 操作时间:{create_time} ### 单据类型:{business_type} ### 返回报错信息: {json_result} ### 解决方案提示: {Solution} ``` 在实际操作中,我们会将占位符如`{time}`、`{real_name}`等替换为实际值。 #### 数据写入目标平台 完成数据转换后,通过HTTP POST请求将处理后的数据发送到钉钉API接口。请求示例如下: ```json { 'userid_list': '12345,67890', 'to_all_user': 'false', 'msg': { 'msgtype': 'markdown', 'markdown': { 'title': '金蝶接口数据抛转失败', 'text': "![](http://192.168.110.232:9000/img/logo.eb09f95f.png) \\n # 四化MES金蝶接口失败提示: \\n2023-10-01\\n ### 操作者:张三\\n ### 操作时间:2023-10-01 12:00\\n ### 单据类型:销售订单\\n ### 返回报错信息:\\n错误详情\\n ### 解决方案提示:\\n请检查网络连接" } }, 'agent_id': '2811489571' } ``` 通过这种方式,我们可以确保源平台的数据被成功转换并传递到目标平台(钉钉),实现了不同系统间的数据无缝对接。 ![如何对接企业微信API接口](https://pic.qeasy.cloud/T30.png~tplv-syqr462i7n-qeasy.image)