ETL转换与数据写入:从汤臣倍健到金蝶云星辰V2的实践

  • 轻易云集成顾问-黄宏棵
### 汤臣倍健营销云数据集成到金蝶云星辰V2案例分享:仓库调拨-(佰嘉)杭州佰健盛庆 在这个技术案例中,我们将深入探讨如何通过轻易云数据集成平台,实现汤臣倍健营销云的借调订单数据与金蝶云星辰V2的无缝对接。重点分享的是具体API接口调用、分页处理及限流应对等关键细节。 首先,明确两个核心API接口:从汤臣倍健营销云获取借调订单的`/erp/api/order/query/borrowOrder`和向金蝶云星辰V2写入调拨单据的`/jdy/v2/scm/inv_tfmove`。成功的数据集成不仅需要保证大批量数据快速可靠地传输,还要关注每一个环节的数据格式差异与异常处理机制。 例如,在定时抓取汤臣倍健营销云数据时,通过设置高效且稳定的定时任务,不但能确保按计划周期性的获取新订单,还能实现实时监控与日志记录,及时捕捉并解决潜在问题。而在实际进行大量数据写入到金蝶云星辰V2过程中,需要考虑如何应对不同步导致的数据丢失或重试机制,从而保障业务流程的一致性和完整性。 此外,针对分页和限流问题,我们采用了一系列优化策略来提升综合性能表现,使得整个系统能够稳妥运行。同时,通过定制化的数据映射工具,解决两套系统间复杂的数据结构转换问题,实现了真正灵活且精准的数据互通。 接下来,将详细讲解各模块配置及操作步骤,以便更好地理解仓库调拨项目中的创新实践。 ![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/D24.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统汤臣倍健营销云接口/erp/api/order/query/borrowOrder获取并加工数据 在数据集成过程中,调用源系统API接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用汤臣倍健营销云的接口`/erp/api/order/query/borrowOrder`来获取并加工数据。 #### 接口配置与调用 首先,我们需要配置API接口的元数据。根据提供的元数据配置,我们可以看到该接口使用POST方法进行调用,并且需要传递多个参数来完成请求。 ```json { "api": "/erp/api/order/query/borrowOrder", "method": "POST", "number": "number", "id": "id", "pagination": { "pageSize": 30 }, "omissionRemedy": { "crontab": "2 */2 * * *", "takeOverRequest": [ { "field": "beginTime", "label": "修改时间开始段", "type": "string", "is_required": true, "value": "{{HOURE_AGO_2|datetime}}" } ] }, "condition": [ [ { "field": "subtype", "logic": "eq", "value": "301" } ] ], "idCheck": true, "request": [ { "field": "tenantId", "label": "经销商id", "type": "string", "describe": "(必填,营销云id)如:08e2fd9d074f4ef7b5e6416b74d006d6", "value":"xxx" }, { "field": "number", ... ``` #### 参数详解 1. **tenantId**: 经销商ID,这是一个必填字段,用于标识具体的经销商。 2. **number**: 系统订单号(调拨出库单),当传递此参数时,其他时间和状态条件将无效。 3. **status**: 订单状态,0表示未审核,1表示已审核(已出库)。 4. **beginTime**: 开始时间,基于更新时间查询,格式为`YYYY-MM-DD HH:mm:ss`。 5. **endTime**: 结束时间,与开始时间配合使用。 6. **pageNo**: 页码,默认值为1。 7. **pageSize**: 每页条数,默认值为30。 这些参数通过POST请求发送到指定的API接口,以获取符合条件的数据。 #### 数据请求与清洗 在发起请求之前,我们需要确保所有必填字段都已正确填写。例如,如果没有提供系统订单号(number),则必须提供开始时间和结束时间。以下是一个示例请求体: ```json { "tenantId":"08e2fd9d074f4ef7b5e6416b74d006d6", ... } ``` 在接收到响应后,需要对数据进行清洗和处理。清洗过程包括但不限于: - 去除无效或重复的数据 - 格式化日期和数字 - 根据业务需求进行字段映射和转换 #### 数据转换与写入 清洗后的数据需要进一步转换,以适应目标系统的要求。这一步通常涉及复杂的业务逻辑,例如: - 字段重命名 - 数据类型转换 - 根据特定规则计算新字段 最终,将处理好的数据写入目标系统。这一步可以通过轻易云平台的可视化界面实现,确保每个环节都透明可见。 #### 异常处理与补救机制 在实际操作中,不可避免会遇到各种异常情况,如网络故障、接口超时等。轻易云平台提供了完善的异常处理机制,例如: - 自动重试策略 - 定时任务(如crontab)确保定期检查和补救遗漏的数据 例如,通过以下crontab配置,可以每两小时执行一次数据补救任务: ```json "omissionRemedy":{ ... } ``` 通过上述步骤,我们可以高效地调用汤臣倍健营销云接口获取并加工所需的数据,为后续的数据集成打下坚实基础。 ![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/S5.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台生命周期第二步:ETL转换与数据写入金蝶云星辰V2API接口 在轻易云数据集成平台中,完成数据请求与清洗后,接下来需要将源平台的数据进行ETL(Extract, Transform, Load)转换,并最终写入目标平台——金蝶云星辰V2。本文将详细探讨如何利用元数据配置,将仓库调拨数据转换为金蝶云星辰V2 API接口所能接受的格式,并成功写入目标系统。 #### 数据转换与写入的关键步骤 1. **提取源数据** 在ETL过程中,首先需要从源平台提取相关数据。这一步通常已经在生命周期的第一阶段完成,因此我们直接进入数据转换环节。 2. **数据转换** 数据转换是ETL过程中的核心步骤,需要根据目标API接口的要求,对提取的数据进行格式和内容上的调整。以下是具体的元数据配置及其解释: ```json { "api": "/jdy/v2/scm/inv_tfmove", "effect": "EXECUTE", "method": "POST", "number": "1", "autoCheck": "inv_tfmove_bill_order", "id": "1", "name": "1", "idCheck": true, "request": [ { "field": "bill_date", "label": "出库日期", "type": "string", "describe": "出库日期,格式:2019-01-01", "value": "{created}" }, { "field": "trans_type", "label": "业务类型", "type": "string", "describe": "1:同价调拨(默认),2:异价调拨", "value": "1" }, { "field": "trans_fer_status", ... ``` 3. **字段映射与处理** - `bill_date`字段对应于出库日期,其值通过`{created}`占位符从源数据中获取。 - `trans_type`字段表示业务类型,固定值为"1"(同价调拨)。 - `trans_fer_status`字段表示调拨状态,固定值为"3"(全部入库)。 4. **嵌套数组处理** 商品分录信息以数组形式存在,需要对每个商品条目进行详细映射: ```json { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... { ... } } } } } } } } } } } } } } }, ``` - `material_id`字段通过查询操作 `_findCollection find id from 395d1591-aee0-3f10-ad09-d5593167af48 where number={{itemList.helpCode}}` 获取商品ID。 - `in_stock_id` 和 `out_stock_id` 字段分别表示调入和调出仓库,通过类似查询操作获取相应ID。 - 其他字段如`batch_no`, `kf_date`, `valid_date`, `kf_period`, `kf_type`, `qty`, `unit_id`等,均通过占位符从源数据中获取并映射到目标字段。 5. **加载到目标平台** 最后一步是将转换后的数据通过POST请求发送至金蝶云星辰V2 API接口: ```json { ... } ``` #### 实际案例应用 假设我们有一条来自杭州佰健盛庆的仓库调拨记录,其原始数据如下: ```json { ... } ``` 通过上述元数据配置,我们可以将其成功转换为符合金蝶云星辰V2 API接口要求的数据格式,并通过POST请求写入目标系统。具体实现代码如下: ```python import requests url = 'https://api.kingdee.com/jdy/v2/scm/inv_tfmove' headers = {'Content-Type': 'application/json'} data = { ... } response = requests.post(url, json=data, headers=headers) if response.status_code == 200: print("Data successfully written to Kingdee Cloud.") else: print("Failed to write data:", response.content) ``` #### 总结 通过轻易云数据集成平台的ETL功能,我们能够高效地将源平台的数据转换为金蝶云星辰V2 API接口所需的格式,并成功写入目标系统。这一过程不仅简化了异构系统间的数据对接,也提高了整体业务流程的透明度和效率。 ![如何开发企业微信API接口](https://pic.qeasy.cloud/T24.png~tplv-syqr462i7n-qeasy.image)