汤臣倍健营销云数据集成到金蝶云星辰V2:采购入库同步(杭州佰健盛吉)
在“采购入库同步(杭州佰健盛吉)”项目中,我们面临的主要挑战是如何将汤臣倍健营销云的数据高效、准确地集成到金蝶云星辰V2系统。这个过程涉及多个技术要点,包括接口调用、数据格式转换、限流处理及错误重试机制等。
首先,确保集成过程中数据不漏单至关重要。我们使用了轻易云平台的定时任务功能,可靠抓取汤臣倍健营销云API /erp/api/order/query/purInWarehsOrder
提供的采购入库订单数据,并实时监控每个请求响应状态。这不仅保证了抓取操作按预期执行,还能在出现异常时及时告警和记录日志。
接下来,为解决大量数据快速写入金蝶云星辰V2的问题,我们借助批量处理技术,通过 /jdy/v2/scm/pur_inbound
接口,将从汤臣倍健获取的数据以最优方式导入。这种批量处理不仅提升了效率,也有效规避了多次小规模请求带来的性能损耗。
分页和限流方面,由于汤臣倍健API有严格的访问频率限制,我们设计了一套智能分页策略,同时配合限流算法,以平稳且高效的方式完成大规模数据抓取。另外,针对接口返回的数据可能存在嵌套结构或字段名差异等问题,我们进行了灵活的数据格式转换与映射,实现两端系统间的数据兼容性。
最后,在实际运行环境中,不可避免会遇到对接异常。对此,我们实现了一整套错误重试机制,一旦检测到错误,会自动进行重新尝试,并记录详细错误日志,这为后续排障提供了有力保障。
本文将在后续章节详细阐述具体的实施步骤及注意事项,深入探讨各环节中的关键技术细节与解决方案。
调用源系统汤臣倍健营销云接口/erp/api/order/query/purInWarehsOrder获取并加工数据
在数据集成生命周期的第一步,我们需要从源系统获取数据,并对其进行初步加工。本文将详细探讨如何通过调用汤臣倍健营销云的接口 /erp/api/order/query/purInWarehsOrder
来实现这一过程。
接口概述
该接口用于查询采购入库订单信息,支持多种查询条件和分页功能。我们将使用POST方法进行请求,并根据元数据配置中的字段进行参数设置。
请求参数配置
根据元数据配置,以下是请求参数的详细说明:
tenantId
(经销商id):必填项,用于标识经销商身份。例如:08e2fd9d074f4ef7b5e6416b74d006d6
。yxyNumber
(营销云销售订单号):可选项,传此参数时其他时间状态等条件无效。number
(系统订单号):可选项,传此参数时其他时间状态等条件无效。status
(订单状态):可选项,0表示未审核,1表示已审核(已出库)。默认值为1。beginTime
(开始时间):必填项,如果不传单号,此字段必填。格式为0000-00-00
或0000-00-00 00:00:00
。endTime
(结束时间):必填项,如果不传单号,此字段必填。格式为0000-00-00
或0000-00-00 00:00:00
。pageNo
(页码):可选项,默认值为1。pageSize
(每页条数):可选项,默认值为30。timeType
(时间段标志):可选项,0表示基于创建时间查询,1表示基于更新时间查询。默认值为1。
以下是一个示例请求体:
{
"tenantId": "08e2fd9d074f4ef7b5e6416b74d006d6",
"status": "1",
"beginTime": "{{LAST_SYNC_TIME|datetime}}",
"endTime": "{{CURRENT_TIME|datetime}}",
"pageNo": "1",
"pageSize": "30",
"timeType": "1"
}
数据清洗与转换
在获取到原始数据后,我们需要对其进行清洗和转换,以确保数据质量和一致性。以下是一些常见的数据清洗操作:
- 字段映射:将源系统中的字段映射到目标系统所需的字段。例如,将源系统的订单号映射到目标系统的订单编号。
- 数据过滤:根据特定条件过滤掉不需要的数据。例如,根据元数据配置中的条件
[{"field":"itemList.materialNumber","logic":"notlike","value":"F.A"}]
来过滤掉物料编号包含“F.A”的记录。 - 格式转换:将日期、金额等字段转换为目标系统所需的格式。例如,将日期格式从“YYYY-MM-DD”转换为“YYYYMMDD”。
自动填充响应
根据元数据配置中的 autoFillResponse: true
设置,我们可以自动填充响应结果。这意味着在处理完数据后,可以直接将其写入目标系统,无需手动干预。
实践案例
假设我们需要同步最近一天内所有已审核的采购入库订单信息,以下是具体操作步骤:
-
构建请求体:
{ "tenantId": "08e2fd9d074f4ef7b5e6416b74d006d6", "status": "1", "beginTime": "{{LAST_SYNC_TIME|datetime}}", "endTime": "{{CURRENT_TIME|datetime}}", "pageNo": "1", "pageSize": "30", "timeType": "1" }
-
发送请求: 使用POST方法调用接口
/erp/api/order/query/purInWarehsOrder
并传递上述请求体。 -
接收响应并处理: 接收返回的数据,对其进行清洗、转换,并根据需要过滤掉不符合条件的记录。
-
写入目标系统: 将处理后的数据写入目标系统,实现数据同步。
通过以上步骤,我们可以高效地从汤臣倍健营销云获取采购入库订单信息,并对其进行加工处理,为后续的数据集成工作打下坚实基础。
使用轻易云数据集成平台进行ETL转换并写入金蝶云星辰V2API接口
在数据集成生命周期的第二步,我们需要将已经从源平台获取并清洗的数据,进行ETL(提取、转换、加载)处理,并将其转化为目标平台——金蝶云星辰V2API接口能够接收的格式,最终写入目标平台。以下是具体的技术实现过程。
1. 数据请求与清洗
在此步骤中,我们已经从源系统获取了原始数据,并通过轻易云数据集成平台进行了初步清洗。这些数据现已准备好进行进一步的ETL处理。
2. 数据转换与写入
我们将使用元数据配置来定义如何将清洗后的数据转换为金蝶云星辰V2API接口所需的格式,并通过POST请求将其写入目标平台。以下是详细的配置和处理步骤。
2.1 配置元数据
根据提供的元数据配置,我们需要将采购入库单据同步到金蝶云星辰V2。以下是关键字段及其对应关系:
- 单据日期 (
bill_date
): 从auditTime
字段提取并格式化为日期字符串。 - 单据编码 (
bill_no
): 直接映射。 - 业务类型 (
transtype
): 固定值2
。 - 供应商编码 (
supplier_id
): 固定值1325910076988351488
。 - 备注 (
remark
): 拼接字符串,包含原始备注信息和营销云编号。 - 商品分录 (
material_entity
): 包含多个子字段,如商品编码、仓库编码、数量等。
2.2 数据转换逻辑
为了确保数据能够被目标API正确解析,我们需要对部分字段进行特殊处理。例如:
- 单位 (
unit_id
): 使用查找函数_findCollection find base_unit_id from ... where number={extMaterialNo}
根据商品编码查找对应的单位ID。 - 含税单价 (
tax_price
): 使用自定义函数计算{{itemList.taxlastmoney}}/{{itemList.opernumber}}
。 - 保质期类型 (
kf_type
) 和 保质期天数 (kf_period
): 固定值分别为1
和730
。
2.3 构建POST请求
根据元数据配置,构建POST请求体如下:
{
"bill_date": "{{auditTime|date}}",
"bill_no": "{{billNo}}",
"transtype": "2",
"supplier_id": "1325910076988351488",
"remark": "{remark}-来自营销云-{yxyNumber}",
"material_entity": [
{
"material_number": "{extMaterialNo}",
"stock_id": "1320319159514457088",
"is_free": false,
"qty": "{{itemList.opernumber}}",
"unit_id": "_findCollection find base_unit_id from 395d1591-aee0-3f10-ad09-d5593167af48 where number={extMaterialNo}",
"batch_no": "{{itemList._Flot}}",
"kf_date": "{{itemList._Fmfg}}",
"kf_period": "730",
"valid_date": "{{itemList._Fexp}}",
"kf_type": "1",
"tax_price": "_function {{itemList.taxlastmoney}}/{{itemList.opernumber}}",
"cess": "{{itemList.cess}}",
"all_amount": "{{itemList.taxlastmoney}}"
}
]
}
2.4 执行POST请求
使用轻易云的数据集成平台执行上述POST请求,将构建好的JSON对象发送至金蝶云星辰V2API接口 /jdy/v2/scm/pur_inbound
。确保HTTP方法为POST,并且设置适当的头信息(如Content-Type: application/json)。
import requests
url = 'https://api.kingdee.com/jdy/v2/scm/pur_inbound'
headers = {'Content-Type': 'application/json'}
data = {
# 上述构建好的JSON对象
}
response = requests.post(url, headers=headers, json=data)
if response.status_code == 200:
print("Data successfully written to Kingdee Cloud.")
else:
print(f"Failed to write data: {response.status_code}, {response.text}")
通过以上步骤,我们完成了从源系统到目标系统的数据ETL转换和写入过程。这种方式不仅确保了数据的一致性和准确性,还极大地提高了业务流程的自动化程度。