轻易云平台实现ETL转换并写入金蝶云星辰V2的完整过程

  • 轻易云集成顾问-陈洁琳
### 汤臣倍健营销云数据集成到金蝶云星辰V2:退货入库(杭州佰健盛吉)技术解析 在实际项目中,实现不同系统间的数据对接是一个复杂且多挑战的任务。本文将基于汤臣倍健营销云数据集成到金蝶云星辰V2的具体案例,探讨一系列关键技术问题与解决方案,为读者提供详细的技术指导。 首先,我们面临的是如何确保从汤臣倍健营销云接口 `/erp/api/order/query/saleReturnOrder` 获取的数据不漏单,并能够大量快速地写入到金蝶云星辰V2接口 `/jdy/v2/scm/sal_in_bound` 中。在这个过程中,需要处理包括分页、限流、数据格式差异等多方面的问题。 #### 1. 数据获取和保证完整性 为了确保每次抓取汤臣倍健营销云的数据不遗漏,我们配置了定时任务来定期调用其API,同时引入了分段抓取机制,通过分页参数逐页提取订单数据。这不仅提升了效率,还避免了单次拉取过多造成的请求超时或被限流的问题。 #### 2. 大量数据快速写入金蝶云星辰V2 处理完毕的数据需要迅速、安全地写入到金蝶云星辰V2。通过批量操作方式,使用轻易平台高效传输模块,我们得以在短时间内完成大规模数据迁移。同时在写入前进行了严格的数据映射和转换,以适应目标系统要求的特定格式。 #### 3. 异常处理与重试机制 任何系统对接都难免遇到错误情况。对此我们实现了详细的异常监控和日志记录功能。当检测到错误发生时,会自动触发重试机制去重新发送失败请求,确保最终所有有效信息成功存储至目标系统中。而对于无法自动纠正和恢复的问题,则会记录相关详细日志供后续人工排查解决。 通过以上步骤以及细节配置,我们顺利实现了汤臣倍健营销云退货订单从源头至金蝶端全生命周期无缝衔接。本章仅做开篇阐述,在随后的章节中,我将深入介绍各环节涉及具体代码示例及更多优化技巧。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/D22.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统汤臣倍健营销云接口获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用汤臣倍健营销云的`/erp/api/order/query/saleReturnOrder`接口获取并加工数据。 #### 接口配置与请求参数 首先,我们需要了解接口的基本配置和请求参数。根据元数据配置,`/erp/api/order/query/saleReturnOrder`接口采用POST方法进行数据请求。以下是主要的请求参数及其描述: - `tenantId`: 经销商id(必填),例如:34cc4109705e4c058b7b3b0352e57d31 - `yxyNumber`: 营销云销售订单号,例如:YD1215710122031701 - `number`: 系统订单号,例如:XOUT0000000293 - `status`: 订单状态,0表示未审核,1表示已审核(已出库) - `beginTime`: 开始时间,格式为0000-00-00或0000-00-00 00:00:00 - `endTime`: 结束时间,格式为0000-00-00或0000-00-00 00:00:00 - `pageNo`: 页码,默认值为1 - `pageSize`: 每页条数,默认值为30 - `timeType`: 查询时间段标识,0表示创建时间(默认),1表示最后更新时间 这些参数中的一些是必填项,如`tenantId`、`beginTime`和`endTime`(在不传单号的情况下)。其他参数则根据具体需求进行填写。 #### 数据请求与清洗 在实际操作中,我们需要构建一个有效的请求体来调用该API。以下是一个示例请求体: ```json { "tenantId": "34cc4109705e4c058b7b3b0352e57d31", "status": "1", "beginTime": "{{LAST_SYNC_TIME|datetime}}", "endTime": "{{CURRENT_TIME|datetime}}", "pageNo": "1", "pageSize": "30", "timeType": "1" } ``` 在这个请求体中,我们使用了动态变量`{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`来自动填充开始时间和结束时间。这些变量确保了我们每次调用API时都能获取到最新的数据。 #### 数据转换与写入 一旦成功获取到数据,我们需要对数据进行清洗和转换,以便后续处理。在轻易云平台上,可以通过内置的ETL工具对数据进行清洗和转换。例如,我们可以将返回的数据字段映射到目标系统所需的字段格式,并进行必要的数据类型转换。 假设我们从API返回的数据结构如下: ```json { "data": [ { "orderId": "XOUT0000000293", "orderStatus": "已审核", "createTime": "2023-10-01 12:34:56" }, ... ] } ``` 我们可以通过轻易云平台的映射工具,将这些字段映射到目标系统所需的字段。例如,将`orderId`映射到目标系统的订单编号字段,将`orderStatus`映射到订单状态字段,并将日期格式转换为目标系统所需的格式。 #### 自动化与监控 为了确保整个过程高效且无误,我们可以利用轻易云平台提供的自动化功能和实时监控工具。通过设置定时任务,我们可以定期调用API并处理返回的数据。同时,通过实时监控工具,我们可以随时查看数据流动和处理状态,及时发现并解决潜在问题。 总之,通过合理配置API请求参数、有效进行数据清洗与转换,以及利用自动化和监控工具,我们能够高效地完成从汤臣倍健营销云获取并加工数据这一关键步骤,为后续的数据处理奠定坚实基础。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/S13.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入金蝶云星辰V2 API接口 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(提取、转换、加载)处理,最终写入目标平台——金蝶云星辰V2 API接口。以下是具体的技术实现过程和相关配置细节。 #### 1. 配置API接口元数据 为了将数据写入金蝶云星辰V2,我们首先需要配置API接口的元数据。以下是针对退货入库场景的API配置: ```json { "api": "/jdy/v2/scm/sal_in_bound", "effect": "EXECUTE", "method": "POST", "number": "id", "id": "id", "name": "id", "idCheck": true, "request": [ {"field":"bill_source","label":"来源","type":"string","value":"ISV"}, {"field":"bill_date","label":"出库日期","type":"string","describe":"出库日期,格式:2019-01-01","value":"{{auditTime|date}}"}, {"field":"customer_id","label":"客户","type":"string","describe":"客户","value":"_findCollection find id from b41660e7-fa00-318f-bbee-1395e229ee6b where number={extCusCode}"}, {"field":"remark","label":"单据备注","type":"string","describe":"上传的附件url","value":"{remark}-来自营销云-{number}"}, {"field":"contact_address","label":"联系信息-详细地址","type":"string","describe":"联系信息-详细地址","value":"{shippingAddress}"}, {"field":"contact_linkman","label":"联系信息-联系人","type":"string","describe":"联系信息-联系人","value":"{contacts}"}, {"field":"contact_phone","label":"联系信息-联系方式","type":"string","describe":"联系信息-联系方式","value":"{phone}"}, {"field":"dept_number","label":"部门编码","type":"string","describe":"业务员","value":"BM00002"}, { "field": "material_entity", "label": "商品分录", "type": "array", "describe": "商品分录", "value": "itemList", "children": [ {"field": "material_id", "label": "商品id", "type": "string", "describe": "商品id", "value": "_findCollection find id from 395d1591-aee0-3f10-ad09-d5593167af48 where number={extMaterialNo}"}, {"field": "stock_id", "label": "仓库id", "type": "string", "describe": "仓库id", "value": "{{itemList.stockId}}" }, {"field":...} ] } ] } ``` #### 2. 数据提取与清洗 在数据提取阶段,我们从源系统获取原始数据,并进行必要的清洗操作。例如,提取订单号、客户编号、商品明细等字段。使用轻易云的数据清洗功能,可以对原始数据进行标准化处理,如日期格式转换、空值填充等。 #### 3. 数据转换 在转换阶段,我们需要将清洗后的数据按照目标平台所需的格式进行转换。根据上述元数据配置,主要涉及以下几个关键字段: - **bill_date**: 使用模板语言将`auditTime`字段格式化为`YYYY-MM-DD`。 - **customer_id**: 根据客户编号`extCusCode`从指定集合中查找对应的ID。 - **material_entity**: 商品分录是一个数组,每个商品明细都需要按照指定规则进行转换,包括商品ID、数量、单价等。 例如,针对商品分录中的每一项,我们可以使用如下规则进行转换: ```json { ... { field: 'material_entity', label: '商品分录', type: 'array', describe: '商品分录', value: 'itemList', children: [ { field: 'material_id', label: '商品id', type: 'string', describe: '商品id', value: '_findCollection find id from 395d1591-aee0-3f10-ad09-d5593167af48 where number={extMaterialNo}' }, { field: 'qty', label: '数量', type: 'int', describe: '数量', value: '{{itemList.opernumber}}' }, { field: 'tax_price', label: '含税单价', type: 'int', describe: '含税单价', value: '{{itemList.taxunitprice}}' }, ... ] } } ``` #### 4. 数据加载 最后一步是将转换后的数据通过API接口写入目标平台。在轻易云平台中,我们使用POST方法将处理好的JSON数据发送到金蝶云星辰V2的指定API接口。 ```python import requests import json url = "/jdy/v2/scm/sal_in_bound" headers = {'Content-Type': 'application/json'} data = { # 转换后的JSON数据 } response = requests.post(url, headers=headers, data=json.dumps(data)) if response.status_code == 200: print("Data successfully loaded to Kingdee Cloud.") else: print(f"Failed to load data. Status code: {response.status_code}") ``` 通过以上步骤,我们实现了从源系统到金蝶云星辰V2的数据ETL过程,确保了不同系统间的数据无缝对接和高效传输。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/T30.png~tplv-syqr462i7n-qeasy.image)