金蝶分布式调出单=>旺店通调拨单(组织内)集成案例分享
在实际业务中,企业常常面临不同系统之间数据对接的挑战。本文将聚焦于一个具体的系统集成案例,即金蝶云星空的数据集成到旺店通·企业奇门,通过技术细节展示该方案如何实现无缝连接和高效数据处理。
接口调用与性能优化
在本次项目中,我们主要利用了两个核心API:金蝶云星空的executeBillQuery
接口用于获取分布式调出单数据,而旺店通·企业奇门则通过wdt.stock.transfer.push
接口进行相应数据写入。这一过程中,为确保高吞吐量的数据能够快速并准确地从金蝶云星空流向旺店通·企业奇门,多线程并行处理机制成为关键。
首先,执行定时任务来可靠地抓取金蝶云星空接口的数据是基础步骤之一。我们设置了一个高效、稳定且按需调整的计划任务,以便周期性地调用executeBillQuery
,抓取最新一批次的数据。这些批量获得的数据将在后续过程里迅速而安全地传输至目标系统。
分页与限流策略
鉴于大规模数据传输可能引发的一系列问题,我们制定了一套分页和限流策略,以保证服务端负载均衡和响应速度。在每一次API调用中,通过合理设定分页参数,使得请求压力有效分散,从而避免单个请求导致的大量资源消耗。同时,引入限流控制预防突增访问带来的冲击,对综合系统性能提高起到了显著作用。
数据格式转换及映射
不同系统间往往存在数据结构差异,在此之前,自定义转换逻辑显得尤为重要。针对具体需求,我们设计了一套适配器模式,将从金蝶云星空获取的信息转化为符合旺店通·企业奇门标准的数据格式。例如,根据业务需求对字段名称、类型及内容方法进行了必要调整,并编写自定义脚本完成这个过程,从而确保在各个环节上保持一致性与准确性,保障最终效果达到预期。
结合可视化工具设计整体流程图,更直观展现整个ETL流程,加强管理人员对当前操作状态的掌控力。同时借助集中监控和告警功能,实现实时跟踪各项任务状况,全盘了解潜在风险,并及时采取措施予以解决,有效提升了整套平台运行效率及业务透明度。
调用金蝶云星空接口executeBillQuery获取并加工数据
在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空接口executeBillQuery
来获取并加工数据。
接口配置与请求参数
首先,我们需要配置元数据,以便正确调用金蝶云星空的API接口。以下是元数据配置的关键部分:
{
"api": "executeBillQuery",
"method": "POST",
"number": "FBillNo",
"id": "FSTKTRSOUTENTRY_FEntryID",
"pagination": {
"pageSize": 500
},
"idCheck": true,
"request": [
{"field":"FSTKTRSOUTENTRY_FEntryID","label":"FEntryID","type":"string","value":"FSTKTRSOUTENTRY_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":"FTransferDirect","label":"调拨方向","type":"string","value":"FTransferDirect"},
{"field":"FNOTE","label":"备注","type":"string","value":"FNOTE"},
{"field":"FCreateDate","label":"创建日期","type":"string","value":"FCreateDate"},
{"field":"FApproveDate","label":"审核日期","type":"string","value":"FApproveDate"},
{"field": "FilterString", "label": "过滤条件", "type": "string", "describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=", "value": "FApproveDate>='{{LAST_SYNC_TIME|dateTime}}' and FTransferBizType = 'InnerOrgTransfer' and FOwnerID.FNumber = '7000'"}
],
"otherRequest":[
{"field": "Limit", "label": "最大行数", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_PAGE_SIZE}"},
{"field": "StartRow", "label": "开始行索引", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"}
]
}
请求构建与发送
在构建请求时,需要注意以下几个关键点:
- API Endpoint:
executeBillQuery
- HTTP Method:POST
- Pagination:每次请求的数据量设置为500条,通过
Limit
和StartRow
参数进行分页。 - FilterString:用于过滤特定条件的数据,例如:
FApproveDate >= '{{LAST_SYNC_TIME|dateTime}}' and FTransferBizType = 'InnerOrgTransfer' and FOwnerID.FNumber = '7000'
以下是一个示例请求体:
{
"FormId": "STK_TRANSFEROUT",
"FieldKeys": ["FID", ...],
...
}
数据清洗与转换
获取到原始数据后,下一步是对数据进行清洗和转换。清洗过程包括去除无效字段、处理缺失值等。转换过程则根据业务需求,将数据格式化为目标系统所需的结构。
例如,将日期格式从YYYY-MM-DD
转换为目标系统所需的格式,或将字段名映射为目标系统中的字段名。
数据写入
经过清洗和转换后的数据,需要写入到目标系统中。在本案例中,目标系统是旺店通调拨单(组织内)。可以通过轻易云平台提供的数据写入功能,将处理好的数据推送到旺店通。
实时监控与日志记录
在整个过程中,实时监控和日志记录是确保数据集成顺利进行的重要手段。轻易云平台提供了全面的监控和日志功能,可以帮助我们及时发现并解决问题。
通过上述步骤,我们可以高效地调用金蝶云星空接口获取并加工数据,为后续的数据处理和写入打下坚实基础。这不仅提升了业务透明度和效率,也确保了不同系统间的数据无缝对接。
基于轻易云数据集成平台的ETL转换:金蝶分布式调出单到旺店通调拨单
在数据集成生命周期中,ETL(提取、转换、加载)是一个至关重要的环节。本文将深入探讨如何使用轻易云数据集成平台,将金蝶分布式调出单的数据转换为旺店通·企业奇门API接口所能接收的格式,并最终写入目标平台。
API接口配置与元数据解析
在进行ETL转换之前,首先需要了解目标API接口的配置和元数据。本文涉及的目标平台是旺店通·企业奇门,其API接口为wdt.stock.transfer.push
,请求方法为POST。以下是关键元数据配置:
{
"api": "wdt.stock.transfer.push",
"method": "POST",
"idCheck": true,
"operation": {
"method": "merge",
"field": "FBillNo,FSrcStockID_FNumber,FDestStockID_FNumber",
"bodyName": "detail_list",
"header": ["FBillNo", "FSrcStockID_FNumber", "FDestStockID_FNumber", "FNOTE"],
"body": ["FMaterialID_FNumber", "F_UHZG_JJQty", "FEntryNote", "FLOT"]
},
"request": [
{"field":"outer_no","label":"外部单号","type":"string","describe":"外部单据唯一标识,用于避免同一数据重复推送","value":"{FBillNo}"},
{"field":"from_warehouse_no","label":"源仓库调出仓库","type":"string","describe":"货品被调出的仓库","value":"{FSrcStockID_FNumber}"},
{"field":"to_warehouse_no","label":"目标仓库调入仓库","type":"string","describe":"货品被调入的仓库","value":"{FDestStockID_FNumber}"},
{"field":"telno","label":"联系电话","type":"string","describe":"联系电话"},
{"field":"remark","label":"备注","type":"string","describe":"备注","value":"{FNOTE}"},
{"field":"transfer_type","label":"调拨类型","type":"string","describe":"0:分步调拨,1:快速调拨,默认是1"},
{"field":"mode","label":"调拨方式","type":"string","describe":"0:单品调拨,1:货位调拨;默认是0"},
{"field":"autocheck","label":"是否审核","type":"string","describe":"1:审核,0:不审核,默认为0","value":"1"},
{
"field": "skus",
"label": "货品列表节点",
"type": "array",
"describe": "调拨单货品列表节点",
"children": [
{"field": "spec_no", "label": "商家编码", "type": "string",
"describe": "ERP内单品唯一编码(SKU),代表单品(SKU)所有属性,并且为库存量出入计算最小单元。SKU概念介绍,单击这里,",
"value": "{{detail_list.FMaterialID_FNumber}}",
"parent": "skus"
},
{"field": "from_position_no",
"label": "调出货位",
"type": "string",
"describe": "(当mode为1时必传),不传值读ERP配置【入库开单货位优先级配置】,取默认货位、上一次入库货位、ZANCUN货位其中一个货位。",
"parent": 'skus'
},
{"field": 'to_position_no',
"label': '调入货位',
"type': 'string',
"describe': '(当mode为1时必传),不传值读ERP配置【入库开单货位优先级配置】,取默认货位、上一次入库货位、ZANCUN货位其中一个货位。',
"parent': 'skus'
},
{"field': 'num',
"label': '调拨数量',
"type': 'string',
"describe': '调拨数量',
"value': '{{detail_list.F_UHZG_JJQty}}',
'parent': 'skus'
},
{"field': 'remark',
"label': '明细备注',
"type': 'string',
"describe': '货品明细备注',
"value': '{{detail_list.FEntryNote}}',
'parent': 'skus'
},
{"field':'batch_no',
'label':'批次{{detail_list.FLOT}}',
type':'string'}
],
value:'detail_list'
}
],
otherRequest:[{"field':'transfer_info','label':'调拨单信息','type':'string'}]
}
数据请求与清洗
在ETL流程中,我们首先从金蝶系统中提取原始数据。这些数据可能包含多个字段和记录,需要进行初步清洗和过滤,以确保数据质量和一致性。例如:
{
FBillNo: 'D20231001',
FSrcStockID_FNumber: 'WH001',
FDestStockID_FNumber: 'WH002',
FNOTE: '',
detail_list: [
{
FMaterialID_FNumber: 'M001',
F_UHZG_JJQty: 10,
FEntryNote: '',
FLOT: ''
}
]
}
数据转换与写入
根据上述元数据配置,我们需要将清洗后的数据转换为目标API所需的格式。具体操作如下:
-
映射字段:
outer_no
对应FBillNo
from_warehouse_no
对应FSrcStockID_FNumber
to_warehouse_no
对应FDestStockID_FNumber
remark
对应FNOTE
-
设置默认值:
transfer_type
设置为1
(快速调拨)mode
设置为0
(单品调拨)autocheck
设置为1
(审核)
-
处理数组字段:
- 将
detail_list
中的每个条目映射到skus
节点下相应的字段。
- 将
最终生成的数据结构如下:
{
outer_no: 'D20231001',
from_warehouse_no: 'WH001',
to_warehouse_no: 'WH002',
telno: '',
remark: '',
transfer_type: '1',
mode: '0',
autocheck: '1',
skus: [
{
spec_no: 'M001',
from_position_no: '',
to_position_no: '',
num: '10',
remark: '',
batch_no:''
}
]
}
调用API接口
最后一步是将转换后的数据通过HTTP POST请求发送到旺店通·企业奇门API接口。以下是示例代码:
import requests
import json
url = "<API_ENDPOINT>"
headers = {
'Content-Type': 'application/json'
}
payload = {
# 上述生成的数据结构
}
response = requests.post(url, headers=headers, data=json.dumps(payload))
if response.status_code == 200:
print("Data pushed successfully")
else:
print("Failed to push data:", response.text)
总结
通过以上步骤,我们成功地实现了从金蝶分布式调出单到旺店通·企业奇门API接口的数据ETL转换。这不仅提高了数据处理效率,还确保了不同系统之间的数据一致性和准确性。在实际应用中,可以根据业务需求进一步优化和扩展该流程。