金蝶盘亏单 => 旺店通委外出库单(云仓)系统集成案例分享
在复杂的业务环境中,如何确保各个系统之间的数据流转准确无误,是众多企业亟待解决的问题。本文将聚焦于一个具体的系统对接集成案例:从金蝶云星空数据集成到旺店通·企业奇门,通过技术细节探讨如何高效、可靠地实现这一过程。
此次集成方案主要涉及以下两个关键API接口:
- 金蝶云星空数据获取接口:
executeBillQuery
- 旺店通·企业奇门数据写入接口:
wdt.vip.wms.stockinout.order.push
数据抓取与快速写入
首先,我们使用金蝶云星空的executeBillQuery
API进行定时且可靠的数据抓取。这一过程需处理分页和限流问题,以确保大规模数据可以顺利提取。为解决此类问题,采用了一种高效的异常处理机制和错误重试机制,当出现请求失败或超时时,可以自动再次尝试,从而保证不漏单、不丢单。
紧接着,成功获取的数据需要经过格式转换后批量写入到旺店通·企业奇门。这一过程中,特别关注了两者之间的数据格式差异,比如时间格式、数值单位等,并通过自定义映射规则加以解决。因此,在调用wdt.vip.wms.stockinout.order.push
API时,实现了大批量、高性能地提交数据,大幅提升了效率。
下一步,将详细阐述上述环节中的每个技术要点,包括API调用示例代码、参数配置以及日志记录等内容,为您提供全面深入的技术指导。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的executeBillQuery
接口,获取盘亏单的数据,并进行初步加工。
接口配置与请求参数
首先,我们需要配置接口的元数据。以下是我们使用的元数据配置:
{
"api": "executeBillQuery",
"method": "POST",
"number": "FBillNo",
"id": "FBillEntry_FEntryID",
"pagination": {
"pageSize": 500
},
"idCheck": true,
"request": [
{"field":"FBillEntry_FEntryID","label":"FEntryID","type":"string","value":"FBillEntry_FEntryID"},
{"field":"FID","label":"实体主键","type":"string","value":"FID"},
{"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"},
{"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"},
{"field":"FStockOrgId_FNumber","label":"库存组织","type":"string","value":"FStockOrgId.FNumber"},
{"field":"FDate","label":"日期","type":"string","value":"FDate"},
{"field":"FBillTypeID","label":"单据类型","type":"string","value":"FBillTypeID"},
{"field":"FStockerId","label":"仓管员","type":"string","value":"FStockerId"},
{"field":"FCreatorId","label":"创建人","type":"string","value":"FCreatorId"},
{"field":"FCreateDate","label":"创建日期","type":"string","value":"FCreateDate"},
{"field":"FModifierId","label":"最后修改人","type":"string","value":"FModifierId"},
{"field":"FModifyDate","label":"最后修改日期","type":"string","value":"FModifyDate"},
{"field": "FApproverId", "label": "审核人", "type": "string", "value": "FApproverId"},
{"field": "FApproveDate", "label": "审核日期", "type": "string", "value": "FApproveDate"},
{"field": "FNoteHead", "label": "备注", "type": "string", "value": "FNoteHead"},
{"field": "FMaterialId_FNumber", "label": "物料编码", "type": "string", "value": "FMaterialId.FNumber"},
{"field": "FUnitID", "label": "单位", "type": "string", "value": "FUnitID"},
{"field": "FAcctQty", "label": “账存数量”, “type”: “string”, “value”: “FAcctQty”},
{"field”: “FLossQty”, “label”: “盘亏数量”, “type”: “string”, “value”: “FLossQty”},
// ...其他字段省略
],
// ...其他配置省略
}
该元数据配置定义了请求参数、分页信息以及需要查询的字段。特别注意以下几点:
- 分页参数:
pageSize
设置为500,确保每次请求最多返回500条记录。 - 过滤条件:通过
FilterString
字段设置过滤条件,例如只查询特定库存组织和仓库的数据。 - 字段映射:定义了从金蝶云星空返回的数据字段到本地系统字段的映射关系。
调用接口
在轻易云平台上,我们可以通过以下步骤调用金蝶云星空的executeBillQuery
接口:
- 构建请求体:根据元数据配置构建请求体,包括分页参数、过滤条件等。
- 发送请求:使用POST方法发送HTTP请求到金蝶云星空API。
- 处理响应:解析响应数据,并根据需要进行初步加工。
以下是一个示例代码片段,用于构建和发送请求:
import requests
import json
# 构建请求体
request_body = {
'FormId': 'STK_StockCountLoss',
'FieldKeys': ','.join([req['field'] for req in metadata['request']]),
'FilterString': metadata['otherRequest'][3]['value'],
'Limit': metadata['pagination']['pageSize'],
'StartRow': 0,
}
# 设置请求头
headers = {
'Content-Type': 'application/json',
}
# 发起POST请求
response = requests.post(
url='https://api.kingdee.com/executeBillQuery',
headers=headers,
data=json.dumps(request_body)
)
# 检查响应状态码
if response.status_code == 200:
data = response.json()
# 数据处理逻辑...
else:
print(f"Error: {response.status_code}")
数据加工
获取到原始数据后,我们需要对其进行初步加工,以便后续的数据转换与写入阶段。例如,可以对盘亏数量(FLossQty)进行汇总,或者根据业务需求筛选特定状态的单据。
以下是一个简单的数据加工示例:
# 假设data包含从API返回的数据列表
processed_data = []
for record in data:
if record['FLossQty'] > 0:
processed_record = {
'单据编号': record['FBillNo'],
'物料编码': record['FMaterialId_FNumber'],
'盘亏数量': record['FLossQty'],
# ...其他字段映射
}
processed_data.append(processed_record)
# 输出处理后的数据
print(json.dumps(processed_data, indent=2, ensure_ascii=False))
通过上述步骤,我们成功调用了金蝶云星空的executeBillQuery
接口,并对返回的数据进行了初步加工。这为后续的数据转换与写入奠定了基础。
数据集成案例:金蝶盘亏单到旺店通委外出库单(云仓)
在数据集成的生命周期中,数据转换与写入是关键步骤之一。本文将深入探讨如何利用轻易云数据集成平台,将金蝶盘亏单的数据转换为旺店通·企业奇门API接口所能接收的格式,并最终写入目标平台。
API接口元数据配置
我们使用的API接口为wdt.vip.wms.stockinout.order.push
,其主要作用是将处理后的数据推送到旺店通系统。以下是该接口的元数据配置:
{
"api": "wdt.vip.wms.stockinout.order.push",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"operation": {
"method": "merge",
"field": "FBillNo,FDate,FStockId_FNumber",
"bodyName": "details_listss",
"bodySum": ["F_UHZG_JJQty"],
"header": ["FBillNo", "FStockId_FNumber", "FBillTypeID", "Fnote"],
"body": ["FMaterialId_FNumber", "FQty", "FPrice", "FLOT", "F_UHZG_JJQty"]
},
"request": [
{
"field": "api_outer_no",
"label": "接口外部单号",
"type": "string",
"describe": "调用本接口时推送的唯一单据编号,避免重复推送数据",
"value": "{FBillNo}"
},
{
"field": "warehouse_no",
"label": "仓库编号",
...
数据请求与清洗
在数据转换之前,我们需要先从金蝶系统中获取盘亏单的数据。这一步骤涉及对原始数据进行清洗和预处理,以确保其符合目标系统的要求。
{
// 示例请求参数
FBillNo: 'PKD123456',
FDate: '2023-10-01',
FStockId_FNumber: 'WH001',
FBillTypeID: '盘亏单',
Fnote: '库存调整',
details_listss: [
{
FMaterialId_FNumber: 'MAT001',
FQty: 100,
FPrice: 10.5,
FLOT: 'BATCH001',
F_UHZG_JJQty: 95
}
]
}
数据转换与写入
在清洗后的数据基础上,我们需要将其转换为旺店通API能够接受的格式。这里我们利用元数据配置中的operation
字段来定义转换规则。
-
头部信息映射:
FBillNo
->api_outer_no
FStockId_FNumber
->warehouse_no
FBillTypeID
->order_type
Fnote
->remark
-
货品明细映射:
details_listss.FMaterialId_FNumber
->spec_no
details_listss.F_UHZG_JJQty
->num
details_listss.FPrice
->price
details_listss.FLOT
->batch_no
以下是最终生成的请求体示例:
{
api_outer_no: 'PKD123456',
warehouse_no: 'WH001',
order_type: '1', // 出库类型
auto_check: '1', // 自动审核
remark: '库存调整',
goods_list: [
{
spec_no: 'MAT001',
num: 95,
price: 10.5,
batch_no: 'BATCH001'
}
]
}
接口调用
通过轻易云平台,我们可以直接使用POST方法将上述请求体发送到旺店通·企业奇门API接口,实现数据的写入。
const axios = require('axios');
axios.post('https://api.wangdian.cn/openapi2/wdt.vip.wms.stockinout.order.push', {
api_outer_no: 'PKD123456',
warehouse_no: 'WH001',
order_type: '1',
auto_check: '1',
remark: '库存调整',
goods_list: [
{
spec_no: 'MAT001',
num: 95,
price: 10.5,
batch_no: 'BATCH001'
}
]
})
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
通过以上步骤,我们成功地将金蝶盘亏单的数据转换并写入到旺店通系统,实现了两个异构系统间的数据无缝对接。这不仅提高了业务流程的效率,也确保了数据的一致性和准确性。