基于轻易云平台实现MySQL与金蝶云星空数据对接

  • 轻易云集成顾问-姚缘
### MySQL 数据集成到金蝶云星空——SC 采购入库案例分享 在现代企业跨系统数据集成的复杂场景中,如何确保数据准确、实时、高效地流动,是每个技术团队必须面对的关键问题。本文将直击MySQL与金蝶云星空之间的数据对接,以"SC采购入库-深圳天一-OK"方案为例,深入探讨其实现过程中的技术要点。 #### 系统环境概述 该案例涉及两个主要系统:MySQL数据库和金蝶云星空。其中,MySQL用于存储和处理核心业务数据,而金蝶云星空负责财务及供应链管理。直接的集成需求是将MySQL中的采购入库数据无缝导入到金蝶云星空,实现业务流程自动化。 #### 技术挑战与解决方案 1. **高吞吐量写入能力**: 为了保证大量生产数据迅速且稳定地导入至MySQL,然后从中抽取并写入到金蝶云星空,我们采用分批次处理机制,通过select API定期抓取MySQL接口数据,并利用batchSave API批量写入目标系统。这不仅提升了整体处理效率,还降低了大规模单次操作可能带来的压力风险。 2. **集中监控和告警**: 集成过程中,我们引入了集中监控与告警功能。通过实时追踪任务状态及性能指标,确保任何异常情况能够及时被发现并妥善处理。例如,当出现网络延迟或API响应错误时,系统会自动触发告警,并执行预配置的重试策略,以保障任务最终成功完成。 3. **自定义转换逻辑**: 考虑到两者之间的数据格式差异,我们设计了一套灵活的数据转换规则,将源数据规范化为符合目标要求的结构。同时支持针对特定字段进行映射及逻辑运算,使得最终生成的报表准确反映各项业务内容。 4. **异常检测与错误重试机制**: 我们设置了详细的错误捕捉机制,对所有API调用进行严格校验。一旦检测到信息缺失或类型不符等常见问题,会立即记录日志并进入重试环节,有效地规避因偶发性故障导致的数据丢失等风险。 以上几个方面构建出一个高度可靠、快速响应且维护便捷的跨平台数据集成解决方案,为企业提供强有力的信息支撑。接下来我们详解具体实施步骤及代码示例,以帮助更多同业者应对类似挑战。 ![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/D24.png~tplv-syqr462i7n-qeasy.image) ### 调用MySQL接口select获取并加工数据 在轻易云数据集成平台中,调用源系统MySQL接口`select`获取并加工数据是数据集成生命周期的第一步。本文将深入探讨如何通过配置元数据来实现这一过程。 #### 元数据配置解析 元数据配置是实现数据请求与清洗的关键。以下是一个典型的元数据配置示例: ```json { "api": "select", "effect": "QUERY", "method": "POST", "id": "采购入库单号", "request": [ { "field": "main_params", "label": "主参数", "type": "object", "describe": "对应其它请求字段内SQL语句的主参数,必须一一对应。", "value": "select \nc.business_no as 采购单号,\na.part_no as 成品编号,\nc.ser_code as 条码,\na.confirm_numb as 数量,\ne.pur_price as 含税单价,\nc.mode_no as 计划跟踪号,\nCONCAT(f.confrim_no,'_',CAST(a.id AS CHAR)) as 领料单号,\ndate(a.update_time) as 日期,\nCONCAT(a.part_no,concat('_',c.current_process_code)) as 物料编号,\na.uuid as sourceid\nfrom wms_instock_confirm_task_detail a\nleft join wms_instock_purchase_task_detail c on c.out_type='2' AND MATTERIAL_TYPE='3'\nleft join wms_instock_confirm_main_task_detail b on b.connect_uuid=c.uuid\nleft join mbs_pur_record_detail e on c.connect_id=e.id\nleft join wms_instock_confirm_task f on f.uuid=a.confirm_detail_task_uuid\nwhere a.connect_uuid=b.uuid\nand a.company_code='TYZN'\nand a.create_time>'2023-09-01'\nand f.confrim_no='RKQR20230905026'\n limit :limit offset :offset", "children": [ { "field": "limit", "label": "行数", "type": "int", "value": "{PAGINATION_PAGE_SIZE}" }, { "field": "offset", "label": "偏移量", "type": "int", "value": "{PAGINATION_START_ROW}" } ] } ], ... } ``` #### 数据请求与清洗 在上述配置中,我们定义了一个`select`类型的API接口,用于从MySQL数据库中查询采购入库相关的数据。具体步骤如下: 1. **定义主参数**: - `main_params`字段包含了SQL查询语句及其动态参数(如`:limit`和`:offset`)。 - 动态参数通过占位符表示,并在执行查询时进行绑定。 2. **绑定动态参数**: - `limit`和`offset`分别表示分页查询中的行数和偏移量。 - 在实际请求时,这些参数会被替换为具体的值,以实现分页查询。 #### SQL语句优化 为了提高查询效率和可维护性,我们可以对SQL语句进行优化。例如,将动态字段`:limit`替换为占位符,并在执行查询前进行参数绑定: ```sql select c.business_no as 采购单号, g.supplier_short_code as 供应商代码, g.tax_points*100 as 税率, e.is_give_away as 赠品, case when c.MATTERIAL_TYPE='1' then e.part_no else a.part_no end as 成品编号, case when c.MATTERIAL_TYPE='1' then e.pic_no else h.pic_no end as 图号, c.ser_code as 条码, case when (c.out_type='2' AND c.MATTERIAL_TYPE='3') then a.confirm_numb when (c.out_type='1' AND c.MATTERIAL_TYPE='4') then a.confirm_numb when (c.out_type='1' AND c.MATTERIAL_TYPE='1') then a.instock_weight else a.confirm_numb end as 数量, e.pur_price as 含税单价, i.real_name as 采购员, case when left(a.part_no,2)='01' then '' else c.mode_no end as 计划跟踪号, CONCAT(f.confrim_no,'_',CAST(a.id AS CHAR)) as 采购入库单号, date(a.create_time) as 日期, case when (c.out_type='2' AND c.MATTERIAL_TYPE='3') then CONCAT(a.part_no,concat('_',c.current_process_code)) when (c.out_type='1' AND c.MATTERIAL_TYPE='3') then CONCAT(a.part_no,concat('_',c.current_process_code)) when (c.out_type='1' AND c.MATTERIAL_TYPE='4') then CONCAT(a.part_no,concat('_WW')) when (c.out_type='1' AND c.MATTERIAL_TYPE='1') then a.part_no else a.part_no end as 物料编号, ... from wms_instock_confirm_task_detail a left join wms_instock_confirm_main_task_detail j on a.connect_uuid=j.uuid ... where a.connect_uuid=b.uuid and a.company_code='TYZN' and g.is_inner='1' and k.is_second_pur='1' and a.create_time>(select config_value from sys_config where config_id=341) and a.is_success4<>'1' limit ? offset ? ``` 通过这种方式,我们能够确保SQL语句的可读性和安全性,同时提高查询性能。 #### 实践应用 在实际应用中,通过上述元数据配置,我们可以轻松实现从MySQL数据库中获取并加工数据。这一步骤不仅确保了数据请求的准确性,还为后续的数据转换与写入打下了坚实基础。 总之,通过合理配置元数据并优化SQL语句,可以有效提升数据集成过程中的效率和可靠性,为业务系统提供高质量的数据支持。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/S30.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将源数据转换并写入金蝶云星空API接口 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并转为目标平台——金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将详细介绍如何利用轻易云数据集成平台完成这一过程。 #### 配置元数据 我们首先需要配置元数据,以确保数据能够正确地映射到金蝶云星空API接口所需的格式。以下是一个完整的元数据配置示例: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "FBillTypeID", "label": "单据类型", "type": "string", "describe": "单据类型", "parser": {"name":"ConvertObjectParser","params":"FNumber"}, "value":"RKD01_SYS" }, { "field": "FBusinessType", "label": "业务类型", "type": "string", "describe": "下拉列表", "value":"CG" }, { ... } ], ... } ``` #### 数据转换与映射 在配置元数据时,我们需要特别注意字段的映射和转换规则。例如: - `FBillTypeID` 字段代表单据类型,使用 `ConvertObjectParser` 将其值转换为金蝶云星空所需的格式。 - `FStockOrgId` 和 `FPurchaseOrgId` 字段根据供应组织进行条件判断和转换。 ```json { ... { "field":"FStockOrgId", "label":"收料组织", ... "value":"_function case '{{供应组织}}' when 'T01.01' then 'T01.06' when 'T04' then 'T04' else '' end" }, { ... } } ``` #### 明细信息处理 对于明细信息,我们使用数组形式来处理多条记录。每条记录包含多个字段,如物料编码、实收数量、单价等。这些字段同样需要进行适当的转换和映射。 ```json { ... { "field":"FInStockEntry", ... "children":[ { ... { "field":"FMaterialId", ... "value":"{{物料编号}}" }, { ... } } ] } } ``` #### 财务信息处理 财务信息部分包含结算组织、付款组织等字段,这些字段也需要进行相应的转换和映射。例如: ```json { ... { ... { "field":"FSettleOrgId", ... "value":"_function case '{{供应组织}}' when 'T01.01' then 'T01' when 'T04' then 'T04' else '' end" }, { ... } } } ``` #### 提交与审核 在所有字段都正确映射和转换后,我们需要将这些数据通过API接口提交到金蝶云星空,并选择是否自动提交并审核。 ```json { ... { ... { "field":"IsAutoSubmitAndAudit", ... "value":"true" }, { ... } } } ``` 通过上述步骤,我们可以确保源平台的数据经过ETL转换后,能够无缝对接到金蝶云星空API接口,实现高效的数据集成与写入。 ![系统集成平台API接口配置](https://pic.qeasy.cloud/T26.png~tplv-syqr462i7n-qeasy.image)