ETL实战:从旺店通到金蝶云的数据同步解决方案

  • 轻易云集成顾问-吴伟
### 旺店通销售出库单同步至金蝶销售出库单【OEM线下】的系统对接集成案例分享 在本文中,我们将详细探讨如何通过轻易云数据集成平台,成功实现旺店通·企业奇门的数据到金蝶云星空的无缝对接。在这个技术实例中,我们聚焦于一个具体的任务:旺店通销售出库单同步至金蝶销售出库单【OEM线下】,使用了关键API `wdt.stockout.order.query.trade`(获取旺店通数据)与 `batchSave`(向金蝶写入数据)。 为了确保集成过程中的高效性和可靠性,重点解决以下几个问题: 1. **定时可靠抓取旺店通接口数据**:我们采用定时任务机制,从旺店通·企业奇门接口实时抓取最新的销售出库单。此步骤至关重要,以保证数据不遗漏。 2. **处理分页和限流问题**:由于API调用次数限制,以及返回结果可能需要分页处理,我们设计了智能化脚本来迭代获取所有必要的数据,同时避免触发限流保护措施。 3. **快速批量写入到金蝶云星空**:通过优化批量接口调用策略,使得大量订单可以迅速、安全地同步至金蝶系统。这一步骤有效提高了整个流程的效率。 4. **格式差异标准化转换**:因应两套系统在字段设置及数据格式上的不同,通过自定义映射规则,将从旺店通获取的数据转换为符合金蝶云星空要求的数据结构,确保信息准确无误地传递和存储。 此外,为保障实际应用中的稳定运行,我们还部署了一整套异常处理与错误重试机制。任何在执行期间出现的故障或意外情况,都能被及时捕获并重新尝试,使得整个数据流转体系具备高度容错能力。 这次实施方案不仅显著提升业务透明度,还增强了整体运营效率,在不断变化的业务环境中提供持续可靠的信息支持。上述核心节点是此次系统对接的重要组成部分,并通过具体操作细节展示其技术优越性。在下一章节里,我们进一步深入讨论每个步骤的实施细节以及遇到的问题与解决办法。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/D30.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口获取并加工数据 在数据集成生命周期的第一步,我们需要调用源系统的API接口以获取原始数据。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockout.order.query.trade`,并对获取的数据进行初步加工。 #### 接口调用配置 首先,我们需要配置API接口的元数据。以下是具体的元数据配置: ```json { "api": "wdt.stockout.order.query.trade", "method": "POST", "number": "order_no", "id": "order_no", "pagination": { "pageSize": 100 }, "idCheck": true, "condition": [ [{"field":"warehouse_name","logic":"like","value":"七遇"},{"field":"shop_name","logic":"like","value":"OEM"}], [{"field":"warehouse_name","logic":"like","value":"百媚"},{"field":"shop_name","logic":"like","value":"OEM"}], [{"field":"warehouse_name","logic":"like","value":"江苏淮安"},{"field":"shop_name","logic":"like","value":"OEM"}], [{"field":"warehouse_name","logic":"like","value":"菜鸟物流专用虚拟仓"},{"field":"shop_name","logic":"like","value":"OEM"}], [{"field":"warehouse_name","logic":"like","value":"云浮仓(物流专用)"},{"field":"shop_name","logic":"like","value":"OEM"}] ], "request": [ {"field": "start_time", "label": "开始时间", "type": "datetime", "describe": "增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{HOURE_AGO_3|datetime}}"}, {"field": "end_time", "label": "结束时间", "type": "datetime", "describe": "增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{CURRENT_TIME|datetime}}"}, {"field": "status", "label": "状态", "type": "string", "describe": ["5已取消", "55已审核", "95已发货", "105 部分打款", "110已完成", "113:异常发货"]}, {"field": "src_order_no", "label": "系统订单编号", "type": "string"}, {"field": "src_tid", "label": "原始单号", "type": "string"}, {"field": "stockout_no", "label": "出库单号", "type": "string"}, {"field": "shop_no", "label": "店铺编号", "type": "string"}, {"field": "warehouse_no", "label": "仓库编号", "type\": \"string"}, {"field\": \"shop_nos\", \"label\": \"店铺编号(批量)\", \"type\": \"string\"}, {"field\": \"is_by_modified\", \"label\": \"时间查询条件\", \"type\": \"string\"} ], “otherRequest”: [ {“field”: “page_size”, “label”: “分页大小”, “type”: “string”, “describe”: “每页返回的数据条数,输入值范围1~100,不传本参数,输入值默认为40”, “value”: “100”}, {“field”: “page_no”, “label”: “页号”, “type”: “string”, “describe”: “不传值默认从0页开始”} ] } ``` #### 数据请求与清洗 在请求阶段,我们通过POST方法调用`wdt.stockout.order.query.trade`接口,并传递必要的参数,如开始时间和结束时间。这些参数用于指定我们希望获取的数据范围。为了确保数据的准确性和完整性,我们还可以根据业务需求设置其他过滤条件,例如订单状态、系统订单编号、出库单号等。 ```json { “start_time”: “2023-10-01 00:00:00”, “end_time”: “2023-10-01 23:59:59”, “status”: [“55”, “95”, “110”], ... } ``` 通过上述配置,我们可以实现对特定时间段内销售出库单数据的增量获取。 #### 数据转换与写入 在获取到原始数据后,我们需要对其进行清洗和转换,以便后续处理。例如,将日期格式统一、去除无效字段、合并重复记录等操作。以下是一个简单的数据清洗示例: ```python import pandas as pd # 假设我们已经通过API获取了原始数据,并存储在data变量中 data = [ {“order_no”:“12345”,“warehouse_name”:“七遇”,“status”:“55”,...}, {“order_no”:“12346”,“warehouse_name”:“百媚”,“status”:“95”,...}, ... ] # 转换为DataFrame进行处理 df = pd.DataFrame(data) # 去除无效字段 df_cleaned = df.drop(columns=[‘无效字段1’, ‘无效字段2’]) # 合并重复记录 df_cleaned = df_cleaned.drop_duplicates(subset=[‘order_no’]) # 日期格式统一 df_cleaned[‘start_time’] = pd.to_datetime(df_cleaned[‘start_time’]) df_cleaned[‘end_time’] = pd.to_datetime(df_cleaned[‘end_time’]) # 输出清洗后的数据 print(df_cleaned) ``` 通过上述步骤,我们可以确保从源系统获取的数据经过清洗和转换后达到预期的质量标准,为后续的数据写入和进一步处理奠定基础。 #### 小结 本文详细介绍了如何使用轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockout.order.query.trade`,并对获取的数据进行初步加工。通过合理配置API元数据、精确设置请求参数以及有效的数据清洗和转换操作,可以确保我们在集成过程中获得高质量的数据,为业务决策提供可靠支持。 ![打通钉钉数据接口](https://pic.qeasy.cloud/S29.png~tplv-syqr462i7n-qeasy.image) ### 利用轻易云数据集成平台实现旺店通销售出库单同步至金蝶云星空 在数据集成的生命周期中,将源平台的数据转换为目标平台可接收的格式是至关重要的一步。本文将详细探讨如何利用轻易云数据集成平台的ETL功能,将旺店通的销售出库单数据转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。 #### API接口配置 首先,我们需要配置金蝶云星空的API接口。根据元数据配置,API接口使用`batchSave`方法,通过POST请求进行批量保存操作。以下是主要的配置参数: - `api`: "batchSave" - `method`: "POST" - `idCheck`: true - `operation`: {"rowsKey":"array","rows":1,"method":"batchArraySave"} #### 请求字段配置 我们需要将源平台的数据字段映射到目标平台的字段,并进行必要的转换和清洗。以下是具体字段及其配置: 1. **单据类型 (`FBillTypeID`)** - 类型:string - 描述:单据类型 - 解析器:ConvertObjectParser(参数:FNumber) - 值:XSCKD01_SYS 2. **单据编号 (`FBillNo`)** - 类型:string - 描述:单据编号 - 值:{order_no} 3. **日期 (`FDate`)** - 类型:string - 描述:日期 - 值:{{consign_time|datetime}} 4. **销售组织 (`FSaleOrgId`)** - 类型:string - 描述:销售组织 - 解析器:ConvertObjectParser(参数:FNumber) - 值:_mongoQuery 1c7e5053-1f36-35c8-844e-ceed3ac87bb9 findField=content.FCOUNTRY where={"content.FName":{"$eq":"{buyer_message}"}} 5. **客户 (`FCustomerID`)** - 类型:string - 描述:客户 - 解析器:ConvertObjectParser(参数:FName) - 值:{buyer_message} 6. **发货组织 (`FStockOrgId`)** - 类型:string - 描述:发货组织 - 解析器:ConvertObjectParser(参数:FNumber) - 值:{warehouse_no} 7. **备注 (`FNote`)** - 类型:string - 描述:备注 - 值:{cs_remark} #### 明细信息配置 对于明细信息,我们需要处理数组类型的数据,并确保每个子字段都正确映射和转换: 1. **物料编码 (`FMaterialID`)** - 类型: string - 描述: 物料编码 - 解析器: ConvertObjectParser(参数: FNumber) - 值: {{details_list.spec_no}} 2. **实发数量 (`FRealQty`)** - 类型: string - 描述: 实发数量 - 值: {{details_list.goods_count}} 3. **含税单价 (`FTaxPrice`)** - 类型: string - 描述: 含税单价 - 值: {{details_list.sell_price}} 4. **货主类型 (`FOwnerTypeId`)** - 类型: string - 描述: 货主类型 - 值: BD_OwnerOrg 5. **货主 (`FOwnerId`)** - 类型: string - 描述: 货主 - 解析器: ConvertObjectParser(参数: FNumber) - 值: 100 6. **仓库 (`FStockID`)** - 类型: string - 描述: 仓库 - 解析器: ConvertObjectParser(参数: FNumber) - 值: {warehouse_no} 7. **是否赠品 (`FIsFree`)** – 类型: string – 描述: 是否赠品 8. **备注 (`FEntrynote`)** – 类型 : string – 描述 : 备注 – 值 : {{details_list.remark}} 9. **原始单号 (`F_POIH_Text`)** – 类型 : string – 值 : {src_tids} 10. **税率(`FEntryTaxRate` )** – 类型 : string –值 : {tax_rate} #### 财务信息配置 财务信息部分需要处理对象类型的数据,确保每个子字段都正确映射和转换: 1. **结算组织 (`FSettleOrgID`)** –类型 : string –描述 :结算组织 –解析器 : ConvertObjectParser ( 参数 : FNumber ) –值 : _mongoQuery 1c7e5053-1f36-35c8-844e-ceed3ac87bb9 findField=content.FCOUNTRY where={"content.FName":{"$eq":"{buyer_message}"}} 2. **结算币别(`FSETTLECURRID` )** –类型 : string –描述 :结算币别 –解析器 : ConvertObjectParser ( 参数 : FNumber ) –值 : PRE001 #### 其他请求参数配置 为了确保操作顺利进行,还需设置一些其他请求参数: 1 .**业务对象表单 Id(`FormId` )** —类型:string —描述业务对象表单 Id —值:SAL_OUTSTOCK 2 .**执行的操作(`Operation` )** —类型:string —描述执行的操作 —值BatchSave 3 .**提交并审核(`IsAutoSubmitAndAudit` )** —类型bool —描述提交并审核 —值true 4 .**验证基础资料(`IsVerifyBaseDataField` )** —类型bool —描述验证基础资料 —值true 5 .**系统模块(`SubSystemId` )** —类型:string —描述系统模块 —值21 6 .**允许负库存(`InterationFlags` )** —类型:string —描述允许负库存 —值STK_InvCheckResult ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/T14.png~tplv-syqr462i7n-qeasy.image)