案例解析:旺店通·企业奇门数据集成到金蝶云星辰V2
在企业信息系统集成过程中,实现不同平台间的数据对接是一项极具挑战的任务。本文将聚焦于一个实际运行的对接方案——从旺店通·企业奇门导出数据并集成到金蝶云星辰V2的案例,探讨如何通过轻易云数据集成平台高效可靠地完成这项工作。
整体概览
本次项目涉及将“其他出库(生产)”类型的数据从旺店通·企业奇门,通过API接口wdt.stockout.order.query
获取后,再批量写入到金蝶云星辰V2的新版本接口/jdy/v2/scm/inv_other_out
中。其中需要解决的重要技术问题包括确保数据不漏单、实现大量数据的快速写入以及处理两者之间的数据格式差异等。
数据抓取与转换
我们采用定时可靠抓取策略,每小时调用一次旺店通·企业奇门提供的API接口wdt.stockout.order.query
,以获取最新的出库订单记录。在抓取过程中,我们特别关注分页和限流的问题。为此,在请求参数中加入了分页信息,并根据返回结果中的状态码进行限流判断,保证每次操作都在可控范围内顺利完成。
快速批量写入与映射优化
为了应对大量数据快速稳定地写入至金蝶云星辰V2,我们设计了一套批量处理机制,将多条订单记录合并一组,通过轻易云的平台特性批量传输。同时,为了解决源端和目标端字段及格式的不一致问题,对每个字段进行了精细化映射。这包括简单字符型字段转换,以及复杂结构体字段重构,以确保最终提交给金蝶云的数据满足其严格要求。
异常处理与重试机制
在整个对接过程中,不可避免会遇到网络波动或意外错误引起的失败事件。针对这些情况,我们使用了详细完整的日志监控系统来实时追踪操作进展和状态。一旦发现异常,可以触发自动重试机制,基于上一次失败时保存下来的上下文信息重新发起请求,从而保证整体流程的不间断性和准确性。
本系列文章开篇介绍了此次系统对接集成关键部分,其它具体技术实现细节将在后续章节全面展开,包括如何高效管理生命周期事件、更多分页策略优化方法及错误捕获技巧等。
使用轻易云数据集成平台调用旺店通·企业奇门接口获取并加工数据
在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口wdt.stockout.order.query
,并对获取的数据进行初步加工。
接口概述
wdt.stockout.order.query
接口用于查询出库单信息,支持按最后修改时间增量获取数据。该接口采用POST请求方式,返回的数据包含出库单的详细信息。为了确保数据的准确性和完整性,我们需要配置相关的元数据。
元数据配置详解
以下是我们在轻易云平台上配置的元数据:
{
"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":"5"
},
{
...
请求参数解析
-
时间参数:
start_time
和end_time
分别表示查询的起始和结束时间,格式为yyyy-MM-dd HH:mm:ss
。这些参数通过模板变量{{LAST_SYNC_TIME|datetime}}
和{{CURRENT_TIME|datetime}}
动态生成。
-
订单类型:
order_type
固定为5
,表示生产出库。
-
状态过滤:
status
设置为95,110
,表示查询已发货和已完成的订单。
-
仓库编号:
warehouse_no
用于区分不同仓库,这里不传递具体值以支持多仓库查询。
-
分页参数:
page_size
和page_no
用于控制分页,每页返回30条记录,从第0页开始。
数据请求与清洗
在配置好元数据后,通过轻易云平台发送POST请求到旺店通·企业奇门接口。示例请求体如下:
{
...
{
...
{"start_time":"2023-10-01 00:00:00","end_time":"2023-10-01 23:59:59","order_type":"5","status":"95,110"},
{"page_size":"30","page_no":"0"}
}
}
请求返回的数据需要经过清洗和转换,以便后续处理。以下是常见的数据清洗步骤:
- 字段映射:将返回的数据字段映射到目标系统所需的字段。例如,将返回的
stockout_id
映射为目标系统中的唯一标识符。 - 数据过滤:根据业务需求过滤掉不必要的数据。例如,只保留特定状态或特定仓库的数据。
- 格式转换:将日期、数值等字段转换为目标系统所需的格式。
数据转换与写入
经过清洗后的数据可以进一步转换,并写入到目标系统中。这一步通常涉及到复杂的业务逻辑和规则,需要根据具体需求进行定制化开发。
通过上述步骤,我们成功地从旺店通·企业奇门接口获取了所需的生产出库单信息,并对其进行了初步加工,为后续的数据处理打下了坚实基础。
将源平台数据ETL转换并写入金蝶云星辰V2API接口的技术案例
在轻易云数据集成平台中,将源平台的数据进行ETL(提取、转换、加载)转换,并最终写入目标平台金蝶云星辰V2API接口,是一个复杂而关键的步骤。本文将详细探讨如何通过配置元数据,实现这一过程。
API接口配置与元数据解析
我们需要将源平台的数据转换为金蝶云星辰V2API接口所能接收的格式。根据提供的元数据配置,目标API接口为/jdy/v2/scm/inv_other_out
,请求方法为POST。以下是关键字段及其对应关系:
bill_date
(单据日期):映射到源数据中的consign_time
bill_no
(单据编码):映射到源数据中的order_no
trans_type_id
(业务类型id):固定值13operation_key
(操作类型):固定值auditmaterial_entity
(商品分录):这是一个数组,包含多个子字段,如商品ID、数量、单位和仓库等
数据提取与清洗
首先,从源平台提取原始数据,并进行必要的清洗操作。假设源数据结构如下:
{
"consign_time": "2023-10-01",
"order_no": "ORD123456",
"details_list": [
{
"goods_no": "G001",
"goods_count": 10,
"warehouse_no": "W001"
},
{
"goods_no": "G002",
"goods_count": 5,
"warehouse_no": "W002"
}
]
}
数据转换
根据元数据配置,我们需要将上述原始数据转换为目标API所需的格式。具体步骤如下:
-
单据日期和单据编码:直接映射
{ "bill_date": "{consign_time}", "bill_no": "{order_no}" }
-
业务类型和操作类型:固定值填充
{ "trans_type_id": "13", "operation_key": "audit" }
-
商品分录:复杂嵌套结构,需要进一步处理每个商品条目
- 商品ID (
material_id
) 和 单位 (unit_id
) 需要通过MongoDB查询获取。 - 仓库ID (
stock_id
) 通过集合查询获取。
- 商品ID (
具体实现代码示例如下:
let transformedData = {
bill_date: sourceData.consign_time,
bill_no: sourceData.order_no,
trans_type_id: '13',
operation_key: 'audit',
material_entity: sourceData.details_list.map(item => {
return {
material_id: queryMongoDB('d476a55d-acc7-3156-9c7f-b9f9dce596b5', 'content.id', { 'content.number': item.goods_no }),
qty: item.goods_count.toString(),
unit_id: queryMongoDB('d476a55d-acc7-3156-9c7f-b9f9dce596b5', 'content.base_unit_id', { 'content.number': item.goods_no }),
stock_id: findCollection('9cf5314a-709f-3e72-b021-c9edae06888f', 'id', { number: item.warehouse_no })
};
})
};
function queryMongoDB(collectionId, field, query) {
// 模拟MongoDB查询函数,根据实际情况实现
}
function findCollection(collectionId, field, query) {
// 模拟集合查询函数,根据实际情况实现
}
数据加载
最后,将转换后的数据通过POST请求发送至金蝶云星辰V2API接口:
fetch('/jdy/v2/scm/inv_other_out', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify(transformedData)
})
.then(response => response.json())
.then(data => console.log('Success:', data))
.catch(error => console.error('Error:', error));
总结
通过以上步骤,我们成功地将源平台的数据进行了ETL转换,并写入了金蝶云星辰V2API接口。这一过程不仅涉及到简单的数据映射,还包括复杂的嵌套结构处理和多系统间的数据查询与整合。在实际应用中,根据具体需求和系统环境,可能还需要进一步优化和调整。