从源数据到金蝶云星空:深入分析数据ETL转换与API写入

  • 轻易云集成顾问-谢楷斌
### MySQL数据集成到金蝶云星空案例分享:GLY生产领料单新增-原材料-好 在实现企业信息化过程中,数据的有效整合和实时同步是一个关键环节。本文将围绕"GLY生产领料单新增-原材料-好"这一具体场景,详述如何通过配置MySQL与金蝶云星空的数据接口,实现高效、可靠的数据集成。 #### 数据获取与转换 首先,通过MySQL提供的select API从数据库中定时抓取生产领料单相关数据。为了确保无遗漏,我们设计了批量抓取机制,同时处理分页和限流问题,以保证在高并发环境下依然能稳定运行。此外,为解决两端之间的数据格式差异,我们自定义了数据转换逻辑,使得每条记录都能够准确映射至金蝶云星空所需字段格式。 #### 集成过程可视化及监控 利用轻易云平台提供的可视化数据流设计工具,我们构建了一条完整且直观的数据管道。从MySQL抽取后的源数据会进行清洗、验证,并经过必要的业务逻辑处理后,再调用金蝶云星空batchSave API进行写入。同时,通过平台提供的集中监控系统,全程跟踪每个Data Pipeline节点的状态和性能,大大提升了调试效率和任务管理能力。在出现异常情况时,系统还具备错误重试机制,有效保障了数据一致性。 #### 高吞吐量写入与API资产管理 对于大量生产领料单新增记录,在集成过程中,我们充分利用轻易云平台支持的大容量、高吞吐量特性,使得这些记录能快速地被批量写入到金蝶云星空中。基于统一视图和控制台,对API资产使用情况进行全面掌握,从而实现资源最大程度上的优化配置。 本案例展示的不仅是技术方案,更重要的是通过合理运用各种功能来提升整体集成质量及效率。在接下来的部分,将进一步深入探讨各步骤中的具体技术实现细节,包括数据抓取、转换、批量写入等操作方法,以及相应代码示例以供参考。 ![电商OMS与ERP系统接口开发配置](https://pic.qeasy.cloud/D29.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台从MySQL接口select获取并加工数据 在数据集成过程中,调用源系统的接口是至关重要的一步。本文将详细介绍如何通过轻易云数据集成平台调用MySQL接口`select`获取并加工数据。我们将重点探讨元数据配置中的各个字段及其作用,并结合具体案例进行说明。 #### 元数据配置解析 在本次集成方案中,我们需要从MySQL数据库中获取生产领料单的相关信息。以下是元数据配置的详细内容: ```json { "api": "select", "effect": "QUERY", "method": "POST", "number": "生产订单号", "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}" } ] } ], ... } ``` #### 主参数配置 主参数`main_params`包含两个子字段:`limit`和`offset`。 - **limit**:用于限制查询结果返回的行数,是分页查询的重要参数。 - **offset**:用于指定查询结果的起始位置,与`limit`结合使用,实现分页功能。 这两个参数在实际请求中会被替换为具体值,以控制每次查询的数据范围。 #### 主SQL语句 主SQL语句定义了具体的数据查询逻辑: ```sql select b.dispatch_prefix as 生产订单号, CONCAT(c.business_no,'_',a.id) as 领料单号, date(a.update_time) as 日期, (select prod_part_no from mes_dispatch_record_process d where b.dispatch_prefix=d.dispatch and d.company_code='GDTY' LIMIT 1) as 成品料号, a.part_no as 物料编号, a.confirm_numb as 数量, a.picking_remark as 备注, a.create_name, a.uuid as sourceid from wms_outstock_confirm_task_detail a left join wms_outstock_confirm_main_task_detail b on a.connect_uuid=b.uuid left join wms_outstock_confirm_main_task c on c.uuid=b.confirm_task_uuid left join oms_order_bom f on b.bom_uuid=f.bom_uuid where a.company_code='gdTY' and a.flag = '1' and a.is_success !='1' and f.kingdee_FWL='0' limit :limit offset :offset ``` 该SQL语句通过多表连接和条件过滤,从多个表中提取所需的数据字段,并通过`limit`和`offset`实现分页。 #### 参数绑定与执行 在执行上述SQL语句之前,需要将动态字段`:limit`和`:offset`替换为具体值。这可以通过参数绑定的方法实现: 1. 将动态字段`:limit`和`:offset`替换为占位符(例如 `?`)。 2. 在执行查询之前,将请求参数与占位符进行绑定。 这种方式提高了SQL语句的可读性和维护性,并确保了动态字段与请求参数的一一对应关系,从而保证了查询的准确性和安全性。 #### 实际应用案例 假设我们需要获取第2页,每页10条记录的数据,可以设置以下请求参数: ```json { main_params: { limit: 10, offset: 10 // 第二页,从第11条记录开始 } } ``` 执行后的SQL语句如下: ```sql select b.dispatch_prefix as 生产订单号, CONCAT(c.business_no,'_',a.id) as 领料单号, date(a.update_time) as 日期, (select prod_part_no from mes_dispatch_record_process d where b.dispatch_prefix=d.dispatch and d.company_code='GDTY' LIMIT 1) as 成品料号, a.part_no as 物料编号, a.confirm_numb as 数量, a.picking_remark as 备注, a.create_name, a.uuid as sourceid from wms_outstock_confirm_task_detail a left join wms_outstock_confirm_main_task_detail b on a.connect_uuid=b.uuid left join wms_outstock_confirm_main_task c on c.uuid=b.confirm_task_uuid left join oms_order_bom f on b.bom_uuid=f.bom_uuid where a.company_code='gdTY' and a.flag = '1' and a.is_success !='1' and f.kingdee_FWL='0' limit ? offset ? ``` 通过绑定参数,最终生成如下实际执行的SQL: ```sql select b.dispatch_prefix as 生产订单号, CONCAT(c.business_no,'_',a.id) as 领料单号, date(a.update_time) as 日期, (select prod_part_no from mes_dispatch_record_process d where b.dispatch_prefix=d.dispatch and d.company_code='GDTY' LIMIT 1) as 成品料号, a.part_no as 物料编号, a.confirm_numb as 数量, a.picking_remark as 备注, a.create_name, a.uuid as sourceid from wms_outstock_confirm_task_detail a left join wms_outstock_confirm_main_task_detail b on a.connect_uuid=b.uuid left join wms_outstock_confirm_main_task c on c.uuid=b.confirm_task_uuid left join oms_order_bom f on b.bom_uuid=f.bom_uuid where a.company_code='gdTY' and a.flag = '1' and a.is_success !='1' and f.kingdee_FWL='0' limit 10 offset 10 ``` 通过上述步骤,我们成功地调用了MySQL接口并获取了所需的数据。这种方法不仅简化了复杂的数据处理过程,还提高了系统集成效率。 ![金蝶与CRM系统接口开发配置](https://pic.qeasy.cloud/S27.png~tplv-syqr462i7n-qeasy.image) ### 数据集成与ETL转换:将源平台数据写入金蝶云星空API接口 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是一个详细的技术案例,展示如何使用轻易云数据集成平台完成这一过程。 #### API接口配置 首先,配置API接口以便与金蝶云星空进行交互。我们使用的是`batchSave`接口,该接口支持批量保存操作,并且可以通过POST方法提交数据。 ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "number": "FBillNo", "id": "FID", "name": "FBillNo", "idCheck": true, ... } ``` #### 请求参数构建 在构建请求参数时,需要将源平台的数据字段映射到金蝶云星空API所需的字段。以下是主要字段的映射和转换规则: - **单据编号 (FBillNo)**: 映射到源数据中的`领料单号` - **单据类型 (FBillType)**: 固定值`SCLLD01_SYS` - **日期 (FDate)**: 映射到源数据中的`日期` - **发料组织 (FStockOrgId)**: 固定值`T04` - **生产订单号 (FMOBillNO1)**: 映射到源数据中的`生产订单号` - **产品编码 (FMaterialID1)**: 映射到源数据中的`成品料号` ```json { "field": "FBillNo", "label": "单据编号", "type": "string", "value": "{{领料单号}}" }, { "field": "FDate", "label": "日期", "type": "string", "value": "{{日期}}" }, { ... } ``` #### 明细项配置 对于明细项(即物料清单),我们需要处理每一项物料的具体信息,包括物料编码、数量、仓库等。这些信息同样需要映射和转换: - **产品编码 (FParentMaterialId)**: 映射到源数据中的`成品料号` - **物料编码 (FMaterialId)**: 映射到明细项中的`物料编号` - **申请数量 (FAppQty)** 和 **实发数量 (FActualQty)**: 映射并四舍五入处理明细项中的`数量` ```json { ... }, { "field": "FEntity", "label": "明细", "type": "array", ... } ``` #### 子字段配置 在每个明细项中,还包含了多个子字段,这些子字段需要进一步映射和转换。例如: - **系统源单内码 (FEntrySrcInterId)** 和 **系统源单分录内码 (FEntrySrcEnteryId)**: 使用查询函数从其他表中获取相应值 - **更新库存标志 (FStockFlag)**: 固定值`false` ```json { ... }, { ... } ``` #### 完整请求示例 以下是一个完整的请求示例,展示了如何将所有配置整合在一起,以便发送给金蝶云星空API: ```json { ... { { ... }, { { ... } } } } ``` 通过上述步骤,我们实现了从源平台到金蝶云星空API接口的数据ETL转换,并成功将数据写入目标平台。这一过程充分利用了轻易云数据集成平台的强大功能,实现了高效、准确的数据集成。 ![电商OMS与WMS系统接口开发配置](https://pic.qeasy.cloud/T23.png~tplv-syqr462i7n-qeasy.image)