高效数据对接:MySQL与金蝶云星空

  • 轻易云集成顾问-贺强
### MySQL数据集成到金蝶云星空的实战案例:SYY生产用料清单新增-原材料深圳天一-好 在企业信息化进程中,实现不同系统之间的数据无缝对接是提升运营效率的关键步骤。本次技术案例将重点介绍如何通过轻易云数据集成平台,将MySQL中的生产用料清单数据高效、可靠地集成至金蝶云星空环境下。具体项目为“SYY生产用料清单新增-原材料深圳天一-好”。 #### API接口设计与实现 1. **MySQL获取数据的API设计** - 对于从MySQL数据库提取生产用料清单,我们采用了标准的`select`语句,结合定时任务来确保数据抓取的及时性和完整性。通过合理设置分页和限流机制,以保证在大量并发请求情况下,不会对数据库性能造成压力。 2. **金蝶云星空写入数据的API配置** - 金蝶云星空提供了灵活强大的`batchSave` API接口,用于批量写入获取到的数据。在此过程中,我们需要特别注意映射源端(MySQL)与目标端(金蝶云星空)的字段差异,通过自定义转换逻辑进行适配。这不仅解决了格式差异问题,也确保了业务需求能够精准落实。 #### 数据处理流程 为了保障整个数据集成过程中的稳定性和高效性,本方案引入了一系列控制措施: - **集中监控与告警系统**:实时跟踪每次数据提取、转换及写入操作。一旦出现异常,系统将立即告警,并触发错误重试机制,最大程度上减少因短暂故障导致的数据漏失。 - **自定义转换逻辑**:针对不同业务场景,自行定制相应的数据处理规则,例如单位换算、多级分类等特殊需求,使得最终写入金蝶云星空的数据符合实际应用要求。 3. **优化与扩展特性的应用** 在本次实例中,为提高大批量数据快速处理能力,以及保障实时更新效果,我们利用以下几项关键特性: - 高吞吐量支持:使得每天数万条生产用料记录可快速同步到金蝶系统中,避免任何延迟带来的库存或采购决策误差。 - 批量集成功能:科学分配任务负载,将大规模数据分块处理,有序推送至目标系统,有利于平衡服务器资源,提高整体运行效率。 这些精细化、严谨而又不失灵活性的设计理念,使得我们的方案能够稳健执行,并持续为企业创造价值。在后续章节中, 我们将详细剖 ![用友与WMS系统接口开发配置](https://pic.qeasy.cloud/D22.png~tplv-syqr462i7n-qeasy.image) ### 调用MySQL接口select获取并加工数据 在轻易云数据集成平台的生命周期中,第一步是调用源系统MySQL接口select获取并加工数据。本文将详细探讨如何配置和使用该平台的元数据,以实现高效的数据请求与清洗。 #### 配置元数据 元数据配置是实现数据集成的关键步骤。以下是一个具体的元数据配置示例: ```json { "api": "select", "effect": "QUERY", "method": "POST", "number": "生产订单号", "id": "{{生产订单号}}{{原材料编号}}", "idCheck": true, "request": [ { "field": "main_params", "label": "main_params", "type": "object", "describe": "111", "value": "1", "children": [ { "field": "limit", "label": "limit", "type": "string", "value": "100" }, { "field": "offset", "label": "offset", "type": "string" } ] } ], "otherRequest": [ { "field": "main_sql", "label": "main_sql", "type": "string", "describe": "111", "value": " select case mm.delivery_org when 'T01.01' then CONCAT('HJ',CAST(i.id AS CHAR)) when 'T04' then CONCAT('HJGD',CAST(i.id AS CHAR)) end as 生产订单号, a.part_no as 成品编号, now() as 日期, a.req_num as 生产数量, a.mold_no as 计划跟踪号, m.part_no as 原材料编号, i.quantity as 分子, 1 as 分母, i.id as sourceid, a.req_num*i.quantity as 领料数量, mm.delivery_org as 供应组织 FROM mbs_nuclear_price_info i LEFT JOIN mbs_nuclear_price_task a ON i.nuclear_price_task_uuid = a.nuclear_price_task_uuid LEFT JOIN basic_material_info m on i.raw_material_info=m.material_info_no LEFT JOIN mbs_order_plan_bom l on a.mold_no=l.bom_no LEFT JOIN mbs_order_bom mm on mm.bom_uuid=l.bom_uuid WHERE a.is_cancel = '1' and a.company_code = 'TYZN' and i.outsourced_type='1' AND i.create_time>(select config_value from sys_config where config_id=337) and is_success1 !='1' and i.is_success='1' limit :limit offset :offset" } ], “autoFillResponse”: true, “omissionRemedy”: { “crontab”: “1 1 1 1 1”, “takeOverRequest”: [] } } ``` #### 数据请求与清洗 在上述配置中,`api`字段指定了要调用的MySQL接口为`select`,并通过`POST`方法发送请求。主要参数包括: - `number`: 用于标识生产订单号。 - `id`: 用于生成唯一标识符,结合了生产订单号和原材料编号。 - `idCheck`: 设置为true,确保ID唯一性检查。 ##### 请求参数 请求参数定义在`request`字段中,其中包含一个对象类型的`main_params`,其子字段包括: - `limit`: 限制返回记录数,默认值为100。 - `offset`: 用于分页查询。 ##### SQL查询语句 实际的数据查询由`otherRequest`中的`main_sql`字段定义,该字段包含了复杂的SQL查询语句,用于从多个表中提取所需的数据,并进行必要的转换和过滤。例如: ```sql SELECT CASE mm.delivery_org WHEN 'T01.01' THEN CONCAT('HJ', CAST(i.id AS CHAR)) WHEN 'T04' THEN CONCAT('HJGD', CAST(i.id AS CHAR)) END AS 生产订单号, a.part_no AS 成品编号, NOW() AS 日期, a.req_num AS 生产数量, a.mold_no AS 计划跟踪号, m.part_no AS 原材料编号, i.quantity AS 分子, 1 AS 分母, i.id AS sourceid, a.req_num * i.quantity AS 领料数量, mm.delivery_org AS 供应组织 FROM mbs_nuclear_price_info i LEFT JOIN mbs_nuclear_price_task a ON i.nuclear_price_task_uuid = a.nuclear_price_task_uuid LEFT JOIN basic_material_info m ON i.raw_material_info = m.material_info_no LEFT JOIN mbs_order_plan_bom l ON a.mold_no = l.bom_no LEFT JOIN mbs_order_bom mm ON mm.bom_uuid = l.bom_uuid WHERE a.is_cancel = '1' AND a.company_code = 'TYZN' AND i.outsourced_type = '1' AND i.create_time > (SELECT config_value FROM sys_config WHERE config_id = 337) AND is_success1 != '1' AND i.is_success = '1' LIMIT :limit OFFSET :offset; ``` #### 自动填充响应与遗漏补救 配置中的`autoFillResponse`设置为true,表示系统会自动填充响应结果。此外,还定义了一个定时任务(crontab)用于处理遗漏的数据请求。 通过以上配置,我们可以高效地从MySQL数据库中获取并加工所需的数据,为后续的数据转换与写入阶段打下坚实基础。这种全异步、多系统支持的平台特性,使得不同系统间的数据无缝对接成为可能,大大提升了业务透明度和效率。 ![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/S3.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口 在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并转为目标平台——金蝶云星空API接口所能够接收的格式,最终写入目标平台。以下将详细介绍如何通过轻易云数据集成平台实现这一过程。 #### 元数据配置解析 根据提供的元数据配置,我们需要将生产用料清单新增的数据转换为金蝶云星空API接口所能接受的格式。元数据配置如下: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ { "field": "FID", "label": "FID", "type": "string", "value": "_findCollection find FID from d9c54956-106b-36e1-8018-91a8855f6316 where FMoBillNo={{生产订单号}}" }, { "field": "FEntity", "label": "子项明细", "type": "array", ... } ], ... } ``` #### 数据提取与转换 首先,需要从源系统中提取相关的数据。以生产订单号为关键字,通过 `_findCollection` 方法从指定集合中查找相关字段值。例如,提取 `FID` 字段: ```json { "field": "FID", "label": "FID", "type": "string", "value": "_findCollection find FID from d9c54956-106b-36e1-8018-91a8855f6316 where FMoBillNo={{生产订单号}}" } ``` 这里使用了 `_findCollection` 方法,根据 `生产订单号` 查找对应的 `FID` 值。 接下来是对子项明细 `FEntity` 的处理,其中包括多个字段,如 `FMaterialID2`, `FMaterialType`, `FDosageType`, 等等。这些字段需要根据源系统的数据进行相应的转换。例如: ```json { ... { "field": "FMaterialID2", "label": "子项物料编码", ... {"name":"ConvertObjectParser","params":"FNumber"}, ... {"value":"{{原材料编号}}"} }, ... } ``` 在这个例子中,使用了 `ConvertObjectParser` 转换器,将原材料编号转换为目标系统所需的格式。 #### 数据写入 完成数据转换后,需要将这些数据写入到金蝶云星空系统。根据元数据配置中的 `operation` 部分,采用批量保存的方法: ```json { ... { "field":"Operation", ... {"value":"batchSave"} }, ... } ``` 使用 HTTP POST 方法,将转换后的 JSON 数据发送到金蝶云星空 API 接口: ```json { ... { ... {"method":"POST"}, ... }, } ``` #### 特殊字段处理 某些字段需要进行特殊处理,例如标准用量、需求数量、应发数量等,这些字段需要进行四舍五入处理: ```json { ... { ... {"field":"FStdQty","value":"_function ROUND(\"{{领料数量}}\" , 3 )"}, {"field":"FNeedQty2","value":"_function ROUND(\"{{领料数量}}\" , 3 )"}, {"field":"FMustQty","value":"_function ROUND(\"{{领料数量}}\" , 3 )"}, ... } } ``` 通过 `_function ROUND` 函数,对领料数量进行小数点后三位的四舍五入操作。 #### 提交与审核 最后,设置是否自动提交并审核,以及验证基础资料有效性等参数: ```json { ... {"field":"IsAutoSubmitAndAudit","value":"false"}, {"field":"IsVerifyBaseDataField","value":"true"}, ... } ``` 这些参数确保在写入过程中对数据进行严格校验,并决定是否自动提交和审核。 通过以上步骤,我们可以利用轻易云数据集成平台,实现从源系统到金蝶云星空系统的数据ETL转换和写入操作。这不仅提高了业务流程的自动化程度,还确保了数据的一致性和准确性。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/T19.png~tplv-syqr462i7n-qeasy.image)