实现高效数据集成:汤臣倍健营销云与金蝶云星辰V2退货入库接口配置详解

  • 轻易云集成顾问-张妍琪
### 汤臣倍健营销云数据集成到金蝶云星辰V2案例分享:退货入库-厦门益天阁 在本次技术案例中,我们将深入探讨如何通过轻易云数据集成平台实现汤臣倍健营销云与金蝶云星辰V2的高效对接。具体场景是“退货入库-厦门益天阁”业务流程的系统集成。 #### 系统对接背景 为了确保在处理退货入库时的数据准确性和及时性,汤臣倍健需要从其营销云获取相关订单信息,并将这些数据批量写入到金蝶云星辰V2系统中。这项任务涉及多个关键API接口的调用,包括从汤臣倍健营销云获取退货订单详情的`/erp/api/order/query/saleReturnOrder`接口,以及向金蝶云星辰V2提交入库单据的`/jdy/v2/scm/sal_in_bound`接口。 #### 主要技术难点 1. **高吞吐量的数据处理**:我们需确保大量订单数据能够快速、可靠地传输至目标系统。 2. **分页和限流策略**:由于汤臣倍健营销云API可能存在分页及调用限制,需要设计有效的方法以应对。 3. **格式差异转换**:两套系统之间的数据结构不一致,必须进行自定义的数据转换逻辑,以确保正确映射。 4. **实时监控与异常处理**:在整个过程中,对每个步骤实时监控,并提供完善的告警机制,同时具备错误重试功能以提高稳定性。 下面将详细介绍我们实施该方案时所采取的一些具体措施: 首先,通过配置轻易云提供的平台工具,我们得以直观地设计并管理数据流。在抓取汤臣倍健营销云接口数据时,我们利用了定时触发器,实现了可靠、高效的数据抽取。同时,为了解决高频率请求导致的限流问题,则引入了适当延迟和分段执行机制,有效平衡了调度速率和资源占用。 对于格式差异部分,通过平台内置的数据转换模块,自定义了一组映射规则,使得不同类型字段精准对应。此外,对于复杂嵌套结构进行了特殊处理,进一步提升兼容性。最后,在写回到金蝶过程中,同样设置了批量操作避免单条插入带来的低效率问题,并且全程启用了事务控制,以保证不漏单、不重复录入等方面的问题得到妥善解决。 继续阅读本文,你将了解到更为详尽的方法论以及实际操作中的技巧与经历。 ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/D13.png~tplv-syqr462i7n-qeasy.image) ### 调用汤臣倍健营销云接口获取并加工数据 在数据集成生命周期的第一步,我们需要从源系统获取数据,并对其进行初步的清洗和加工。本文将详细探讨如何调用汤臣倍健营销云的接口`/erp/api/order/query/saleReturnOrder`来获取退货订单数据,并进行必要的数据处理。 #### 接口调用配置 首先,我们需要配置API调用的元数据,以确保请求参数的正确性和完整性。以下是该接口的元数据配置: ```json { "api": "/erp/api/order/query/saleReturnOrder", "effect": "QUERY", "method": "POST", "number": "number", "id": "id", "idCheck": true, "request": [ {"field":"tenantId","label":"经销商id","type":"string","describe":"经销商id(必填,营销云id)如:34cc4109705e4c058b7b3b0352e57d31","value":"xxx"}, {"field":"yxyNumber","label":"营销云销售订单号","type":"string","describe":"如:YD1215710122031701,传此参数时,其他时间状态等条件无效"}, {"field":"number","label":"系统订单号","type":"string","describe":"如:XOUT0000000293,传此参数时,其他时间状态等条件无效"}, {"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-00 00:00:00,如果不传单号此字段必填","value":"{{LAST_SYNC_TIME|datetime}}"}, {"field":"endTime","label":"结束时间","type":"string","describe":"timeType为空或者0,基于创建时间查询,timeType为1,基于更新时间查询,格式:0000-00-00或0000-00-00 00: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 } ``` #### 请求参数解析 在实际调用过程中,我们需要根据业务需求填写具体的请求参数: - `tenantId`: 经销商ID,这是一个必填项,用于标识具体的经销商。 - `yxyNumber` 和 `number`: 分别对应营销云销售订单号和系统订单号,这两个参数在提供时会覆盖其他条件。 - `status`: 用于过滤订单状态,例如已审核(值为1)。 - `beginTime` 和 `endTime`: 用于指定查询的时间范围,这两个字段在不提供订单号时是必填项。 - `pageNo` 和 `pageSize`: 分页参数,用于控制每次请求返回的数据量。 - `timeType`: 指定查询基于创建时间还是最后更新时间。 #### 数据请求与清洗 通过上述配置,我们可以构建一个POST请求来获取所需的数据。以下是一个示例代码片段: ```python import requests import json from datetime import datetime # 配置请求头和URL url = 'https://api.example.com/erp/api/order/query/saleReturnOrder' headers = {'Content-Type': 'application/json'} # 构建请求体 payload = { "tenantId": "34cc4109705e4c058b7b3b0352e57d31", "status": "1", "beginTime": datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "endTime": datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "pageNo": "1", "pageSize": "30", "timeType": "1" } # 发起POST请求 response = requests.post(url, headers=headers, data=json.dumps(payload)) # 检查响应状态并处理数据 if response.status_code == 200: data = response.json() # 数据清洗和处理逻辑 else: print(f"Error: {response.status_code}") ``` #### 数据转换与写入 在获取并清洗数据后,需要将其转换为目标系统所需的格式,并写入到相应的数据存储中。这一步通常涉及到字段映射、数据类型转换等操作。例如: ```python def transform_data(raw_data): transformed_data = [] for item in raw_data: transformed_item = { 'order_id': item['id'], 'order_number': item['number'], 'status': item['status'], 'created_at': item['createTime'] } transformed_data.append(transformed_item) return transformed_data # 假设我们已经从API获取了raw_data raw_data = response.json()['data'] processed_data = transform_data(raw_data) # 将处理后的数据写入数据库或其他存储系统 write_to_database(processed_data) ``` 通过上述步骤,我们实现了从汤臣倍健营销云接口获取退货订单数据,并对其进行初步清洗和转换,为后续的数据处理打下基础。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/S11.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将源数据转换并写入金蝶云星辰V2 API接口 在数据集成过程中,将源平台的数据转换为目标平台所能接受的格式是关键步骤之一。本文将详细探讨如何使用轻易云数据集成平台将退货入库的数据转换为金蝶云星辰V2 API接口所能接收的格式,并最终写入目标平台。 #### 数据请求与清洗 首先,我们需要从源系统中获取相关数据,并进行必要的清洗和预处理。这一步骤确保了数据的准确性和一致性,为后续的ETL(Extract, Transform, Load)过程打下基础。 #### 数据转换与写入 接下来,我们进入数据生命周期管理的第二步:数据转换与写入。我们需要将已经清洗好的数据进行ETL转换,使其符合金蝶云星辰V2 API接口的要求。以下是具体的元数据配置及其应用方法。 #### 元数据配置解析 根据提供的元数据配置,我们需要将各个字段映射到目标API所需的格式和字段。以下是详细解析: 1. **API路径和请求方法** ```json { "api": "/jdy/v2/scm/sal_in_bound", "method": "POST" } ``` 这里指定了API路径`/jdy/v2/scm/sal_in_bound`,并使用POST方法进行数据提交。 2. **基本字段映射** ```json [ {"field": "bill_source", "value": "ISV"}, {"field": "bill_date", "value": "{{auditTime|date}}"}, {"field": "customer_id", "value": "_findCollection find id from 617d3b33-162f-3e9f-be59-14e1953bc4a0 where number={extCusCode}"}, {"field": "remark", "value": "{remark}-来自营销云-{number}"}, {"field": "contact_address", "value": "{shippingAddress}"}, {"field": "contact_linkman", "value": "{contacts}"}, {"field": "contact_phone", "value": "{phone}"} ] ``` - `bill_source` 固定值为`ISV`。 - `bill_date` 使用模板变量`{{auditTime|date}}`,表示出库日期。 - `customer_id` 通过查找客户ID进行映射。 - `remark`, `contact_address`, `contact_linkman`, `contact_phone` 分别映射相应字段。 3. **自定义字段** ```json { "field": "custom_field", "children": [ {"field": "custom_field__1__28jianb2nq7c6u", "value": "{remark}"} ] } ``` 自定义字段部分,可以根据需求添加更多子字段,这里仅示例一个备注字段。 4. **商品分录** ```json { "field": "material_entity", "children": [ {"field": "material_id", "value":"_findCollection find id from 72029be6-c558-39a7-8084-4b75796fcba1 where number={{itemList.materialNumber}}"}, {"field":"stock_id","value":"1277527870972925952"}, {"field":"qty","value":"{{itemList.opernumber}}"}, {"field":"tax_price","value":"{{itemList.taxunitprice}}"}, {"field":"discount2","value":"_findCollection find clevel_discount from 617d3b33-162f-3e9f-be59-14e1953bc4a0 where number={{itemList.extCusCode}}"}, {"field":"is_free","value":"false"}, {"field":"unit_id","value":"_findCollection find base_unit_id from 72029be6-c558-39a7-8084-4b75796fcba1 where number={{itemList.materialNumber}}"}, {"field":"batch_no","value":"{{itemList._Flot}}"}, {"field":"comment","value":"{{itemList.remark}}"}, {"field":"kf_date","value":"{{itemList._Fmfg}}"}, {"field":"valid_date","value":"{{itemList._Fexp}}"}, {"field":"kf_period","value":"730"}, {"field":"kf_type","value":"1"} ] } ``` 商品分录部分较为复杂,需要对每个商品条目进行详细映射: - `material_id`, `unit_id` 等通过查找对应ID进行映射。 - `qty`, `tax_price`, `batch_no`, `comment`, `kf_date`, `valid_date` 等直接从源数据中提取并格式化。 #### 实施步骤 1. **配置ETL规则** 在轻易云平台上,配置上述元数据规则,确保每个字段都能正确映射到目标API所需格式。 2. **测试与验证** 在实际运行前,通过测试环境验证配置是否正确,确保所有字段都能正确转换并写入金蝶云星辰V2。 3. **部署与监控** 最后,将配置部署到生产环境,并通过轻易云提供的实时监控功能,确保数据流动顺畅无误。 通过以上步骤,我们可以高效地将源平台的数据转换为金蝶云星辰V2 API接口所能接收的格式,实现不同系统间的数据无缝对接。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/T19.png~tplv-syqr462i7n-qeasy.image)