### 案例分享:旺店通·企业奇门数据集成到金蝶云星辰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)