旺店通·企业奇门数据集成到金蝶云星空:查询出库单
在实现旺店通·企业奇门与金蝶云星空的数据集成过程中,高效、准确地完成数据对接是关键。本文将探讨如何通过调用wdt.stockout.order.query
接口获取出库单,并利用轻易云平台的可视化工具和实时监控特性,将数据可靠、高效地写入至金蝶云星空的batchSave
接口,实现批量、定时的数据抓取与处理。
为确保整个流程中的每一环节都不出现漏单,首先需要解决分页和限流等技术难题。通过确定高效的请求频率和合理的分页策略,保障从旺店通·企业奇门 API 获取到完整且连续的数据。同时,通过轻易云平台提供的数据处理过程全生命周期管理,提高系统透明度与操作效率,使得业务人员可以直观地了解每个任务节点运行状态,并及时发现并解决可能存在的问题。
实现大量数据快速写入金蝶云星空,需要特别注意两者之间的数据格式差异。在这个案例中,我们使用了灵活配置映射规则的方法,根据实际业务需求对字段进行自定义转换,从而保障数据无缝迁移。同时,为应对异常情况,我们还设计了自动重试机制,以提升系统整体稳定性。
下一部分将详细介绍如何使用轻易云平台配置上述功能和调用相关API,确保出库单记录能够顺畅、安全地从旺店通·企业奇门传输至金蝶云星空。
调用旺店通·企业奇门接口获取并加工出库单数据
在数据集成生命周期的第一步,我们需要调用源系统的API接口以获取原始数据。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口wdt.stockout.order.query
来查询出库单,并对数据进行初步加工。
接口配置与请求参数
首先,我们需要配置元数据,以便正确调用API接口。以下是关键的元数据配置:
{
"api": "wdt.stockout.order.query",
"method": "POST",
"number": "order_no",
"id": "stockout_id",
"pagination": {
"pageSize": 30
},
"idCheck": true,
"condition": [
[
{"field":"order_type","logic":"eqv2","value":"2"},
{"field":"status","logic":"ineqv2","value":"5"}
],
[
{"field":"order_type","logic":"eqv2","value":"2"},
{"field":"status","logic":"ineqv2","value":"113"}
]
],
"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委外出库"},
{"field":"status","label":"出库单状态","type":"string","describe":"出库单状态5:已取消,50:待审核,55:已审核,95:已发货,110:已完成(默认查已发货已完成单据),113:异常发货"},
{"field":"warehouse_no","label":"仓库编号","type":"string","describe":"代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置)(不支持一次推送多个仓库编号)"},
{"field":"src_order_no","label":"源单号","type":"string","describe":"源单号"},
{"field":"stockout_no","label":"出库单号","type":"string","describe":"出库单号,传该字段可以不传时间"}
],
"otherRequest": [
{"field": "page_size", "label": "分页大小", "type": "string", "describe": "每页返回的数据条数,输入值范围1~100,不传本参数,输入值默认为40,使用举例单击这里", "value": "{PAGINATION_PAGE_SIZE}"},
{"field": "page_no", "label": "页号", "type": "string", "describe": "不传值默认从0页开始", "value": "{PAGINATION_START_PAGE}"}
]
}
数据请求与清洗
-
请求参数设置:
start_time
和end_time
用于指定查询时间范围,这两个参数分别取自上次同步时间和当前时间。order_type
固定为"2",表示调拨出库。status
排除值为"5"(已取消)和"113"(异常发货),确保查询到有效的订单。warehouse_no
,src_order_no
,stockout_no
等字段根据实际需求可选填。
-
分页处理:
- 使用
page_size
和page_no
参数进行分页,每次请求最多返回30条记录。
- 使用
-
条件过滤:
- 配置了两个条件组,每组包含两个条件,用于过滤符合特定条件的订单。
数据转换与写入
在获取到原始数据后,需要对其进行初步清洗和转换,以便后续处理。以下是一些常见的数据清洗步骤:
-
字段映射:
- 将API返回的数据字段映射到目标系统所需的字段。例如,将
order_no
映射为目标系统中的订单编号。
- 将API返回的数据字段映射到目标系统所需的字段。例如,将
-
数据类型转换:
- 确保所有日期、数值等字段的数据类型符合目标系统要求。例如,将日期字符串转换为标准日期格式。
-
去重与校验:
- 根据配置的主键字段如
stockout_id
对数据进行去重。 - 校验关键字段是否为空或无效,如订单编号、仓库编号等。
- 根据配置的主键字段如
-
错误处理:
- 对于无法解析或缺失关键字段的数据记录,可以记录日志或发送告警,以便后续人工干预。
通过上述步骤,我们可以高效地从旺店通·企业奇门接口获取并处理出库单数据,为后续的数据集成工作打下坚实基础。
使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口的技术案例
在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。以下是一个具体的技术案例,展示如何通过轻易云数据集成平台配置元数据,实现这一过程。
1. 配置API接口元数据
首先,我们需要配置金蝶云星空API接口的元数据。以下是一个典型的元数据配置示例:
{
"api": "batchSave",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 20,
"method": "batchArraySave"
},
"request": [
{"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{src_order_no}"},
{"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"ZJDB10_SYS"},
{"field":"FBizType","label":"业务类型","type":"string","describe":"下拉列表","value":"NORMAL"},
{"field":"FTransferDirect","label":"调拨方向","type":"string","describe":"下拉列表","value":"GENERAL"},
{"field":"FTransferBizType","label":"调拨类型","type":"string","describe":"下拉列表","value":"InnerOrgTransfer"},
{"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
{"field":"FSettleOrgId","label":"结算组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
{"field":"FStockOutOrgId","label":"调出库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
{"field":"FOwnerTypeOutIdHead","label":"调出货主类型","type": "string", "describe": "多类别基础资料列表", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}},
{"field": "FOwnerOutIdHead", "label": "调出货主", "type": "string", "describe": "多类别基础资料", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}},
{"field": "FStockOrgId", "label": "调入库存组织", "type": "string", "describe": "组织", "parser":{"name" : "ConvertObjectParser" , "params" : "FNumber"}},
{"field" : "FSETTLECURRID" , "label" : "结算币别" , "type" : "string" , "describe" : "基础资料", "parser":{"name" : "ConvertObjectParser" , "params" : "FNumber"}},
{"field" : "FDate", "label" : 日期, "type:" string, describe: 日期},
{"field: FNote, label: 备注, type: string, describe: 多行文本},
{
field: FBillEntry,
label: 明细信息,
type: array,
describe: 1,
children: [
{ field: FMaterialId, label: 物料编码, type: string, describe: 基础资料, parser: { name: ConvertObjectParser, params: FNumber }, value: {{details_list.goods_no}}, parent: FBillEntry },
{ field: FCMKBarCode, label: 零售条形码, type: string, describe: 文本, parent: FBillEntry },
{ field: FQty, label: 调拨数量, type:string , describe:数量, value:{{details_list.goods_count}},parent:FBillEntry},
{ field:FSrcStockId,label:调出仓库,type:string,describe:基础资料,parser:{name:ConvertObjectParser,params:FNumber},value:{src_order_no},parent:FBillEntry},
{ field:FSrcStockLocId,label:调出仓位,type:string ,describe维度关联字段,parser:{name:"ConvertObjectParser",params:"FNumber"},parent:"FBillEntry"},
{ field:"FDestStockId", label:"调入仓库", type:"string", describe:"基础资料", parser:{ name:"ConvertObjectParser", params:"FNumber"}, value:"CK006", parent:"FBillEntry"},
{ field:"FDestStockLocId", label:"调入仓位", type:"string", describe:"维度关联字段", parser:{ name:"ConvertObjectParser", params:"FNumber"}, parent:"FBillEntry"},
{ field:"FNoteEntry", label:"备注", type:"string", describe:"多行文本", parent:"FBillEntry"},
{ field:"FISFREE", label:"赠品", type:"string", describe:"复选框", parent:"FBillEntry"}
]
},
{ label :旺店通调拨单号 , field : F_wk_WDTDH , type : string , value :{src_order_no}},
{ label :实际调入仓库 , field : F_wk_SJDRCK , type : string , value : KC-001-WDT , parser :{ name : ConvertObjectParser , params : FNumber}},
{ label :实际调出仓库 , field : F_wk_SJDCCK , type : string , value :{warehouse_no}, parser :{ name : ConvertObjectParser , params : FNumber}}
],
otherRequest:[
{
field :"FormId",
label :"业务对象表单Id",
type :"string",
describe :"必须填写金蝶的表单ID如:PUR_PurchaseOrder",
value :"STK_TransferDirect"
},
{
field :"IsAutoSubmitAndAudit",
label :"提交并审核",
type :"bool",
value :"true"
},
{
field :"IsVerifyBaseDataField",
label :"验证基础资料",
type :"bool",
describe :"是否验证所有的基础资料有效性,布尔类,默认false(非必录)",
value :"false"
},
{
field :"Operation",
label :"执行的操作",
type :"string",
value :"Save"
}
]
}
2. 数据提取与清洗
在ETL过程中,我们首先需要从源系统提取原始数据,并进行必要的数据清洗和预处理。例如,从源系统中提取订单编号、物料编码、数量等信息,并确保这些数据符合目标系统的要求。
3. 数据转换
接下来,我们将清洗后的数据按照金蝶云星空API接口的要求进行转换。通过配置元数据中的parser
字段,可以实现对特定字段的数据转换。例如,将src_order_no
转换为目标系统中的FBillNo
字段,将details_list.goods_no
转换为FBillEntry.FMaterialId
字段等。
示例代码
以下是一个简单的数据转换示例:
def transform_data(source_data):
transformed_data = []
for order in source_data:
transformed_order = {
'FBillNo': order['src_order_no'],
'FBillTypeID': {'FNumber': 'ZJDB10_SYS'},
'FBizType': 'NORMAL',
'FTransferDirect': 'GENERAL',
'FTransferBizType': 'InnerOrgTransfer',
'FSaleOrgId': {'FNumber': order['sale_org_id']},
'FSettleOrgId': {'FNumber': order['settle_org_id']},
'FStockOutOrgId': {'FNumber': order['stock_out_org_id']},
'FOwnerTypeOutIdHead': {'FNumber': order['owner_type_out_id_head']},
'FOwnerOutIdHead': {'FNumber': order['owner_out_id_head']},
'FStockOrgId': {'FNumber': order['stock_org_id']},
'FSETTLECURRID': {'FNumber': order['settle_curr_id']},
'FDate': order['date'],
'FBillEntry': [
{
'FMaterialId': {'FNumber': detail['goods_no']},
'FCMKBarCode': detail['barcode'],
'FQty': detail['goods_count'],
'FSrcStockId': {'src_order_no'},
'FDestStockId': {'CK006'}
} for detail in order['details_list']
],
# Additional fields...
}
transformed_data.append(transformed_order)
return transformed_data
4. 数据加载
最后,将转换后的数据通过轻易云平台提供的API接口写入到金蝶云星空系统中。我们可以使用HTTP POST请求将数据发送到目标系统:
import requests
def load_data(transformed_data):
url = "<金蝶云星空API地址>"
headers = {
'Content-Type': 'application/json'
}
response = requests.post(url, json=transformed_data, headers=headers)
if response.status_code == 200:
print("Data loaded successfully")
else:
print("Failed to load data:", response.text)
# 示例调用
source_data = get_source_data() # 从源系统获取原始数据
transformed_data = transform_data(source_data) # 转换数据
load_data(transformed_data) # 加载到目标系统
通过上述步骤,我们成功地完成了从源系统到金蝶云星空系统的数据ETL过程。每个环节都严格按照元数据配置进行,以确保数据在不同系统之间无缝对接和高效传输。