将数据ETL转换并写入金蝶云星空的实现步骤

  • 轻易云集成顾问-孙传友
### MySQL 数据集成到金蝶云星空案例分享:SLB生产领料单新增深圳天一-带料委外-好 在实际生产环境中,如何将MySQL中的数据高效、准确地集成到金蝶云星空平台,是每个系统集成顾问都需要面对和解决的核心问题。本文将以具体的实施方案“SLB生产领料单新增深圳天一-带料委外-好”为例,详细介绍从MySQL获取数据并批量写入至金蝶云星空的技术实现。 首先,我们通过编写一个定时任务来可靠地抓取MySQL接口的数据。例如,通过调用`select` API接口,从MySQL数据库中提取所需的原始数据。这一步骤尤为关键,因为它不仅要处理大量的数据吞吐,还必须确保不漏掉任何关键信息。在此过程中,我们还会对API响应进行分页和限流处理,以保证系统负载均衡和性能稳定。 接下来,需要对这些从MySQL获得的数据进行预处理,包括但不限于格式转换、数据过滤等操作,这些操作可以通过支持自定义逻辑的数据转换工具便捷完成。做好预处理后,再使用batchSave API,将这些整理后的数据批量写入到金蝶云星空平台内。特别值得注意的是,为了确保整个过程具备良好的健壮性与容错能力,我们在每一个关键环节都设置了异常检测及重试机制,并结合统一监控与告警系统,以实时跟踪任务状态和性能表现,从而及时发现与解决可能出现的问题。 最后,为了适应特定业务需求,在该集成方案中特别设计了一套定制化的数据映射规则,使得从元数据配置、到流程设计,再到最终执行,每一步都能直观管理与可追溯,显著提高了整个项目的执行效率和成功率。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/D35.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台调用MySQL接口获取并加工数据 在数据集成过程中,调用源系统接口是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台,通过调用MySQL接口`select`获取并加工数据。 #### 元数据配置解析 首先,我们需要理解元数据配置中的各个字段及其作用: - `api`: 指定API类型,这里为`select`。 - `effect`: 表示操作的效果,这里为`QUERY`,即查询操作。 - `method`: 请求方法,这里为`POST`。 - `number`, `id`: 分别表示生产订单号和领料单号,用于标识和关联数据。 - `request`: 包含主参数,主要用于SQL语句中的动态参数绑定。 - `main_params`: 主参数对象,包含两个子字段: - `limit`: 限制结果集返回的行数,用于分页查询。 - `offset`: 偏移量,指定查询结果的起始位置。 此外,还有一个关键字段: - `main_sql`: 主SQL查询语句,其中包含动态字段如`:limit`和`:offset`,需要在执行查询时进行参数绑定。 #### SQL语句解析与优化 主SQL语句如下: ```sql select case m.delivery_org when 'T01.01' then CONCAT('HJ', CAST(hj1.id AS CHAR)) when 'T04' then CONCAT('HJGD', CAST(hj1.id AS CHAR)) else CONCAT('HJ', CAST(hj1.id AS CHAR)) end as 生产订单号, a.part_no as 成品编号, c.mode_no as 计划跟踪号, CONCAT('LLB',CAST(a.id AS CHAR)) as 领料单号, date(a.update_time) as 日期, CONCAT(a.part_no,'_WW') as 物料编号, a.confirm_numb as 数量,e.real_name, a.id as sourceid, 0.000001 as 工时, m.delivery_org as 供应组织 from wms_instock_confirm_task_detail a left join wms_instock_purchase_task_detail c on c.out_type='1' and c.matterial_type='4' left join wms_instock_confirm_main_task_detail b on b.connect_uuid=c.uuid left join mbs_nuclear_price_task hj on hj.mold_no=c.mode_no and hj.part_no=a.part_no left join mbs_nuclear_price_info hj1 on hj1.nuclear_price_task_uuid=hj.nuclear_price_task_uuid left join sys_user e on e.user_id=a.create_by left join mbs_order_plan_bom l on c.mode_no=l.bom_no left join mbs_order_bom m on m.bom_uuid=l.bom_uuid where a.connect_uuid=b.uuid and a.company_code='TYZN' and a.update_time>'2023-08-01' and hj1.create_time>(select config_value from sys_config where config_id=337) and a.is_success !='1' and a.is_success4='1' limit :limit offset :offset ``` 在这段SQL中,我们使用了多个表的连接操作,并通过条件过滤来获取所需的数据。特别需要注意的是`limit :limit offset :offset`部分,这是分页查询的关键。 #### 参数绑定与执行 为了确保SQL语句中的动态字段与请求参数一一对应,我们需要进行参数绑定。具体步骤如下: 1. 将主SQL查询语句中的动态字段`:limit`和`:offset`替换为占位符(例如`?`)。 2. 在执行查询之前,通过参数绑定的方法,将请求参数的值与占位符进行对应绑定。 例如: ```sql select case m.delivery_org when 'T01.01' then CONCAT('HJ', CAST(hj1.id AS CHAR)) when 'T04' then CONCAT('HJGD', CAST(hj1.id AS CHAR)) else CONCAT('HJ', CAST(hj1.id AS CHAR)) end as 生产订单号, a.part_no as 成品编号, c.mode_no as 计划跟踪号, CONCAT('LLB',CAST(a.id AS CHAR)) as 领料单号, date(a.update_time) as 日期, CONCAT(a.part_no,'_WW') as 物料编号, a.confirm_numb as 数量,e.real_name, a.id as sourceid, 0.000001 as 工时, m.delivery_org as 供应组织 from wms_instock_confirm_task_detail a left join wms_instock_purchase_task_detail c on c.out_type='1' and c.matterial_type='4' left join wms_instock_confirm_main_task_detail b on b.connect_uuid=c.uuid left join mbs_nuclear_price_task hj on hj.mold_no=c.mode_no and hj.part_no=a.part_no left join mbs_nuclear_price_info hj1 on hj1.nuclear_price_task_uuid=hj.nuclear_price_task_uuid left join sys_user e on e.user_id=a.create_by left join mbs_order_plan_bom l on c.mode_no=l.bom_no left join mbs_order_bom m on m.bom_uuid=l.bom_uuid where a.connect_uuid=b.uuid and a.company_code='TYZN' and a.update_time>'2023-08-01' and hj1.create_time>(select config_value from sys_config where config_id=337) and a.is_success !='1' and a.is_success4='1' limit ? offset ? ``` 然后,在执行查询时,将请求中的分页参数绑定到占位符上。例如: ```java PreparedStatement pstmt = connection.prepareStatement(sql); pstmt.setInt(1, limitValue); pstmt.setInt(2, offsetValue); ResultSet rs = pstmt.executeQuery(); ``` 通过这种方式,可以确保SQL语句的可读性和维护性,同时提高查询的准确性和安全性。 #### 实际应用案例 假设我们需要从MySQL数据库中获取生产领料单的数据,并且每次只返回10条记录,从第20条记录开始。我们可以设置分页参数如下: ```json { "main_params": { "limit": "10", "offset": "20" } } ``` 然后,通过轻易云数据集成平台发送POST请求,调用上述配置的API,即可获取所需的数据。 以上就是使用轻易云数据集成平台调用MySQL接口获取并加工数据的详细技术案例。通过合理配置元数据和优化SQL语句,可以高效地实现跨系统的数据集成。 ![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/S30.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台:将源平台数据ETL转换并写入金蝶云星空API接口 在轻易云数据集成平台中,完成数据生命周期的第二步,即将已经集成的源平台数据进行ETL转换,并转为目标平台金蝶云星空API接口所能够接收的格式,是一个关键环节。本文将详细探讨如何利用元数据配置,将生产领料单新增深圳天一-带料委外-好的数据转换并写入金蝶云星空。 #### 数据请求与清洗 在进行ETL转换之前,首先需要对源数据进行请求和清洗。假设我们已经从源系统获取了以下结构的数据: ```json { "领料单号": "LLD20231001", "生产订单号": "PO20231001", "日期": "2023-10-01", "成品编号": "CP001", "供应组织": "T01.01", "items": [ { "物料编号": "WL001", "数量": 100, "计划跟踪号": "JH001" }, { "物料编号": "WL002", "数量": 200, "计划跟踪号": "JH002" } ] } ``` #### 数据转换与写入 根据元数据配置,我们需要将上述源数据转换为金蝶云星空API接口所能接收的格式。以下是具体的配置和操作步骤。 ##### 配置API请求 元数据配置中的`request`部分定义了需要发送给金蝶云星空API的数据字段及其映射关系。以下是主要字段的映射: - `FBillNo` 映射到 `领料单号` - `FDate` 映射到 `日期` - `FMOBillNO1` 映射到 `生产订单号` - `FMaterialID1` 映射到 `成品编号` - `FStockOrgId` 和 `FPrdOrgId` 根据 `供应组织` 的值进行条件转换 - 明细部分(`FEntity`)包含每个物料的详细信息,如物料编码、数量、计划跟踪号等 ##### 转换逻辑示例 1. **主表字段转换** ```json { "FBillNo": "{{领料单号}}", "FDate": "{{日期}}", ... "FMOBillNO1": "{{生产订单号}}", ... "FMaterialID1": "{{成品编号}}" } ``` 2. **条件转换** 对于发料组织和生产组织,根据供应组织的不同值进行条件判断: ```json { ... "FStockOrgId": "_function case '{{供应组织}}' when 'T01.01' then 'T01.06' when 'T04' then 'T04' else '' end", ... "FPrdOrgId": "_function case '{{供应组织}}' when 'T01.01' then 'T01.06' when 'T04' then 'T04' else '' end" } ``` 3. **明细字段转换** 明细部分涉及数组处理,每个物料项都需要进行相应的字段映射: ```json { ... "FEntity": [ { ... "FMaterialId": "{{items.物料编号}}", ... "FAppQty": "{{items.数量}}", ... "FMtoNo": "{{items.计划跟踪号}}" }, ... ] } ``` ##### 最终请求体示例 根据上述配置和映射关系,最终生成的请求体如下: ```json { "FormId": "PRD_PickMtrl", ... "Model": { ... "FBillNo": "LLD20231001", ... "FDate": "2023-10-01", ... ... ... //其他主表字段 ... ... //明细数组 ... ... ... //其他附加参数 }, ... } ``` #### 提交与审核 在所有字段都正确映射并生成请求体后,通过POST方法调用金蝶云星空API接口,实现批量保存并自动提交审核。 ```http POST /k3cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.BatchSave.common.kdsvc HTTP/1.1 Host: {K3CloudHost} Content-Type: application/json { // 上述生成的请求体内容 } ``` 通过上述步骤,可以实现将生产领料单新增深圳天一-带料委外-好的数据无缝地转换并写入金蝶云星空系统。这不仅提高了数据处理效率,也确保了各系统间的数据一致性和准确性。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/T8.png~tplv-syqr462i7n-qeasy.image)