从旺店通到金蝶云星辰V2:全流程数据集成揭秘

  • 轻易云集成顾问-蔡威
### 案例分享:旺店通·企业奇门数据集成到金蝶云星辰V2——盘亏V2.0的实现 在实际业务中,电商平台的数据管理和对接往往面临诸多挑战。本文将重点介绍如何通过轻易云数据集成平台,实现旺店通·企业奇门中的订单数据高效可靠地集成到金蝶云星辰V2系统,以优化库存管理并提升运营效率。 **任务概述** 通过调用旺店通·企业奇门的`wdt.stockout.order.query`接口,我们可以获取出库订单的数据,然后利用金蝶云星辰V2的`/jdy/v2/scm/inv_check_loss_bill` API接口进行数据写入。在此过程中,需要处理分页、限流以及两者之间的数据格式差异,并确保不漏单且能大量快速写入目标系统。 **关键技术点** 1. **定时可靠抓取与批量处理** 通过配置定时器,按设定间隔时间从旺店通接口稳定抓取最新订单。为了应对API返回的大量数据,通过分页机制逐页拉取。同时,为了避免网络波动或瞬时异常导致的数据丢失,引入错误重试机制确保每次请求都成功响应。 2. **调用和解析API** 利用标准HTTP协议调用`wdt.stockout.order.query`接口,从JSON响应中提取必需的字段信息,并按照金蝶云星辰V2所要求的数据结构重新组织。这一步骤是消除两者格式差异的重要环节。 3. **快速大批量写入** 当获得整理好的订单后,借助轻易云提供的大规模、多并发写入能力,将这些订单数据一键导入至金蝶云星辰V2系统内。这里采用批量方式操作,可显著提升性能并减少网络交互次数。 4. **实时监控与日志记录** 在整个流程运行期间,通过轻易云的平台特性,对各个步骤进行实时状态监控及日志记录。一旦发生异常情况,能够及时告警并便于追溯源头问题,加速问题解决过程。 以下章节,将详细探讨上述技术点在"盘亏V2.0"方案中的具体实现方法,以及遇到的一些常见问题和解决策略。 ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/D30.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口获取并加工数据 在轻易云数据集成平台的生命周期中,调用源系统接口是数据处理过程的第一步。本文将深入探讨如何通过调用旺店通·企业奇门接口 `wdt.stockout.order.query` 获取并加工数据。 #### 接口调用配置 首先,我们需要配置接口的元数据,以便正确地请求和处理数据。以下是我们使用的元数据配置: ```json { "api": "wdt.stockout.order.query", "method": "POST", "number": "order_no", "id": "stockout_id", "pagination": { "pageSize": 30 }, "condition": [ [ { "field": "warehouse_no", "logic": "neq", "value": "WH2024052601" } ] ], "idCheck": true, "request": [ { "field": "start_time", "label": "开始时间", "type": "string", "describe": "按最后修改时间增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{LAST_SYNC_TIME|datetime}}" }, { "field": "end_time", "label": "结束时间", "type": "string", "describe": "按最后修改时间增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{CURRENT_TIME|datetime}}" }, { "field": "order_type", "label": "出库单类型", "type": "string", "describe":"2调拨出库,3采购退货出库,4盘亏出库,5生产出库,7其他出库,8多发出库,9纠错出库,10保修配件出库,11初始化出库,12jit拣货出库,13委外出库", “value”: “4” }, { “field”: “status”, “label”: “出库单状态”, “type”: “string”, “describe”: “出库单状态5:已取消,50:待审核,55:已审核,95:已发货,110:已完成(默认查已发货已完成单据),113:异常发货” }, { “field”: “warehouse_no”, “label”: “仓库编号”, “type”: “string”, “describe”:“代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置)(不支持一次推送多个仓库编号)” }, { “field”:“src_order_no”, “label”:“源单号”, “type”:“string”, “describe”:“源单号” }, { “field”:“stockout_no”, “label”:“出库单号”, “type”:"string", ”describe“:“出库单号,传该字段可以不传时间” } ], ”otherRequest“:[ { ”field“:“page_size”, ”label“:“分页大小”, ”type“:“string”, ”describe“:“每页返回的数据条数,输入值范围1~100,不传本参数,输入值默认为40,使用举例单击这里”, ”value“:“{PAGINATION_PAGE_SIZE}” }, { ”field“:“page_no”, ”label“:“页号”, ”type“:“string”, ”describe“:“不传值默认从0页开始”, ”value“:“{PAGINATION_START_PAGE}” } ] } ``` #### 数据请求与清洗 在进行数据请求时,我们需要特别注意以下几点: 1. **时间参数**: - `start_time` 和 `end_time` 用于指定增量获取数据的时间范围。这两个参数分别取自上次同步时间和当前时间。 - 格式要求为 `yyyy-MM-dd HH:mm:ss`。 2. **过滤条件**: - 使用 `warehouse_no` 字段进行过滤,以排除特定仓库编号(如 `WH2024052601`)。 - 出库单类型 (`order_type`) 固定为 `4`(盘亏出库)。 3. **分页处理**: - 配置分页大小 (`page_size`) 为每页30条记录。 - 页号 (`page_no`) 从0开始。 #### 数据转换与写入 在获取到原始数据后,需要对其进行清洗和转换。以下是一些关键步骤: 1. **ID检查**: - 确保每条记录都有唯一标识符 (`stockout_id`)。 2. **字段映射**: - 将原始字段映射到目标系统所需的字段。例如,将 `order_no` 映射为目标系统中的订单编号。 3. **状态过滤**: - 根据业务需求,仅保留特定状态的记录,如已发货 (`95`) 和已完成 (`110`) 的记录。 4. **异常处理**: - 对于异常记录(如状态为 `113`),需要进行特殊处理或记录日志以便后续分析。 通过以上步骤,我们能够高效地从旺店通·企业奇门接口获取并加工所需的数据,为后续的数据写入和进一步处理奠定基础。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/S4.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台生命周期的第二步:将源数据转换为金蝶云星辰V2API接口格式并写入 在数据集成过程中,将源平台的数据转换为目标平台所能接收的格式是关键步骤之一。本文将详细探讨如何使用轻易云数据集成平台,将已集成的源数据进行ETL转换,最终通过金蝶云星辰V2API接口写入目标平台。 #### 元数据配置解析 在进行ETL转换之前,首先需要理解元数据配置。以下是用于盘亏V2.0集成方案的元数据配置: ```json { "api": "/jdy/v2/scm/inv_check_loss_bill", "effect": "EXECUTE", "method": "POST", "number": "id", "id": "id", "name": "id", "idCheck": true, "request": [ {"field":"bill_date","label":"日期","type":"string","value":"{modified}"}, {"field":"bill_no","label":"单据编号","type":"string","value":"PKD{order_no}"}, {"field":"remark","label":"备注","type":"string","value":"旺店通盘亏单{order_no}"}, {"field":"operation_key","label":"操作类型","type":"string","value":"audit"}, { "field":"material_entity", "label":"商品分录", "type":"array", "value":"details_list", "children":[ {"field":"material_id","label":"商品","type":"string","value":"_mongoQuery d476a55d-acc7-3156-9c7f-b9f9dce596b5 findField=content.id where={\"content.number\": {\"$eq\":\"{{details_list.goods_no}}\"}}"}, {"field":"qty","label":"数量","type":"string","value":"{{details_list.goods_count}}"}, {"field":"unit_id","label":"单位","type":"string","value":"_mongoQuery d476a55d-acc7-3156-9c7f-b9f9dce596b5 findField=content.base_unit_id where={\"content.number\": {\"$eq\":\"{{details_list.goods_no}}\"}}"}, {"field":"stock_id","label":"仓库","type":"string","value":"_findCollection find id from 9cf5314a-709f-3e72-b021-c9edae06888f where number={{details_list.warehouse_no}}"} ] } ] } ``` #### 数据请求与清洗 在这个阶段,数据从源系统被提取出来,并经过初步清洗和处理。清洗后的数据将作为输入传递给ETL转换过程。 #### 数据转换与写入 1. **API接口配置**: - `api`字段定义了目标API的路径,即`/jdy/v2/scm/inv_check_loss_bill`。 - `method`字段指定了HTTP方法为POST。 - `effect`字段表示执行操作。 2. **字段映射**: - `bill_date`映射到源数据中的修改日期(`{modified}`)。 - `bill_no`生成格式为`PKD{order_no}`的单据编号。 - `remark`生成格式为`旺店通盘亏单{order_no}`的备注信息。 - `operation_key`固定值为`audit`,表示操作类型。 3. **数组嵌套处理**: - `material_entity`是一个数组类型,包含多个商品分录。每个分录包含以下子字段: - `material_id`: 使用MongoDB查询获取商品ID,查询条件为商品编号(`goods_no`)。 - `qty`: 商品数量直接映射自源数据中的`goods_count`。 - `unit_id`: 使用MongoDB查询获取单位ID,查询条件同样为商品编号(`goods_no`)。 - `stock_id`: 使用集合查找获取仓库ID,查找条件为仓库编号(`warehouse_no`})。 #### 实际案例应用 假设我们有如下源数据: ```json { "modified": "2023-10-01", "order_no": "12345", "details_list": [ { "goods_no": "G001", "goods_count": 10, "warehouse_no": "W001" }, { "goods_no": "G002", "goods_count": 20, "warehouse_no": "W002" } ] } ``` 通过上述元数据配置和轻易云的数据集成平台,我们可以将其转换为符合金蝶云星辰V2API接口要求的格式: ```json { "bill_date": "2023-10-01", "bill_no": "PKD12345", "remark": "旺店通盘亏单12345", "operation_key": "audit", "material_entity": [ { "material_id": "<MongoDB查询结果>", "qty": 10, "unit_id": "<MongoDB查询结果>", "stock_id": "<集合查找结果>" }, { "material_id": "<MongoDB查询结果>", "qty": 20, "unit_id": "<MongoDB查询结果>", "stock_id": "<集合查找结果>" } ] } ``` #### 总结 通过对元数据配置的深入理解和应用,可以有效地将源平台的数据转换为目标平台所需的格式,并通过API接口实现无缝对接。这不仅提高了数据处理效率,也确保了业务流程的顺畅运行。 ![电商OMS与ERP系统接口开发配置](https://pic.qeasy.cloud/T18.png~tplv-syqr462i7n-qeasy.image)