(V2)销售出库单同步[旺店通`奇门->金蝶]
在数据集成的复杂场景中,如何确保业务流程流畅、精准无误,是每个系统集成工作者必须解决的核心问题。在本案例中,我们将探讨如何使用轻易云数据平台,实现旺店通·企业奇门的数据平滑对接到金蝶云星辰V2环境下,同时处理大批量数据写入和接口限流等技术挑战。
为了实现从旺店通·企业奇门获取销售出库单信息并同步至金蝶云星辰V2,我们通过API接口进行高效的数据抓取与整合。具体步骤如下:
-
定时可靠的数据抓取:利用轻易云平台定时任务调度功能,通过调用
wdt.stockout.order.query.trade
接口,从旺店通·企业奇门提取近期销售出库单。这一步骤不仅要保证数据的实时性,还需考虑到API访问频率限制及分页问题。 -
处理数据格式差异:由于两套系统间存在不同的数据结构,在提取后需要对原始数据进行清洗与转换,以满足金蝶云星辰V2标准化输入格式要求。这一环节借助轻易云强大的ETL工具,实现了高效且准确的数据映射与清洗。
-
快速批量写入:针对大量销售出库单的需求,通过调用金蝶云星辰V2 API
/jdy/v2/scm/sal_out_bound
,我们进行了优化配置,使得大规模数据能够快速稳定地批量导入。而在正式提交前,会有相应的数据预检机制,以过滤异常或错误记录,提高整体操作成功率。 -
监控与日志记录:为确保整个过程透明可追溯,每一步操作都被详细记录,并提供实时监控界面,可以即时查看当前任务状态及历史执行情况。当某些步骤出现故障时,将触发自动重试机制,有效降低了因网络波动或临时故障导致的失败风险。
本文将逐步剖析上述各个技术细节,其中包含如何有效调用API、处理分页现象、限流策略以及错误重试等关键问题,为您提供全面而深入的实战指导。
调用源系统旺店通·企业奇门接口wdt.stockout.order.query.trade获取并加工数据
在数据集成生命周期的第一步,调用源系统接口获取数据是至关重要的。本文将详细探讨如何使用轻易云数据集成平台调用旺店通·企业奇门接口wdt.stockout.order.query.trade
,并对获取的数据进行初步加工。
接口调用配置
我们首先需要配置元数据,以便正确调用接口并获取所需的数据。以下是该接口的元数据配置:
{
"api": "wdt.stockout.order.query.trade",
"method": "POST",
"number": "order_no",
"id": "stockout_id",
"pagination": {
"pageSize": 100
},
"omissionRemedy": {
"crontab": "55 * * * *",
"adapter": "\\Adapter\\Wdt\\WdtQMQueryAdapter",
"takeOverRequest": [
{
"field": "start_time",
"label": "修改时间开始段",
"type": "string",
"is_required": true,
"describe": null,
"value": "{{HOURE_AGO_1|datetime}}"
}
]
},
"idCheck": true,
"request": [
{
"field": "start_time",
"label": "开始时间",
"type": "datetime",
"describe": "增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss",
"value": "{{LAST_SYNC_TIME|datetime}}"
},
{
"field": "end_time",
"label": "结束时间",
"type": "datetime",
"describe": null,
"value":"{{CURRENT_TIME|datetime}}"
},
{
...
}
],
...
}
请求参数详解
-
start_time 和 end_time:
start_time
和end_time
用于指定查询的时间范围。通过使用占位符{{LAST_SYNC_TIME|datetime}}
和{{CURRENT_TIME|datetime}}
,可以动态设置查询的起始和结束时间。
-
status:
- 表示订单状态,例如:5已取消,55已审核,95已发货等。这个字段可以帮助我们过滤出特定状态的订单。
-
src_order_no、src_tid、stockout_no、shop_no、warehouse_no:
- 分别表示系统订单编号、原始单号、出库单号、店铺编号和仓库编号。这些字段用于精确定位和筛选订单信息。
-
is_by_modified:
- 用于指示是否按修改时间查询。
分页处理
由于接口返回的数据可能非常庞大,我们需要进行分页处理。元数据中的分页配置如下:
{
...
“pagination”: {
“pageSize”: 100
},
...
}
通过设置 pageSize
为100,可以确保每次请求返回最多100条记录。此外,还需要在请求参数中添加 page_no
字段来控制页码:
{
...
“otherRequest”: [
{
“field”: “page_size”,
“label”: “分页大小”,
“type”: “string”,
“describe”: “每页返回的数据条数,输入值范围1~100,不传本参数,输入值默认为40”,
“value”: "{PAGINATION_PAGE_SIZE}"
},
{
“field”: “page_no”,
“label”: “页号”,
“type”: “string”,
“describe”: null,
“value”: "{PAGINATION_START_PAGE}"
}
]
}
数据清洗与加工
在成功获取到数据后,需要对其进行清洗与初步加工,以便后续的数据转换与写入步骤。常见的数据清洗操作包括:
- 去重:确保没有重复记录。
- 格式转换:将日期、金额等字段转换为统一格式。
- 字段映射:将源系统中的字段名映射到目标系统中的字段名。
例如,对于日期字段,可以使用以下代码进行格式转换:
import datetime
def convert_date_format(date_str):
return datetime.datetime.strptime(date_str, '%Y-%m-%d %H:%M:%S').strftime('%Y%m%d%H%M%S')
通过上述步骤,我们可以确保从旺店通·企业奇门接口获取的数据是干净且结构化的,为后续的数据转换与写入奠定基础。
综上所述,通过合理配置元数据并进行必要的数据清洗与加工,我们能够高效地从源系统中提取有价值的信息,并为后续的数据处理环节做好准备。
数据转换与写入金蝶云星辰V2API接口的技术实现
在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,转为目标平台金蝶云星辰V2API接口所能够接收的格式,并最终写入目标平台。以下是具体的技术实现过程。
API接口配置
根据元数据配置,我们需要调用金蝶云星辰V2的销售出库单同步API接口。该接口的路径为/jdy/v2/scm/sal_out_bound
,请求方法为POST。我们将通过此接口将转换后的数据写入目标平台。
请求参数配置
请求参数是整个数据转换过程中的关键部分。以下是主要字段及其对应的配置:
-
出库日期(bill_date)
- 类型:字符串
- 描述:出库日期,格式为
2019-01-01
- 值:
{{consign_time|date}}
-
单据编号(bill_no)
- 类型:字符串
- 描述:单据编号
- 值:
{order_no}
-
客户信息(customer_id)
- 类型:字符串
- 描述:客户信息
- 值:通过集合查找获取客户ID,例如:
_findCollection find id from f2bc9a33-2d6d-3926-8d7d-9685cd8f06a9 where name={shop_name}
-
业务员信息(emp_id)
- 类型:字符串
- 描述:业务员信息
-
单据备注(remark)
- 类型:字符串
- 描述:单据备注
- 值:
{cs_remark}
-
联系信息(contact_phone、contact_country_id、contact_province_id、contact_city_id、contact_district_id)
- 类型:字符串
- 描述:联系信息相关字段
-
商品分录(material_entity) 商品分录是一个数组,每个商品分录包含多个子字段:
-
商品(material_id)
- 类型:字符串
- 描述:商品ID,通过集合查找获取,例如:
_findCollection find id from 1fbda962-66f8-3cba-914f-26119e235199 where number={{details_list.spec_no}}
-
仓库(stock_id)
- 类型:字符串
- 描述:仓库ID,通过集合查找获取,例如:
_findCollection find id from 5b656ff0-ec9e-3dd3-be0e-c505c356836d where name={warehouse_name}
-
数量(qty)
- 类型:字符串
- 描述:数量
- 值:
{{details_list.goods_count}}
-
单位(unit_id)
- 类型:字符串
- 描述:单位ID,固定值为
2
-
单价(price)
- 类型:字符串
- 描述:单价,计算公式为:
_function ({{details_list.total_amount}}+{{details_list.share_post}})/{{details_list.goods_count}}
-
税率(cess)
- 类型:字符串
- 描述:税率,例如13%的税率填13
-
是否赠品(is_free)
- 类型:字符串
- 描述:“是否赠品”,计算逻辑为:
_function CASE WHEN {{details_list.sell_price}}>0 THEN 'false' ELSE 'true' END
-
自定义字段配置
自定义字段允许我们根据业务需求添加额外的信息:
-
销售订单号(custom_field128l7dyhux0m0pxie)
- 类型:字符串
- 值:
{trade_no}
-
订单类型(custom_field12b977if3xvje)
- 类型:字符串
- 值映射:
{trade_type}
映射规则:
{"target":"626660324cb37b3cdf3cc2b7","direction":"positive"}
-
发货条件(custom_field12b98xfm4mz2o) 发货条件根据不同值进行转换,例如:
_function case '{delivery_term}' when '1' then '款到发货' when '2' then '货到付款(包含部分货到付款)' when '3' then '分期付款' when '4' then '挂账单' end
-
原始单号(custom_field12gbdyhnz5o37s4) 原始单号直接取值:
{src_trade_no}
数据处理与写入
在完成上述配置后,我们可以通过轻易云数据集成平台将处理后的数据发送至金蝶云星辰V2API接口。整个过程包括数据提取、清洗、转换以及最终的数据写入操作。
通过这种方式,我们能够确保源平台的数据能够无缝对接到目标平台,实现高效的数据集成和业务流程自动化。