ETL技术在轻易云数据集成中的应用:分销旺店通到金蝶云星空

  • 轻易云集成顾问-曹润
### 分销旺店通销售出库单=>金蝶销售出库单(正常销售&刷单)技术案例分享 在本次技术案例中,我们将重点介绍如何通过轻易云数据集成平台实现旺店通·企业奇门的销售出库单数据高效、准确地集成到金蝶云星空系统,从而支撑企业内部财务和物流信息的一体化管理。方案重点解决了API接口调用、数据格式差异处理以及异常处理与错误重试机制等问题。以下是主要步骤和关键技术点的详细描述: #### 确保集成不漏单 为了确保从旺店通·企业奇门获取的数据不漏单,定时可靠的抓取机制至关重要。在该方案中,我们使用wdt.stockout.order.query.trade接口,通过设置合理的时间间隔和查询条件,实现对最新订单数据的精准捕获。 #### 批量快速写入金蝶云星空 对于批量且大量的数据,快速写入到金蝶云星空是提高整体效率的重要手段。在这里我们利用batchSave API,使得大规模数据能够被高效接收并存储。此外,特别注意分页处理和限流问题,以避免因请求过多导致系统性能下降或接口限流。 #### 数据格式差异处理 不同平台之间的数据格式往往存在较大区别。因此,在实际实施过程中,需要对来自旺店通·企业奇门的数据进行适当转换,并映射到符合金蝶云星空要求的格式。例如,对日期格式、字符串编码及数值精度等细节进行规范化处理,这样才能确保最终写入数据的完整性和一致性。 #### 异常处置与重复尝试机制 为提升系统鲁棒性,本方案引入了一个异常处理与错误重试机制。当面对网络波动或者临时服务不可用情况,通过自动记录失败日志并开启重新尝试功能,可以有效降低任务因偶发故障导致完全丢失的问题。 以上综述体现了我们在分销旺店通销售出库单系统集成项目中的一些核心技术要点。接下来,将具体展示各个步骤如何通过代码实现。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/D33.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统旺店通·企业奇门接口wdt.stockout.order.query.trade获取并加工数据 在数据集成生命周期的第一步,我们需要从源系统获取数据并进行初步加工。本文将深入探讨如何通过调用旺店通·企业奇门接口`wdt.stockout.order.query.trade`来实现这一过程。 #### 接口调用配置 首先,我们需要了解接口的基本配置和请求参数。以下是元数据配置的详细信息: ```json { "api": "wdt.stockout.order.query.trade", "effect": "QUERY", "method": "POST", "number": "order_no", "id": "stockout_id", "idCheck": true, "request": [ {"field": "start_time", "label": "开始时间", "type": "datetime", "describe": "增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{LAST_SYNC_TIME|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:异常发货", "value":"110,95"}, {"field":"src_order_no","label":"系统订单编号","type":"string","describe":"111"}, {"field":"src_tid","label":"原始单号","type":"string","describe":"111"}, {"field":"stockout_no","label":"出库单号","type":"string","describe":"111"}, {"field":"shop_no","label":"店铺编码","type":"string","describe":"代表店铺所有属性的唯一编码,用于店铺区分,ERP内支持自定义(ERP店铺界面设置),用于获取指定店铺单据数据信息"}, {"field":"warehouse_no","label":"仓库编码","type":"string","describe":"代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置),用于获取指定仓库单据数据信息(不支持一次推送多个仓库编号)"}, {"field":"FSaleDeptID","label":"销售部门","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"is_by_madified","label":"时间查询条件","type":"int"} ], ... } ``` #### 请求参数解析 1. **时间参数**: - `start_time` 和 `end_time` 用于指定增量获取数据的时间范围。`start_time`表示上次同步的时间点,而`end_time`则是当前时间。 - 格式为 `yyyy-MM-dd HH:mm:ss`。 2. **状态参数**: - `status` 用于过滤订单状态。值为 `110,95` 表示我们只获取已完成和已发货的订单。 3. **其他关键参数**: - `shop_no` 和 `warehouse_no` 分别用于指定店铺和仓库。这些字段确保我们只获取特定店铺和仓库的数据。 - `FSaleDeptID` 是一个复杂字段,需要通过 `ConvertObjectParser` 转换为特定格式。 4. **分页参数**: - `page_size` 和 `page_no` 用于控制分页,每次请求返回的数据条数和页码。 #### 数据请求与清洗 在调用接口后,我们会得到一个包含多个订单记录的响应。此时需要对这些数据进行初步清洗和转换,以便后续处理。 1. **字段映射与转换**: - 将响应中的字段映射到目标系统所需的字段。例如,将 `order_no` 映射到目标系统中的订单编号。 - 使用预定义的解析器(如 `ConvertObjectParser`)对复杂字段进行转换。 2. **数据过滤**: - 根据业务需求,对返回的数据进行进一步过滤。例如,只保留特定状态或特定店铺的数据。 3. **错误处理**: - 对于接口调用失败或返回错误信息的情况,需要进行相应的错误处理和重试机制,以确保数据完整性。 #### 实践案例 假设我们需要从旺店通中获取2023年10月1日至2023年10月2日期间所有已完成和已发货的销售出库单,并将其导入金蝶系统。具体步骤如下: 1. 配置请求参数: ```json { ... { field: 'start_time', value: '2023-10-01 00:00:00' }, { field: 'end_time', value: '2023-10-02 23:59:59' }, { field: 'status', value: '110,95' }, ... } ``` 2. 调用接口并接收响应: ```json { // 假设返回的数据结构 data: [ { order_no: '123456', stockout_id: '7890', shop_no: 'SHOP001', warehouse_no: 'WH001', ... }, ... ] } ``` 3. 数据清洗与转换: ```json { // 转换后的数据结构 data: [ { 销售订单编号: '123456', 出库单号: '7890', 店铺编码: 'SHOP001', 仓库编码: 'WH001', ... }, ... ] } ``` 通过上述步骤,我们成功地从旺店通中获取了所需的数据,并进行了初步清洗和转换,为后续的数据写入做好了准备。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/S9.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台ETL转换与写入金蝶云星空API接口技术案例 在数据集成过程中,ETL(提取、转换、加载)是至关重要的一环。本文将深入探讨如何使用轻易云数据集成平台将已经集成的源平台数据进行ETL转换,并通过金蝶云星空API接口写入目标平台。 #### 数据请求与清洗 首先,我们需要从源系统(如分销旺店通)提取销售出库单的数据。这些数据可能包括订单编号、日期、客户信息、物料编码等。提取的数据通常是原始且未经过处理的,需要进行清洗和转换,以符合目标系统的要求。 #### 数据转换与写入 接下来,我们将重点讨论如何将清洗后的数据转换为金蝶云星空API接口所能接受的格式,并最终写入目标平台。 ##### 元数据配置解析 以下是我们使用的元数据配置,用于将分销旺店通销售出库单转换为金蝶销售出库单: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "operation": { "method": "batchArraySave", "rows": 1, "rowsKey": "array" }, "request": [ { "field": "FBillTypeID", "label": "单据类型", "type": "string", "describe": "单据类型", "value": "_function CASE '{flag_name}' WHEN '刷单' THEN 'ZYD-106' ELSE 'ZYD-017' END", "parser": { "name": "ConvertObjectParser", "params": "FNUMBER" } }, { "field": "FBillNo", ... } ], ... } ``` ##### 关键字段解析 1. **FBillTypeID(单据类型)**: - 根据`flag_name`字段值判断是正常销售还是刷单。 - 使用了`_function CASE`语法进行条件判断并赋值。 - 通过`ConvertObjectParser`解析器将结果转化为金蝶系统所需的格式。 2. **FBillNo(单据编号)**: - 直接映射源系统中的订单编号`{order_no}`。 3. **FDate(日期)**: - 映射源系统中的发货时间`{consign_time}`。 4. **FSaleOrgId(组织)**: - 根据`shop_no`字段值进行条件判断并赋值。 - 同样使用了`ConvertObjectParser`解析器。 5. **FCustomerID(客户)**: - 映射源系统中的客户昵称`{fenxiao_nick}`。 - 使用了基础资料映射和正向映射配置。 6. **FEntity(明细行)**: - 包含多个子字段,如物料编码、仓库、计价数量等。 - 每个子字段都进行了相应的映射和解析处理。 ##### 数据写入操作 在完成所有字段的映射和转换后,使用以下配置将数据写入金蝶云星空: ```json { ... "otherRequest": [ { ... {"field":"FormId","label":"FormId","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"SAL_OUTSTOCK"}, {"field":"Operation","label":"Operation","type":"string","value":"Save"}, {"field":"IsAutoSubmitAndAudit","label":"IsAutoSubmitAndAudit","type":"bool","value":"true"}, {"field":"IsVerifyBaseDataField","label":"IsVerifyBaseDataField","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"true"}, {"field":"SubSystemId","label":"SubSystemId","type":"string","describe":"默认仓库模块","value":"21"}, {"field":"IgnoreInterationFlag","label":"IgnoreInterationFlag","type":"string","value":"true"}, {"field":"InterationFlags","label":"InterationFlags","type":"string","value":"STK_InvCheckResult"} } ] } ``` - `FormId`: 指定表单ID为`SAL_OUTSTOCK`。 - `Operation`: 操作类型为保存(`Save`)。 - `IsAutoSubmitAndAudit`: 自动提交和审核设置为真(`true`)。 - `IsVerifyBaseDataField`: 验证基础资料有效性设置为真(`true`)。 通过以上配置,可以确保数据在经过ETL处理后,能够准确无误地写入到金蝶云星空系统中,实现不同系统间的数据无缝对接。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/T2.png~tplv-syqr462i7n-qeasy.image)