采购入库数据高效同步的技术实现

  • 轻易云集成顾问-潘裕
### 案例分享:采购入库同步(杭州汤臣倍健) 在企业数据集成的实践中,如何确保不同系统之间的数据无缝对接、准确流转是关键。本文将介绍一个实际操作案例,即将汤臣倍健营销云的数据集成到金蝶云星辰V2的实施过程,其中我们聚焦于**采购入库同步(杭州汤臣倍健)**方案。 我们的主要任务是通过调用汤臣倍健营销云的API接口获取采购入库单信息,并按需格式化后批量写入到金蝶云星辰V2系统。在此过程中,我们面临了一系列技术挑战,包括但不限于: 1. **如何确保不漏单**:为了提高数据抓取的可靠性和完整性,我们利用定时任务机制,每隔指定时间段自动触发接口`/erp/api/order/query/purInWarehsOrder`请求,实现了精确且可靠的数据抓取。 2. **大量数据快速写入**:面对大批量数据需要高效写入至金蝶云星辰V2,通过优化并行处理与分批提交策略,有效地提升了处理效率。同时,针对目标API `/jdy/v2/scm/pur_inbound` 的特性进行了专项优化。 3. **分页与限流问题处理**:由于汤臣倍健营销云接口存在分页及限流限制,我们实现了对分页结果逐页读取,并内置重试机制以应对可能出现的请求失败及限流情况。 4. **数据格式差异解决**:两套系统间的数据结构存在显著差异,为保证顺利对接,需要进行复杂的数据映射转换。通过自定义函数和嵌套规则实现了从源头到目标端的一一对应关系,从而保证最终写入无误。 5. **异常处理与日志记录**:不可避免会遇到意外错误,为保障业务流程不中断,我们设计了一整套异常处理机制,包括即时告警、回滚重试等手段。另外,通过实时监控和详细日志记录,更便于后续排查问题根因,提高整体稳定性和可维护性。 上述措施只是一部分,更多细节将在具体方案内容中全面展开。这次成功实施不仅印证了技术选型的重要性,也展示出适当工具配置带来的显著优势。 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/D2.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统汤臣倍健营销云接口/erp/api/order/query/purInWarehsOrder获取并加工数据 在数据集成生命周期的第一步,调用源系统的API接口是至关重要的一环。本文将深入探讨如何通过轻易云数据集成平台调用汤臣倍健营销云的接口`/erp/api/order/query/purInWarehsOrder`来获取并加工采购入库数据。 #### 接口配置与请求参数 首先,我们需要配置API接口的元数据,以确保能够正确地调用和处理返回的数据。以下是该接口的元数据配置: ```json { "api": "/erp/api/order/query/purInWarehsOrder", "effect": "QUERY", "method": "POST", "number": "number", "id": "id", "idCheck": true, "request": [ {"field":"tenantId","label":"经销商id","type":"string","describe":"经销商id(必填,营销云id)如:08e2fd9d074f4ef7b5e6416b74d006d6","value":"xxx"}, {"field":"yxyNumber","label":"营销云销售订单号","type":"string","describe":"如:lzwhy0121012002,传此参数时,其他时间状态等条件无效"}, {"field":"number","label":"系统订单号","type":"string","describe":"如:CGDD00000003744,传此参数时,其他时间状态等条件无效"}, {"field":"status","label":"订单状态","type":"string","describe":"0:未审核1:已审核(已出库)","value":"1"}, {"field":"beginTime","label":"开始时间","type":"string","describe":"timeType为空或者0,基于创建时间查询,timeType为1,基于更新时间查询,格式:0000-00-00或0000-00-0000:00:00,如果不传单号此字段必填","value":"{{LAST_SYNC_TIME|datetime}}"}, {"field":"endTime","label":"结束时间","type":"string","describe":"timeType为空或者0,基于创建时间查询,timeType为1,基于更新时间查询,格式:0000-00-00或0000-00-0000:00:00,如果不传单号此字段必填","value":"{{CURRENT_TIME|datetime}}"}, {"field":"pageNo","label":"页码","type":"string","describe":"默认1","value":"1"}, {"field":"pageSize","label":"每页条数","type":"string","describe":"默认30","value":"30"}, {"field":"timeType","label":"时间段标志","type":"string","describe":"查询时间段标识,0:创建时间(默认),1:最后更新时间","value":"1"} ], "autoFillResponse": true, "condition": [ [{"field": "itemList.materialNumber", "logic": "notlike", "value": "F.A"}] ] } ``` #### 请求参数详解 在上述配置中,我们定义了多个请求参数,每个参数都有其特定的用途: - `tenantId`: 经销商ID,是必填项,用于标识具体的经销商。 - `yxyNumber`: 营销云销售订单号,当提供此参数时,其它时间和状态条件将失效。 - `number`: 系统订单号,当提供此参数时,其它时间和状态条件将失效。 - `status`: 订单状态,可选值为`0`(未审核)和`1`(已审核)。 - `beginTime` 和 `endTime`: 时间范围,用于限定查询的数据范围。格式为`YYYY-MM-DD`或`YYYY-MM-DD HH:mm:ss`。 - `pageNo`: 页码,用于分页查询。 - `pageSize`: 每页条数,用于分页查询。 - `timeType`: 时间段标志,用于指定是基于创建时间还是最后更新时间进行查询。 #### 数据请求与清洗 在调用API接口后,我们需要对返回的数据进行清洗和处理。轻易云平台提供了自动填充响应数据的功能,通过设置`autoFillResponse: true`可以简化这一过程。 此外,我们还可以通过条件过滤来排除不需要的数据。例如,在上述配置中,我们使用了一个条件过滤器: ```json "condition": [ [{"field": "itemList.materialNumber", "logic": "notlike", "value": "F.A"}] ] ``` 这个过滤器会排除掉物料编号包含“F.A”的记录,从而确保我们只获取到符合业务需求的数据。 #### 数据转换与写入 在完成数据请求与清洗后,我们需要将数据转换为目标系统所需的格式,并写入到目标数据库或系统中。这一步通常涉及到字段映射、数据类型转换等操作。轻易云平台支持多种异构系统间的数据集成,可以方便地实现这一过程。 通过以上步骤,我们可以高效地从汤臣倍健营销云获取采购入库数据,并进行必要的清洗和转换,为后续的数据处理打下坚实基础。 ![打通金蝶云星空数据接口](https://pic.qeasy.cloud/S28.png~tplv-syqr462i7n-qeasy.image) ### 采购入库同步至金蝶云星辰V2API接口的ETL转换技术案例 在数据集成生命周期的第二步中,我们将已经集成的源平台数据进行ETL转换,以符合金蝶云星辰V2API接口所能接收的格式,最终写入目标平台。本文将详细探讨这一过程中的技术细节和实现方法。 #### API接口配置 根据元数据配置,我们需要调用金蝶云星辰V2的`/jdy/v2/scm/pur_inbound` API接口,使用POST方法提交采购入库数据。以下是具体的元数据配置: ```json { "api": "/jdy/v2/scm/pur_inbound", "effect": "EXECUTE", "method": "POST", "number": "1", "id": "1", "name": "1", "idCheck": true, "request": [ {"field":"bill_date","label":"单据日期","type":"string","describe":"单据日期","value":"{{auditTime|date}}"}, {"field":"bill_no","label":"单据编码","type":"string","describe":"单据编码"}, {"field":"transtype","label":"业务类型","type":"string","value":"2"}, {"field":"supplier_id","label":"供应商编码","type":"string","describe":"供应商编码","value":"1320328622636055552"}, {"field":"remark","label":"备注","type":"string","describe":"商品编码","value":"{remark}-来自营销云-{yxyNumber}"}, { "field":"material_entity", "label":"商品分录", "type":"array", "describe":"含税单价", "value":"itemList", "children":[ {"field":"material_number","label":"商品编码","type":"string","describe":"商品编码","value":"{extMaterialNo}"}, {"field":"stock_id","label":"仓库编码","type":"string","describe":"仓库编码","value":"1320317674445628416"}, {"field":"is_free","label":"是否赠品","type":"int","describe":"是否赠品","value":"false"}, {"field":"qty","label":"数量","type":"string","describe" ![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/T16.png~tplv-syqr462i7n-qeasy.image)