使用轻易云实现数据转换与金蝶云API接口写入

  • 轻易云集成顾问-陈洁琳
### GH不合格品生产汇报单新增-好:MySQL数据集成到金蝶云星空技术案例 在企业管理系统的复杂环境中,实现不同数据库和平台之间的数据无缝对接,是提升业务透明度和运营效率的关键。本文将剖析一个具体技术案例,描述如何通过轻易云数据集成平台,将MySQL中的不合格品生产汇报相关数据,可靠且高效地批量同步到金蝶云星空,以实现双方系统间信息的一致性和实时更新。 #### 系统架构概述 此次集成任务命名为“GH不合格品生产汇报单新增-好”,主要利用MySQL获取汇报数据(select),并通过金蝶云星空提供的batchSave API接口完成目标系统的数据写入。整个方案设计遵循高吞吐、高可靠性的原则,并借助平台所提供的可视化设计工具,为我们直观展现了从源头抓取数据到目标写入过程中的每一步操作。 #### 数据获取与转换 首先,通过配置自定义查询逻辑,我们从MySQL数据库中精准抽取包含必要字段的不合格品记录: ```sql SELECT id, report_date, product_code, defect_count FROM defects_report WHERE status = 'unqualified'; ``` 为了确保所有待处理记录都能被成功捕获,我们设置定时抓取机制,定周期地执行上述查询语句,将结果推送至转化模块进行后续处理。同时,通过监控和告警系统,对整个抓取流程进行状态跟踪,一旦出现异常如分页或限流问题,可以及时发出预警并触发重试机制。 #### 数据映射与格式调整 由于MySQL及金蝶云星空之间存在一定的数据格式差异,在传输前必须先行处理。这个过程中,我们利用标准化规则,对字段名称及数据类型进行适配,使得符合目标API要求,例如将`product_code` 转换为 `skuCode`等。在实际操作中,还可以直接使用可视化界面拖拽组件快速完成这些映射工作: ```json [ { "id": "<source_id>", "reportDate": "<source_report_date>", "skuCode": "<source_product_code>", "defectQuantity": "<source_defect_count>" } ] ``` #### 高效批量写入 经过规范后的JSON对象,即可调用金蝶云星空提供的batchSave接口实现插入操作: ```http POST /cloud/api/v1/batchSave HTTP/1.1 Content-Type: application/json Host: api.kingdee.com { "dataList": [ { "id" : 12345, ... }, { ... ![打通企业微信数据接口](https://pic.qeasy.cloud/D28.png~tplv-syqr462i7n-qeasy.image) ### 调用MySQL接口select获取并加工数据 在轻易云数据集成平台的生命周期中,调用源系统MySQL接口获取数据是关键的第一步。本文将详细探讨如何通过配置元数据来实现从MySQL数据库中调用数据,并进行初步加工。 #### 元数据配置解析 我们使用的元数据配置如下: ```json { "api": "select", "effect": "QUERY", "method": "SQL", "number": "入库单号", "id": "入库单号", "name": "name", "request": [ { "field": "main_params", "label": "主参数", "type": "object", "describe": "对应主查询语句内的动态参数对象", "children": [ { "field": "limit", "label": "返回的记录数", "type": "int", "describe": "你可以使用 LIMIT 属性来设定返回的记录数。", "value": 100 }, { "field": "offset", "label": "数据偏移量", "type": int, "describe": “你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。” } ] } ], “otherRequest”: [ { “field”: “main_sql”, “label”: “主查询语句”, “type”: “string”, “describe”: “使用 :created_at 格式与主参数字段进行对应”, “value”: “select a.dispatch_prefix as 生产订单号,\n d.bom_uuid,\n CONCAT('RKBLP_',a.id) as 入库单号,\n date(a.update_time) as 日期,\n a.part_no as 成品编号,\n d.bom_no as 计划跟踪号,\n a.instock_numb as 入库数量,\n a.id as sourceid,\n f1.id,\n ((select ifnull(sum(f.man_hour),0) from eng_craft_card_item f where f.card_id=f1.id and f.process_id !=1267)+(select ifnull(sum(f.man_hour),0) from eng_craft_card_item f where f.card_id=f1.id and f.process_id =1267)/(select dispatched_num from mes_dispatch_record_process where company_code='gdty' and dispatch=a.dispatch_prefix limit 1))*a.instock_numb/3600 as 工时\nfrom wms_instock_confirm_main_task_detail a\nleft join oms_order_bom d on d.bom_uuid=(select bom_uuid from mes_dispatch_record_process where company_code='gdty' and dispatch=a.dispatch_prefix LIMIT 1 )\nleft join wms_instock_confirm_task e on a.confirm_task_uuid=e.confirm_task_uuid\nleft join eng_craft_card f1 on f1.oms_order_bom_uuid=d.bom_uuid\nwhere a.company_code='gdTY' and a.confirm_status='20’ and a.matterial_type=4 and d.material_source='2' and d.kingdee_fwl='0'\nand a.is_defect='1' and a.is_success !='1' limit :limit offset :offset” } ], “autoFillResponse”: true, “omissionRemedy”: { “crontab”: “1 1 1 1 1”, “takeOverRequest”: [] } } ``` #### 主查询语句解析 主查询语句 `main_sql` 是整个数据请求的核心部分。它定义了从MySQL数据库中提取哪些字段以及如何进行初步加工。以下是该查询语句的分解: ```sql select a.dispatch_prefix as 生产订单号, d.bom_uuid, CONCAT('RKBLP_',a.id) as 入库单号, date(a.update_time) as 日期, a.part_no as 成品编号, d.bom_no as 计划跟踪号, a.instock_numb as 入库数量, a.id as sourceid, f1.id, ((select ifnull(sum(f.man_hour),0) from eng_craft_card_item f where f.card_id=f1.id and f.process_id !=1267) +(select ifnull(sum(f.man_hour),0) from eng_craft_card_item f where f.card_id=f1.id and f.process_id =1267) /(select dispatched_num from mes_dispatch_record_process where company_code='gdty' and dispatch=a.dispatch_prefix limit 1)) *a.instock_numb/3600 as 工时 from wms_instock_confirm_main_task_detail a left join oms_order_bom d on d.bom_uuid=(select bom_uuid from mes_dispatch_record_process where company_code='gdty' and dispatch=a.dispatch_prefix LIMIT 1 ) left join wms_instock_confirm_task e on a.confirm_task_uuid=e.confirm_task_uuid left join eng_craft_card f1 on f1.oms_order_bom_uuid=d.bom_uuid where a.company_code='gdTY' and a.confirm_status='20' and a.matterial_type=4 and d.material_source='2' and d.kingdee_fwl='0' and a.is_defect='1' and a.is_success !='1' limit :limit offset :offset ``` #### 参数化查询 为了提高查询的灵活性和安全性,我们使用了参数化查询。元数据中的 `main_params` 定义了两个主要参数:`limit` 和 `offset`。 - `limit`: 用于限制返回记录数,默认值为100。 - `offset`: 用于指定查询起始位置,默认值为0。 这些参数在实际执行时会替换掉 SQL 查询中的占位符 `:limit` 和 `:offset`。 #### 数据加工 在这个阶段,我们不仅仅是简单地提取数据,还对其进行了初步加工。例如: - 使用 `CONCAT('RKBLP_',a.id)` 为每条记录生成唯一的入库单号。 - 使用子查询计算工时,并将其转换为小时单位。 这些操作确保了我们从源系统获取的数据已经过初步清洗和处理,为后续的数据转换与写入阶段奠定了基础。 #### 实际应用案例 假设我们需要从MySQL数据库中提取不合格品生产汇报单新增的数据,并限制返回记录数为50,偏移量为10。我们可以这样配置请求: ```json { main_params: { limit: 50, offset:10 }, main_sql: "...(如上所示)" } ``` 通过这种方式,我们能够灵活地控制每次请求的数据量和起始位置,从而实现高效的数据集成。 总结来说,通过合理配置元数据,我们可以高效地调用MySQL接口获取并加工数据。这一步骤不仅是整个数据集成过程的重要组成部分,也是确保后续处理顺利进行的基础。 ![金蝶与CRM系统接口开发配置](https://pic.qeasy.cloud/S10.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台ETL转换与写入金蝶云星空API接口技术案例 在数据集成的生命周期中,ETL(提取、转换、加载)是关键的一步。本文将详细探讨如何通过轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并转为金蝶云星空API接口所能够接收的格式,最终写入目标平台。 #### 数据转换配置 元数据配置是实现数据转换的核心。以下是本案例中使用的元数据配置: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "number": "FBillNo", "id": "FID", "name": "FBillNo", "idCheck": true, "operation": { "method": "merge", "field": "入库单号", "bodyName": "items", "bodySum": ["工时", "入库数量"], "header": ["生产订单号", "日期", "入库单号"], "body": ["成品编号", "入库数量", "工时"] }, ... } ``` #### 请求字段映射 在请求字段映射部分,我们需要将源平台的数据字段映射到金蝶云星空API接口所需的字段。例如: - `FBillNo` 对应 `{{入库单号}}` - `FDate` 对应 `{{日期}}` - `FPrdOrgId` 固定值 `T04` - `FWorkshipIdH` 通过查询获取 `_findCollection find FWorkShopID_FName from ... where FBillNo={{生产订单号}}` 这些映射关系确保了数据在传输过程中能够正确地转换和传递。 #### 明细字段配置 明细字段是复杂数据结构中的重要部分,需要特别注意其子字段的配置。例如: ```json { ... "FEntity": { ... "children": [ { ... {"field":"FMaterialId","label":"物料编码","type":"string","describe":"物料编码","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{{items.成品编号}}"}, {"field":"FFinishQty","label":"完成数量","type":"string","describe":"完成数量","value":"{{items.入库数量}}"}, {"field":"FSrcBillNo","label":"源单编号","type":"string","describe":"源单编号","value":"{{items.生产订单号}}"}, ... } ] } } ``` 这些子字段确保了每个明细项都能被正确地解析和处理。 #### 其他请求参数 除了主要的数据字段外,还需要一些额外的请求参数来控制API行为,例如: ```json { ... {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID","value":"PRD_MORPT"}, {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","describe":"提交并审核","value":"true"}, {"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"验证基础资料","value":"true"}, {"field":"Operation","label":"执行的操作","type":"string","describe":"执行的操作","value":"Save"} } ``` 这些参数确保了数据在传输过程中能够自动提交和审核,提高了工作效率。 #### 数据写入目标平台 最后一步是将转换后的数据通过POST请求写入金蝶云星空API接口。根据元数据配置,构建请求体并发送请求: ```json { ... // 构建完整的请求体 // 发送POST请求至金蝶云星空API接口 } ``` 通过这种方式,我们可以实现从源平台到目标平台的数据无缝对接,确保数据准确、高效地传输和处理。 以上就是利用轻易云数据集成平台进行ETL转换,并将数据写入金蝶云星空API接口的详细技术案例。通过合理配置元数据和请求参数,可以大大简化复杂的数据集成过程,提高系统间的数据交互效率。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/T17.png~tplv-syqr462i7n-qeasy.image)