旺店通销售出库单对接金蝶云星辰V2的技术案例分享
在电商快速发展的今天,高效、准确的数据集成成为企业优化业务流程必不可少的需求。本技术文章将详细解析如何通过旺店通·企业奇门数据集成到金蝶云星辰V2,实现销售出库单对接任务。本文特别聚焦于一线实际运行方案:旺店通销售出库单对接(线下)。
首先,我们需使用wdt.stockout.order.query.trade
接口从旺店通·企业奇门获取销售信息,不仅要确保数据不漏单,且需处理分页和限流问题,以保证大规模数据提取的稳定性。由于两系统的数据格式有所差异,在写入之前必须进行必要的数据转换和映射。此外,通过定时可靠的抓取机制,可以自动化批量采集订单信息并将其快速写入到金蝶云星辰V2。
为了实现这一目标,轻易云数据集成平台提供了全方位支持,包括实时监控与日志记录功能。这不仅允许我们即时察觉并解决异常情况,还能通过错误重试机制大幅提升数据传输的成功率。同时,针对金蝶云星辰V2特殊化要求,我们采用/jdy/v2/scm/sal_out_bound API完成最终的信息提交。
以下章节将深入探讨具体实现步骤,包括API调用方法、分页与限流策略以及定制化映射对接等技术细节,为您呈现一个完整、高效、可靠的数据集成解决方案。
调用源系统旺店通·企业奇门接口wdt.stockout.order.query.trade获取并加工数据
在轻易云数据集成平台的生命周期中,调用源系统接口是关键的第一步。本文将详细探讨如何通过调用旺店通·企业奇门接口wdt.stockout.order.query.trade
获取销售出库单数据,并对其进行初步加工。
接口调用配置
首先,我们需要配置接口调用的元数据。根据提供的metadata,以下是具体的配置细节:
- API:
wdt.stockout.order.query.trade
- 请求方法:
POST
- 主要字段:
order_no
: 销售订单号stockout_id
: 出库单IDstart_time
: 数据增量获取的开始时间,格式为yyyy-MM-dd HH:mm:ss
end_time
: 数据增量获取的结束时间,格式为yyyy-MM-dd HH:mm:ss
status
: 销售订单状态,包括已取消、已审核、已发货、部分打款、已完成和异常发货等状态shop_no
: 店铺编号,用于区分不同店铺的数据warehouse_no
: 仓库编号,用于区分不同仓库的数据
请求参数设置
为了实现增量数据获取,我们需要设置start_time
和end_time
参数。这两个参数分别代表上次同步时间和当前时间,可以通过模板变量动态填充:
{
"start_time": "{{LAST_SYNC_TIME|datetime}}",
"end_time": "{{CURRENT_TIME|datetime}}"
}
此外,为了确保我们只获取特定状态的订单,可以设置status
参数:
{
"status": "95,105,110,113"
}
分页参数也非常重要,以确保我们能够处理大量数据而不会遗漏:
{
"page_size": "{PAGINATION_PAGE_SIZE}",
"page_no": "{PAGINATION_START_PAGE}"
}
数据请求与清洗
在发送请求后,我们将接收到一批原始数据。为了便于后续处理,需要对这些数据进行初步清洗和转换。以下是一些常见的数据清洗步骤:
- 字段映射:将接口返回的数据字段映射到目标系统所需的字段。例如,将返回的
order_no
映射到目标系统中的订单号字段。 - 数据过滤:根据业务需求过滤掉不必要的数据。例如,只保留特定状态(如已发货、已完成)的订单。
- 格式转换:将日期时间等字段转换为目标系统所需的格式。
示例代码
以下是一个简单的Python示例代码,用于调用接口并处理返回的数据:
import requests
import json
from datetime import datetime
# 设置请求URL和头信息
url = "https://api.wangdian.cn/openapi2/wdt.stockout.order.query.trade"
headers = {
"Content-Type": "application/json"
}
# 设置请求参数
params = {
"start_time": datetime.strftime(LAST_SYNC_TIME, "%Y-%m-%d %H:%M:%S"),
"end_time": datetime.strftime(CURRENT_TIME, "%Y-%m-%d %H:%M:%S"),
"status": "95,105,110,113",
"shop_no": "KH01181",
"page_size": 40,
"page_no": 0
}
# 发起POST请求
response = requests.post(url, headers=headers, data=json.dumps(params))
# 检查响应状态码
if response.status_code == 200:
data = response.json()
# 数据清洗与转换示例
cleaned_data = []
for item in data['orders']:
cleaned_item = {
'order_id': item['order_no'],
'stockout_id': item['stockout_id'],
'status': item['status'],
'shop_no': item['shop_no'],
'warehouse_no': item['warehouse_no']
}
cleaned_data.append(cleaned_item)
# 打印或保存清洗后的数据
print(cleaned_data)
else:
print(f"Error: {response.status_code}, {response.text}")
小结
通过以上步骤,我们成功地从旺店通·企业奇门接口获取了销售出库单数据,并进行了初步清洗和转换。这一步骤为后续的数据转换与写入奠定了基础。在实际应用中,可以根据具体业务需求进一步优化和扩展这些操作。
数据转换与写入金蝶云星辰V2API接口的技术案例
在数据集成生命周期的第二步,我们将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星辰V2API接口所能够接收的格式,并最终写入目标平台。本文将详细探讨这一过程中涉及的技术细节和实现方法。
API接口配置
首先,我们需要了解金蝶云星辰V2API接口的配置。根据提供的元数据配置,我们需要向/jdy/v2/scm/sal_out_bound
接口发送POST请求。该接口要求的数据字段包括单据来源、出库日期、单据编号、客户ID、备注以及商品分录等。
以下是元数据配置中的主要字段及其描述:
- 单据来源:固定传入
ISV
。 - 出库日期:格式为
YYYY-MM-DD
,从源数据中的consign_time
字段获取。 - 单据编号:从源数据中的
stockout_no
字段获取。 - 客户ID:通过MongoDB查询获取,查询条件为商品实体ID(
details_list.src_oid
)。 - 备注:从源数据中的
cs_remark
字段获取。 - 商品分录:包含商品编码、仓库编码、数量、含税单价等多个子字段。
数据转换过程
在实际操作中,数据转换包括以下几个步骤:
-
提取源数据: 从源平台提取销售出库单的数据,包括基本信息和商品明细。
-
映射字段: 根据元数据配置,将源数据映射到目标API所需的字段。例如:
bill_source
: 固定值ISV
bill_date
: 映射自consign_time
bill_no
: 映射自stockout_no
customer_id
: 通过MongoDB查询获取remark
: 映射自cs_remark
-
处理数组类型字段: 对于商品分录(即数组类型字段),需要逐一处理每个子项,并进行相应的映射和查询。例如:
material_number
: 映射自details_list.spec_no
stock_number
: 映射自warehouse_no
qty
: 映射自details_list.goods_count
- 其他字段通过MongoDB查询或条件判断获取
MongoDB查询示例
对于需要通过MongoDB查询获取的数据,可以使用如下示例代码:
const mongoQuery = async (collection, query, field) => {
const result = await db.collection(collection).findOne(query);
return result ? result[field] : null;
};
// 获取客户ID
const customerId = await mongoQuery(
'customer_collection',
{ 'content.material_entity_id': details_list.src_oid },
'content.customer_id'
);
// 获取含税单价
const taxPrice = await mongoQuery(
'material_collection',
{ 'content.material_entity_id': details_list.src_oid },
'content.material_entity_tax_price'
);
数据写入目标平台
完成数据转换后,将其封装为符合金蝶云星辰V2API接口要求的JSON格式,并发送POST请求:
const axios = require('axios');
const payload = {
bill_source: "ISV",
bill_date: consign_time,
bill_no: stockout_no,
customer_id: customerId,
remark: cs_remark,
material_entity: details_list.map(item => ({
material_number: item.spec_no,
stock_number: warehouse_no,
qty: item.goods_count,
tax_price: await mongoQuery('material_collection', { 'content.material_entity_id': item.src_oid }, 'content.material_entity_tax_price'),
// 其他子项同理处理
}))
};
axios.post('/jdy/v2/scm/sal_out_bound', payload)
.then(response => {
console.log('Data successfully written to Kingdee Cloud:', response.data);
})
.catch(error => {
console.error('Error writing data to Kingdee Cloud:', error);
});
关键技术点总结
- 元数据配置解析:根据提供的元数据配置文件,准确解析每个字段及其来源。
- 动态查询与映射:利用MongoDB动态查询功能,根据条件获取所需的数据并进行映射。
- 数组处理与嵌套结构:对数组类型的数据进行逐项处理,并确保嵌套结构符合目标API要求。
- 错误处理与日志记录:在发送请求时,做好错误处理和日志记录,以便排查问题。
通过以上步骤,我们可以实现将源平台的数据成功转换并写入到金蝶云星辰V2API接口中,从而完成整个ETL过程。