企业信息化管理:汤臣倍健与金蝶云采购入库数据同步解决方案

  • 轻易云集成顾问-孙传友
### 汤臣倍健营销云数据集成到金蝶云星辰V2——采购入库同步案例分享 在企业信息化管理中,实现不同系统间的数据无缝对接是一个重要的任务。本次技术案例将详细解析如何通过轻易云数据集成平台,成功实现汤臣倍健营销云与金蝶云星辰V2系统间的“采购入库同步”功能。 #### 数据获取与分页处理 为了确保从汤臣倍健营销云接口(/erp/api/order/query/purInWarehsOrder)抓取到的数据不漏单,我们设置了定时任务,定期调用该API。考虑到接口数据存在分页和限流问题,我们采用批量请求、循环遍历的方式来处理大规模数据。具体而言,在每次请求后,通过判断返回结果中的分页信息决定是否继续下一页的抓取,这样可以有效防止因一次性拉取大量数据而导致丢失或漏掉某些订单记录。 #### 数据格式转换与映射 在完成数据获取之后,需要将汤臣倍健营销云的数据格式转换为适配金蝶云星辰V2所需的数据结构。这部分需要特别注意字段名称和类型的一一对应,并根据业务需求进行必要的数据清洗和补充。在实际操作过程中,通过自定义脚本进行多步变换,使得最终生成符合目标API(/jdy/v2/scm/pur_inbound)要求的JSON对象。 #### 高效写入及异常处理机制 对于海量采购入库记录,我们设计了一套高效写入机制,确保这些数据能快速且准确地进入金蝶云星辰V2系统。同时,为了提高稳定性,加入了错误重试机制。一旦检测到网络中断或服务不可用等异常情况,会自动触发预设的重试逻辑,并实时记录日志以便后续分析和调优。此外,每条成功写入的数据都会被标记并存档,以防重复提交,从而保证整个流程的一致性和完整性。 通过以上几步精细化操作,不仅保障了两大系统之间顺畅对接,也进一步提升了业务运作效率。而更多关于这项方案的具体细节,将在后续章节中逐一展开讨论。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/D2.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统汤臣倍健营销云接口获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台调用汤臣倍健营销云的`/erp/api/order/query/purInWarehsOrder`接口,并对返回的数据进行初步加工。 #### 接口配置与调用 首先,我们需要配置元数据,以便正确地调用汤臣倍健营销云的API接口。以下是元数据配置的关键字段及其含义: - **api**: `/erp/api/order/query/purInWarehsOrder` - **effect**: `QUERY` - **method**: `POST` - **idCheck**: `true` 请求参数配置如下: 1. **tenantId (经销商id)**: 必填项,用于标识经销商。 2. **yxyNumber (营销云销售订单号)**: 可选项,传递此参数时其他时间状态等条件无效。 3. **number (系统订单号)**: 可选项,传递此参数时其他时间状态等条件无效。 4. **status (订单状态)**: 订单状态,0表示未审核,1表示已审核(已出库)。 5. **beginTime (开始时间)**: 查询起始时间,格式为`YYYY-MM-DD`或`YYYY-MM-DD HH:mm:ss`。 6. **endTime (结束时间)**: 查询结束时间,格式为`YYYY-MM-DD`或`YYYY-MM-DD HH:mm:ss`。 7. **pageNo (页码)**: 默认值为1。 8. **pageSize (每页条数)**: 默认值为30。 9. **timeType (时间段标志)**: 查询时间段标识,0表示创建时间(默认),1表示最后更新时间。 示例请求体如下: ```json { "tenantId": "08e2fd9d074f4ef7b5e6416b74d006d6", "status": "1", "beginTime": "{{LAST_SYNC_TIME|datetime}}", "endTime": "{{CURRENT_TIME|datetime}}", "pageNo": "1", "pageSize": "30", "timeType": "1" } ``` #### 数据请求与清洗 在成功调用API并获取到原始数据后,需要对数据进行清洗和初步加工。以下是一些常见的数据清洗步骤: 1. **字段映射**:将API返回的数据字段映射到目标系统所需的字段。例如,将API返回的`materialNumber`映射到目标系统的物料编号字段。 2. **数据过滤**:根据业务需求过滤掉不需要的数据。例如,通过条件设置过滤掉物料编号包含"F.A"的记录: ```json { "field": "itemList.materialNumber", "logic": "notlike", "value": "F.A" } ``` 3. **格式转换**:将日期、金额等字段转换为目标系统所需的格式。 #### 数据转换与写入 在完成数据清洗后,需要将数据转换为目标系统所需的格式,并写入目标系统。这一步通常包括以下操作: 1. **数据转换**:根据目标系统的数据模型,将清洗后的数据进行结构化转换。例如,将平铺的数据结构转换为嵌套结构。 2. **批量写入**:为了提高效率,可以将处理好的数据批量写入目标系统。 通过上述步骤,我们可以实现从汤臣倍健营销云获取采购入库订单数据,并经过清洗和转换后同步到目标系统。这不仅提高了数据处理效率,还确保了数据的一致性和准确性。 ![打通金蝶云星空数据接口](https://pic.qeasy.cloud/S19.png~tplv-syqr462i7n-qeasy.image) ### 采购入库同步至金蝶云星辰V2API接口的ETL转换与写入 在数据集成生命周期的第二阶段,我们需要将已经集成的源平台数据进行ETL转换,确保其符合目标平台金蝶云星辰V2API接口所能接收的格式,并最终将其写入目标平台。本文将详细探讨这一过程中的技术细节和实现方法。 #### API接口配置与元数据解析 首先,我们需要理解目标平台API接口的元数据配置。根据提供的元数据配置,金蝶云星辰V2API接口的路径为`/jdy/v2/scm/pur_inbound`,请求方法为`POST`。以下是主要字段及其对应的描述和类型: - `bill_date`(单据日期):字符串类型,通过模板变量`{{auditTime|date}}`获取。 - `bill_no`(单据编码):字符串类型。 - `transtype`(业务类型):固定值为"2"。 - `supplier_id`(供应商编码):固定值为"1320328970863926272"。 - `remark`(备注):通过模板变量组合生成,格式为`{remark}-来自营销云-{yxyNumber}`。 - `material_entity`(商品分录):数组类型,包含多个子字段。 子字段包括: - `material_number`(商品编码):通过模板变量`{extMaterialNo}`获取。 - `stock_id`(仓库编码):固定值为"1320319591469069312"。 - `is_free`(是否赠品):固定值为false。 - `qty`(数量):通过模板变量`{{itemList.opernumber}}`获取。 - `unit_id`(单位):通过查找集合获取,格式为 `_findCollection find base_unit_id from 395d1591-aee0-3f10-ad09-d5593167af48 where number={extMaterialNo}`。 - `batch_no`(批次号)、`kf_date`(生产日期)、`valid_date`(有效日期)等均通过模板变量从源数据中提取。 #### 数据清洗与转换 在ETL过程中,首先需要对源数据进行清洗和转换,以满足目标平台的数据格式要求。以下是具体步骤: 1. **日期格式转换**:将源数据中的日期字段转换为目标平台所需的格式。例如,将审核时间字段转换为单据日期: ```python bill_date = transform_date(auditTime) ``` 2. **固定值填充**:对于一些固定值字段,如业务类型、供应商编码等,可以直接填充预定义的值: ```python transtype = "2" supplier_id = "1320328970863926272" ``` 3. **动态生成备注**:备注字段需要组合多个来源的数据,可以使用字符串拼接或模板引擎实现: ```python remark = f"{source_remark}-来自营销云-{yxyNumber}" ``` 4. **商品分录处理**:商品分录是一个数组,需要逐个处理每个子项,并进行相应的字段映射和转换。例如,数量字段需要从源数据中提取并赋值给目标字段: ```python material_entity = [] for item in itemList: material_entry = { "material_number": item["extMaterialNo"], "stock_id": "1320319591469069312", "is_free": False, "qty": item["opernumber"], "unit_id": find_unit_id(item["extMaterialNo"]), "batch_no": item["_Flot"], "kf_date": item["_Fmfg"], "valid_date": item["_Fexp"], "kf_type": "1", "tax_price": calculate_tax_price(item["taxlastmoney"], item["opernumber"]), "all_amount": item["taxlastmoney"] } material_entity.append(material_entry) ``` 5. **税率计算**:如果需要计算税率,可以根据业务逻辑进行相应处理,并赋值给对应字段。 #### 数据写入 完成数据清洗和转换后,即可将处理后的数据写入目标平台。通过调用金蝶云星辰V2API接口,实现数据提交: ```python import requests url = "https://api.kingdee.com/jdy/v2/scm/pur_inbound" headers = {"Content-Type": "application/json"} payload = { "bill_date": bill_date, "bill_no": bill_no, "transtype": transtype, "supplier_id": supplier_id, "remark": remark, "material_entity": material_entity } response = requests.post(url, json=payload, headers=headers) if response.status_code == 200: print("Data successfully written to Kingdee Cloud.") else: print(f"Failed to write data: {response.text}") ``` 以上代码展示了如何构建请求并调用API接口,将处理后的数据写入金蝶云星辰V2系统。在实际应用中,还需考虑异常处理、重试机制等,以确保数据可靠性和一致性。 通过上述步骤,我们实现了从源平台到目标平台的数据ETL转换与写入,为业务系统间的数据集成提供了技术保障。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/T18.png~tplv-syqr462i7n-qeasy.image)