PACKAGE--旺店通销售退货单对接金蝶云星辰销售退货单技术案例分享
在本案例中,我们将聚焦如何通过轻易云数据集成平台实现旺店通·企业奇门的数据无缝对接到金蝶云星辰V2,重点探讨"PACKAGE--旺店通销售退货单对接金蝶云星辰销售退货单"的技术细节。
首先,我们需要调用旺店通·企业奇门提供的wdt.stockin.order.query.refund
API接口,从中抓取具体的销售退货数据。这个过程需特别注意处理分页和限流问题,以确保不会因请求过多而触发系统保护机制。在获取数据后,利用轻易云的平台能力完成必要的数据清洗、转换,并根据业务需求自定义转换逻辑解决两边系统之间的数据格式差异。
为保证这些批量化的数据能够快速、安全地写入金蝶云星辰V2,需要配置其API接口(/jdy/v2/scm/sal_in_bound
)来接受并处理输入的数据。这一步包含多个关键技术点:高吞吐量支持、实时监控以及异常检测和告警。集中监控和日志记录功能可以让我们及时发现潜在的问题,并通过自动化重试机制提高整体流程的可靠性。
此外,为保障整个集成过程中不漏单,设置定时任务以定期从旺店通·企业奇门接口抓取更新的数据,同时要考虑实现批量操作,以减少频繁请求所带来的负载压力。在实际实施过程中,也会结合具体使用场景进行优化,例如缓存策略和动态调整批次大小等。
以上便是本项目所涉及的一些核心技术点。在下文中,我们将详细拆解各个开发步骤及其对应的代码实现,包括如何准确调用相关API、配置数据映射规则以及处理异常情况等内容。
调用旺店通·企业奇门接口获取并加工数据
在数据集成生命周期的第一步,我们需要调用源系统的API接口以获取初始数据。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口wdt.stockin.order.query.refund
来获取销售退货单数据,并进行初步加工。
接口概述
接口wdt.stockin.order.query.refund
用于查询销售退货单信息,支持增量获取和分页查询。该接口采用POST请求方式,返回的数据包括订单号、入库单ID等关键字段。
元数据配置解析
根据提供的元数据配置,我们可以看到以下几个关键点:
- API名称:
wdt.stockin.order.query.refund
- 请求方法: POST
- 主要字段:
order_no
: 订单号stockin_id
: 入库单ID
- 请求参数:
start_time
: 开始时间,用于增量获取数据,格式为yyyy-MM-dd HH:mm:ss
end_time
: 结束时间,用于增量获取数据,格式为yyyy-MM-dd HH:mm:ss
status
: 入库单状态,默认查询已完成的单据(状态码80)shop_no
: 店铺编号,用于区分不同店铺的数据- 分页参数:
page_size
和page_no
请求参数设置
在实际操作中,我们需要设置好请求参数,以确保能够正确地调用接口并获取所需的数据。以下是一个典型的请求参数设置示例:
{
"start_time": "{{LAST_SYNC_TIME|datetime}}",
"end_time": "{{CURRENT_TIME|datetime}}",
"status": "80",
"shop_no": "SHOP123",
"page_size": "40",
"page_no": "0"
}
start_time
和end_time
分别表示上次同步时间和当前时间,用于实现增量数据获取。status
设置为80,表示只查询已完成的退货单。shop_no
指定了特定店铺编号。- 分页参数设置为每页40条记录,从第0页开始。
数据处理与清洗
在成功调用API并获取到原始数据后,需要对数据进行初步清洗和处理,以便后续的数据转换与写入步骤。以下是一些常见的数据处理操作:
- 字段映射: 将API返回的字段映射到目标系统所需的字段。例如,将返回的
order_no
映射到目标系统中的订单号字段。 - 数据类型转换: 确保所有字段的数据类型符合目标系统要求。例如,将日期字符串转换为日期对象。
- 去重与过滤: 移除重复记录,并根据业务规则过滤不需要的数据。
示例代码
以下是一个示例代码片段,展示如何通过轻易云平台调用接口并处理返回的数据:
import requests
import json
from datetime import datetime
# 设置请求URL和头信息
url = 'https://api.wangdian.cn/openapi2/wdt.stockin.order.query.refund'
headers = {'Content-Type': 'application/json'}
# 构建请求参数
params = {
"start_time": datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
"end_time": datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
"status": "80",
"shop_no": "SHOP123",
"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()
# 数据处理与清洗
processed_data = []
for record in data['orders']:
processed_record = {
'order_number': record['order_no'],
'stockin_id': record['stockin_id'],
# 添加更多字段映射和处理逻辑...
}
processed_data.append(processed_record)
# 输出处理后的数据
print(processed_data)
else:
print(f"Error: {response.status_code}, {response.text}")
通过上述步骤,我们可以高效地从旺店通·企业奇门接口获取销售退货单数据,并进行必要的清洗和处理,为后续的数据转换与写入打下坚实基础。
将源平台数据转换为金蝶云星辰V2API接口格式并写入目标平台
在数据集成的生命周期中,ETL(提取、转换、加载)过程是关键的一环。本文将详细探讨如何使用轻易云数据集成平台,将源平台的数据转换为金蝶云星辰V2API接口所能接收的格式,并最终写入目标平台。
数据请求与清洗
在ETL流程中,首先要从源系统中提取数据并进行清洗。假设我们已经完成了这一步,接下来需要将清洗后的数据进行格式转换,以符合金蝶云星辰V2API接口的要求。
数据转换与写入
根据元数据配置,我们需要将源平台的数据字段映射到金蝶云星辰V2API接口的相应字段。以下是具体的字段映射和转换逻辑:
-
出库日期(bill_date)
- 类型:date
- 描述:格式为
YYYY-MM-DD
- 源字段:
check_time
- 转换逻辑:直接映射源字段值。
-
客户编码(customer_number)
- 类型:string
- 描述:客户编码
- 源字段:
shop_no
- 转换逻辑:直接映射源字段值。
-
单据编码(bill_no)
- 类型:string
- 描述:单据编码
- 源字段:
order_no
- 转换逻辑:直接映射源字段值。
-
分录明细行(material_entity)
- 类型:array
-
描述:包含多个子字段
-
商品编码(material_number)
- 类型:string
- 描述:商品编码
- 源字段:
details_list.spec_no
- 转换逻辑:直接映射源字段值。
-
价税合计(all_amount)
- 类型:string
- 描述:价税合计
- 源字段:
details_list.right_cost
- 转换逻辑:直接映射源字段值。
-
仓库编码(stock_number)
- 类型:string
- 描述:仓库编码
- 源字段:
warehouse_no
- 转换逻辑:直接映射源字段值。
-
数量(qty)
- 类型:float
- 描述:数量
- 源字段:
details_list.goods_count
- 转换逻辑:直接映射源字段值。
-
是否赠品(is_free)
- 类型:string
- 描述:“true”或“false”
- 源字段:
details_list.right_cost
- 转换逻辑:
case '{{details_list.right_cost}}' when "0.0000" then 'true' else 'false' end
-
生产日期(kf_date)
- 类型: string
- 描述: 生产日期
-
单位id(unit_id)
- 类型: string
- 描述: 单位id,通过MongoDB查询获取:
_mongoQuery b88a7889-af5d-3efd-aac4-d4960eae6748 findField=content.base_unit_id where={"content.number":{"$eq":"{{details_list.spec_no}}"}}
-
实际操作示例
假设我们有如下JSON格式的数据从源平台提取:
{
"check_time": "2023-10-01",
"shop_no": "CUST001",
"order_no": "ORD12345",
"warehouse_no": "WH001",
"details_list": [
{
"spec_no": "PROD001",
"right_cost": "100.00",
"goods_count": 10,
"production_date": "2023-09-01"
},
{
"spec_no": "PROD002",
"right_cost": "0.0000",
"goods_count": 5,
"production_date": "2023-09-05"
}
]
}
通过上述元数据配置和转换逻辑,生成的目标平台数据格式如下:
{
"bill_date": "2023-10-01",
"customer_number": "CUST001",
"bill_no": "ORD12345",
"material_entity": [
{
"material_number": "PROD001",
"all_amount": "100.00",
"stock_number": "WH001",
"qty": 10,
"is_free": false,
// MongoDB查询结果填充unit_id,例如:
// "_mongoQuery result for PROD001"
// 此处假设查询结果为"UNIT001"
// 实际操作中需替换为真实查询结果:
// "_mongoQuery b88a7889-af5d-3efd-aac4-d4960eae6748 findField=content.base_unit_id where={\"content.number\":{\"$eq\":\"PROD001\"}}"
// 查询结果示例:
// {"content.base_unit_id":"UNIT001"}
// 则unit_id填充为"UNIT001"
// 单位id:
// 此处假设查询结果为"UNIT001"
// 实际操作中需替换为真实查询结果:
"_mongoQuery result for PROD001"
![用友与WMS系统接口开发配置](https://pic.qeasy.cloud/T23.png~tplv-syqr462i7n-qeasy.image)