案例分享:旺店通·企业奇门数据集成到金蝶云星辰V2——盘亏V2.0的实现
在实际业务中,电商平台的数据管理和对接往往面临诸多挑战。本文将重点介绍如何通过轻易云数据集成平台,实现旺店通·企业奇门中的订单数据高效可靠地集成到金蝶云星辰V2系统,以优化库存管理并提升运营效率。
任务概述
通过调用旺店通·企业奇门的wdt.stockout.order.query
接口,我们可以获取出库订单的数据,然后利用金蝶云星辰V2的/jdy/v2/scm/inv_check_loss_bill
API接口进行数据写入。在此过程中,需要处理分页、限流以及两者之间的数据格式差异,并确保不漏单且能大量快速写入目标系统。
关键技术点
-
定时可靠抓取与批量处理 通过配置定时器,按设定间隔时间从旺店通接口稳定抓取最新订单。为了应对API返回的大量数据,通过分页机制逐页拉取。同时,为了避免网络波动或瞬时异常导致的数据丢失,引入错误重试机制确保每次请求都成功响应。
-
调用和解析API 利用标准HTTP协议调用
wdt.stockout.order.query
接口,从JSON响应中提取必需的字段信息,并按照金蝶云星辰V2所要求的数据结构重新组织。这一步骤是消除两者格式差异的重要环节。 -
快速大批量写入 当获得整理好的订单后,借助轻易云提供的大规模、多并发写入能力,将这些订单数据一键导入至金蝶云星辰V2系统内。这里采用批量方式操作,可显著提升性能并减少网络交互次数。
-
实时监控与日志记录 在整个流程运行期间,通过轻易云的平台特性,对各个步骤进行实时状态监控及日志记录。一旦发生异常情况,能够及时告警并便于追溯源头问题,加速问题解决过程。
以下章节,将详细探讨上述技术点在"盘亏V2.0"方案中的具体实现方法,以及遇到的一些常见问题和解决策略。
调用旺店通·企业奇门接口获取并加工数据
在轻易云数据集成平台的生命周期中,调用源系统接口是数据处理过程的第一步。本文将深入探讨如何通过调用旺店通·企业奇门接口 wdt.stockout.order.query
获取并加工数据。
接口调用配置
首先,我们需要配置接口的元数据,以便正确地请求和处理数据。以下是我们使用的元数据配置:
{
"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}”
}
]
}
数据请求与清洗
在进行数据请求时,我们需要特别注意以下几点:
-
时间参数:
start_time
和end_time
用于指定增量获取数据的时间范围。这两个参数分别取自上次同步时间和当前时间。- 格式要求为
yyyy-MM-dd HH:mm:ss
。
-
过滤条件:
- 使用
warehouse_no
字段进行过滤,以排除特定仓库编号(如WH2024052601
)。 - 出库单类型 (
order_type
) 固定为4
(盘亏出库)。
- 使用
-
分页处理:
- 配置分页大小 (
page_size
) 为每页30条记录。 - 页号 (
page_no
) 从0开始。
- 配置分页大小 (
数据转换与写入
在获取到原始数据后,需要对其进行清洗和转换。以下是一些关键步骤:
-
ID检查:
- 确保每条记录都有唯一标识符 (
stockout_id
)。
- 确保每条记录都有唯一标识符 (
-
字段映射:
- 将原始字段映射到目标系统所需的字段。例如,将
order_no
映射为目标系统中的订单编号。
- 将原始字段映射到目标系统所需的字段。例如,将
-
状态过滤:
- 根据业务需求,仅保留特定状态的记录,如已发货 (
95
) 和已完成 (110
) 的记录。
- 根据业务需求,仅保留特定状态的记录,如已发货 (
-
异常处理:
- 对于异常记录(如状态为
113
),需要进行特殊处理或记录日志以便后续分析。
- 对于异常记录(如状态为
通过以上步骤,我们能够高效地从旺店通·企业奇门接口获取并加工所需的数据,为后续的数据写入和进一步处理奠定基础。
轻易云数据集成平台生命周期的第二步:将源数据转换为金蝶云星辰V2API接口格式并写入
在数据集成过程中,将源平台的数据转换为目标平台所能接收的格式是关键步骤之一。本文将详细探讨如何使用轻易云数据集成平台,将已集成的源数据进行ETL转换,最终通过金蝶云星辰V2API接口写入目标平台。
元数据配置解析
在进行ETL转换之前,首先需要理解元数据配置。以下是用于盘亏V2.0集成方案的元数据配置:
{
"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转换过程。
数据转换与写入
-
API接口配置:
api
字段定义了目标API的路径,即/jdy/v2/scm/inv_check_loss_bill
。method
字段指定了HTTP方法为POST。effect
字段表示执行操作。
-
字段映射:
bill_date
映射到源数据中的修改日期({modified}
)。bill_no
生成格式为PKD{order_no}
的单据编号。remark
生成格式为旺店通盘亏单{order_no}
的备注信息。operation_key
固定值为audit
,表示操作类型。
-
数组嵌套处理:
material_entity
是一个数组类型,包含多个商品分录。每个分录包含以下子字段:material_id
: 使用MongoDB查询获取商品ID,查询条件为商品编号(goods_no
)。qty
: 商品数量直接映射自源数据中的goods_count
。unit_id
: 使用MongoDB查询获取单位ID,查询条件同样为商品编号(goods_no
)。stock_id
: 使用集合查找获取仓库ID,查找条件为仓库编号(warehouse_no
})。
实际案例应用
假设我们有如下源数据:
{
"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接口要求的格式:
{
"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接口实现无缝对接。这不仅提高了数据处理效率,也确保了业务流程的顺畅运行。