旺店通·旗舰奇门数据集成到金蝶云星空的技术案例分享
在当今高度竞争的市场环境中,企业需要高效且准确的数据集成方案来支持其业务流程。对于一家依赖旺店通·旗舰奇门进行分销销售管理的公司而言,如何将销售出库单数据可靠地集成为其他系统供用,是一项关键任务。在本篇文章中,我们详细探讨了通过“分销销售出库单集成方案-P-T”,将旺店通·旗舰奇门的数据无缝对接到金蝶云星空,以及相关API接口调用和技术实现细节。
环境概述
- 源系统:旺店通·旗舰奇门
- 目标系统:金蝶云星空
主要API接口:
- 获取数据(source):
wdt.wms.stockout.sales.querywithdetail
- 写入数据(target):
batchSave
为了确保从旺店通·旗舰奇门获得的每条数据信息都能精准高效地传输至金蝶云星空,并避免漏单情况,我们设计了一套完整的数据处理流程。
数据获取与转换
作为第一步,通过调用wdt.wms.stockout.sales.querywithdetail
API接口,我们定时抓取最新的销售出库单信息,这些信息包括订单号、商品详情、数量等关键信息。同时,为了适应不同系统间的数据结构差异,我们编写自定义逻辑,将原始数据转化为符合金蝶云星空要求的格式。
以下是具体步骤:
-
分页及限流处理: 调用
wdt.wms.stockout.sales.querywithdetail
时,由于涉及大批量数据,需要解决分页及限流问题。我们设置自动页码迭代机制,并内置防止API请求频率过高导致超限告警措施。 -
实时监控与日志记录: 在整个过程中,使用集中监控和告警系统实时跟踪每个交易状态。一旦出现异常,如网络延迟或响应错误,会立即触发重试机制,同时生成详细日志以便后续分析。
-
自定义转换逻辑应用: 将获取到的信息映射并转化为符合目标API (
batchSave
) 接口规范的数据格式,例如字段名称映射和类型匹配,以确保正确性。 -
快速写入与性能优化: 利用平台提供的大量数据吞吐能力,将清洗后的数据批量发送至金蝶云星空。这不仅提高了传输效率,同时也保证大量交易在短时间内完成上传,从而提升整体业务处理速度。
此案例展示了复杂业务场景
调用源系统旺店通·旗舰奇门接口wdt.wms.stockout.sales.querywithdetail获取并加工数据
在数据集成生命周期的第一步,我们需要从源系统获取数据,并对其进行初步加工。本文将详细探讨如何使用旺店通·旗舰奇门接口wdt.wms.stockout.sales.querywithdetail
来实现这一过程。
接口调用配置
首先,我们需要配置接口调用的元数据。以下是该接口的元数据配置:
{
"api": "wdt.wms.stockout.sales.querywithdetail",
"method": "POST",
"number": "order_no",
"id": "stockout_id",
"idCheck": true,
"request": [
{
"field": "pager",
"label": "分页参数",
"type": "object",
"children": [
{
"field": "page_size",
"label": "分页大小",
"type": "int",
"value": 50,
"parent": "pager"
},
{
"field": "page_no",
"label": "页号",
"type": "int",
"value": 1,
"parent": "pager"
}
]
},
{
"field": "params",
"label": "业务参数",
"type": "object",
...
}
],
...
}
请求参数解析
在请求参数中,pager
和params
是两个主要的对象字段。pager
用于分页控制,而params
包含了具体的业务参数。
-
分页参数:
page_size
: 每页返回的数据条数,默认设置为50。page_no
: 当前请求的页码,默认设置为1。
-
业务参数:
start_time
: 数据查询的开始时间,默认值为30分钟前。end_time
: 数据查询的结束时间,默认值为当前时间。status_type
: 出库单状态类型,默认值为3(按照指定的status状态字段查询)。status
: 出库单状态详细信息,当status_type=3
时生效,默认值为110。warehouse_no
,stockout_no
,shop_nos
,src_order_no
,need_sn
,position
: 分别对应仓库编码、出库单编号、店铺编号、销售订单号、是否返回SN信息、是否按照货位排序等字段。
数据请求与清洗
在实际操作中,我们通过POST请求调用该接口,并传入上述配置好的请求参数。以下是一个示例代码片段:
import requests
import json
from datetime import datetime, timedelta
# 设置请求URL和头部信息
url = 'https://api.example.com/wdt.wms.stockout.sales.querywithdetail'
headers = {'Content-Type': 'application/json'}
# 配置请求参数
payload = {
'pager': {
'page_size': 50,
'page_no': 1
},
'params': {
'start_time': (datetime.now() - timedelta(minutes=30)).strftime('%Y-%m-%d %H:%M:%S'),
'end_time': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
'status_type': '3',
'status': '110',
# 可以根据实际需求添加其他业务参数
}
}
# 发起POST请求
response = requests.post(url, headers=headers, data=json.dumps(payload))
# 检查响应状态码并处理响应数据
if response.status_code == 200:
data = response.json()
# 对数据进行清洗和初步处理
processed_data = process_data(data)
else:
print(f"Error: {response.status_code}")
def process_data(data):
# 实现具体的数据清洗逻辑,例如去除无效字段、格式转换等
cleaned_data = []
for item in data['result']:
cleaned_item = {
'order_no': item['order_no'],
'stockout_id': item['stockout_id'],
# 添加其他需要保留或转换的字段
}
cleaned_data.append(cleaned_item)
return cleaned_data
数据转换与写入
在完成数据清洗后,我们可以将其转换为目标系统所需的格式,并写入到目标数据库或文件系统中。这一步通常包括字段映射、格式转换等操作。
例如,将清洗后的数据写入到数据库中:
import pymysql
def write_to_db(cleaned_data):
connection = pymysql.connect(
host='localhost',
user='user',
password='password',
database='database'
)
try:
with connection.cursor() as cursor:
for item in cleaned_data:
sql = """INSERT INTO stockout_orders (order_no, stockout_id)
VALUES (%s, %s)"""
cursor.execute(sql, (item['order_no'], item['stockout_id']))
connection.commit()
finally:
connection.close()
# 调用写入函数
write_to_db(processed_data)
通过上述步骤,我们实现了从源系统旺店通·旗舰奇门接口获取数据并进行初步加工,为后续的数据集成奠定了基础。在实际应用中,可以根据具体需求进一步优化和扩展这些操作。
使用轻易云数据集成平台实现分销销售出库单的ETL转换及写入金蝶云星空
在轻易云数据集成平台中,数据处理的第二步是将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,最终写入目标平台。本案例中,我们将分销销售出库单的数据转换为金蝶云星空API接口所能接收的格式,并写入目标平台。
配置元数据
首先,我们需要配置元数据,以便将源数据映射到目标API所需的字段格式。以下是具体的元数据配置:
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 20,
"method": "batchArraySave"
},
"request": [
{"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","value":"DSXSCHD07","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
{"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{order_no}"},
{"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{consign_time}"},
{"field":"FStockOrgId","label":"发货组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"106"},
{"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"组织","value":"_findCollection find FUseOrgID from 08313512-4ecd-37b1-9945-be9366662e85 where FWDTDCName={fenxiao_nick}","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
{"field":"FCustomerID","label":"客户","type":"string","describe":"基础资料","value":"_findCollection find FCustID from 08313512-4ecd-37b1-9945-be9366662e85 where FWDTDCName={fenxiao_nick}","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
{"field":"Fnote","label":"备注","type":"","describe":"","value":""},
{"field":"","label":"","type":"","describe":"","value":""},
...
],
"otherRequest":[
{"field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder", "value": "KD_DSSAL_OutStock"},
{"field": "Operation", "label": "执行的操作", "type": "", "value": ""},
...
]
}
数据转换
在进行ETL转换时,我们需要特别注意以下几点:
- 字段映射:确保每个字段都正确映射到目标API所需的字段。例如,
FBillNo
对应源数据中的{order_no}
,FDate
对应{consign_time}
。 - 数据解析:对于一些复杂的数据类型,如基础资料字段,需要使用
ConvertObjectParser
等解析器进行转换。例如,FSaleOrgId
和FCustomerID
都需要通过查找对应关系进行转换。 - 嵌套结构:对于包含嵌套结构的数据,如订单明细
FEntity
,需要逐层解析和映射。例如,物料编码FMaterialID
对应{details_list.goods_no}
,实发数量FRealQty
对应{details_list.goods_count}
。
API请求
完成数据转换后,我们通过API请求将转换后的数据写入金蝶云星空。具体请求如下:
{
"FormId": "KD_DSSAL_OutStock",
"Operation": {
...
},
...
}
此处我们使用POST方法,将批量保存(batchSave)操作发送到金蝶云星空API接口。确保请求体中的所有字段都已正确填充,并符合目标系统要求。
实际应用案例
假设我们有一个分销销售出库单,其源数据如下:
{
...
}
通过上述元数据配置和ETL转换,我们可以生成如下符合金蝶云星空API要求的数据格式:
{
...
}
最后,通过调用金蝶云星空API接口,将处理好的数据提交并审核,实现从源平台到目标平台的数据无缝对接。
总结
通过轻易云数据集成平台,我们能够高效地完成分销销售出库单的数据ETL转换,并成功写入金蝶云星空。这不仅提升了业务流程的自动化程度,还确保了数据的一致性和准确性。