汤臣倍健营销云数据集成到金蝶云星辰V2案例分享
在本次技术案例中,我们探讨的是如何将汤臣倍健营销云的数据高效地集成到金蝶云星辰V2系统中。具体的应用场景为“退货入库-(Life-Space)广州闽健”,需要实现批量退货订单数据的实时写入和处理。整个方案涉及多个关键技术点,包括API接口调用、数据格式转换、分页与限流处理等。
首先,汤臣倍健营销云提供了一个获取销售退货订单信息的API:/erp/api/order/query/saleReturnOrder
,用于从源系统抓取相关数据。这些数据需要批量、高效地传输至目标系统金蝶云星辰V2,而这一过程则主要依赖于其提供的数据写入API:/jdy/v2/scm/sal_in_bound
。
为了确保整个数据流动过程不漏单且具备高吞吐能力,我们从以下几个方面着手:
-
高吞吐量支持
通过优化数据收集与发送机制,实现大量销售退货订单的数据快速抓取和写入。在轻易云平台配置时使用自定义调度策略,有效提高了过境节点的数据处理效率,并确保任务能够在短时间内完成。此外,通过平台所提供的集中监控和告警功能,可以实时跟踪每一次集成任务的状态,从而及时发现并解决异常情况。 -
分页与限流问题处理
由于汤臣倍健营销云接口存在分页限制,在获取大批量历史订单时我们采用逐页抓取并行化方式以减少延迟。同时,通过设置适当的访问频率来规避可能出现的API限流问题。一旦检测到出错或超时,则会触发重试机制,以保障所有待同步数据最终能成功传递至目标系统。 -
定制化映射与转换逻辑
不同系统间常常面临着数据结构差异,因此自定义字段映射及转换逻辑成为必不可少的一环。例如,将源头中的JSON格式解析后,根据业务要求重新组合生成符合金蝶云星辰V2规范的新JSON对象。这一过程中借助轻易云可视化工具不仅简化了开发步骤,还增强了配置可读性和维护便利性。 -
异常监控及日志记录
综合利用轻易平台自带的数据质量监控组件,对接过程中对各类异常情况进行探测,比如捕获无效格式输入或连接失败事件等。同时结合精细化日志记录功能,不但能保留全流程操作痕迹,还有助于事后审计分析,为进一步优化提供依据。
以上
调用源系统汤臣倍健营销云接口/erp/api/order/query/saleReturnOrder获取并加工数据
在数据集成生命周期的第一步中,调用源系统的API接口是关键步骤之一。本文将详细探讨如何通过轻易云数据集成平台调用汤臣倍健营销云的/erp/api/order/query/saleReturnOrder
接口,获取并加工退货入库数据。
接口概述
该接口用于查询销售退货订单信息,支持多种查询条件。请求方法为POST,响应为JSON格式的数据。以下是元数据配置的详细说明:
- API路径:
/erp/api/order/query/saleReturnOrder
- 请求方法: POST
- 主要字段:
tenantId
: 经销商ID(必填)yxyNumber
: 营销云销售订单号(可选)number
: 系统订单号(可选)status
: 订单状态(默认值为1,即已审核)beginTime
: 开始时间(必填)endTime
: 结束时间(必填)pageNo
: 页码(默认值为1)pageSize
: 每页条数(默认值为30)timeType
: 时间段标志(默认值为1,即最后更新时间)
请求参数配置
在实际操作中,需要根据业务需求配置请求参数。以下是一个典型的请求参数配置示例:
{
"tenantId": "34cc4109705e4c058b7b3b0352e57d31",
"status": "1",
"beginTime": "{{LAST_SYNC_TIME|datetime}}",
"endTime": "{{CURRENT_TIME|datetime}}",
"pageNo": "1",
"pageSize": "30",
"timeType": "1"
}
- tenantId: 经销商ID,这里使用固定值
34cc4109705e4c058b7b3b0352e57d31
。 - status: 查询已审核的订单,值为
1
。 - beginTime和endTime: 分别表示查询时间段的开始和结束时间,使用动态变量
{{LAST_SYNC_TIME|datetime}}
和{{CURRENT_TIME|datetime}}
来获取上次同步时间和当前时间。 - pageNo和pageSize: 分页参数,分别表示页码和每页条数。
- timeType: 使用最后更新时间进行查询,值为
1
。
数据清洗与转换
获取到原始数据后,需要进行清洗与转换,以满足目标系统的数据要求。以下是一个简单的数据清洗与转换示例:
import json
# 假设response_data是从API获取到的原始数据
response_data = '''
{
"data": [
{
"order_id": "XOUT0000000293",
"order_status": "已审核",
"created_time": "2023-10-01 12:00:00",
...
},
...
]
}
'''
# 将JSON字符串解析为Python字典
data = json.loads(response_data)
# 提取并转换所需字段
cleaned_data = []
for order in data['data']:
cleaned_order = {
'订单编号': order['order_id'],
'状态': order['order_status'],
'创建时间': order['created_time'],
# 添加其他需要的字段转换
}
cleaned_data.append(cleaned_order)
# 输出清洗后的数据
print(json.dumps(cleaned_data, ensure_ascii=False, indent=4))
在这个示例中,我们从原始响应数据中提取了订单编号、状态和创建时间,并进行了必要的字段重命名和格式调整。
自动填充响应
轻易云平台提供了自动填充响应功能,可以简化数据处理流程。在元数据配置中设置autoFillResponse
为true,即可启用此功能。这意味着平台会自动解析API响应,并将其映射到预定义的数据模型中,从而减少手动处理的工作量。
实时监控与调试
为了确保数据集成过程顺利进行,可以利用轻易云平台提供的实时监控功能,对每个环节进行跟踪和调试。如果出现错误或异常,可以通过日志和监控界面快速定位问题并进行修复。
通过以上步骤,我们可以高效地调用汤臣倍健营销云的API接口,获取并加工销售退货订单数据,为后续的数据处理和分析奠定基础。
轻易云数据集成平台:将源平台数据ETL转换为金蝶云星辰V2 API接口格式
在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星辰V2 API接口所能够接收的格式,并最终写入目标平台。这一过程涉及到对数据的清洗、转换和加载(ETL),确保数据在目标系统中能够正确解析和使用。
数据请求与清洗
首先,从源平台获取原始数据。假设我们从源平台获得的数据包含以下字段:
- auditTime
- extCusCode
- remark
- shippingAddress
- contacts
- phone
- itemList(包含多个商品条目,每个条目包含opernumber、taxunitprice、extMaterialNo、_Flot、remark、_Fmfg、_Fexp等字段)
数据转换与写入
接下来,我们需要将这些数据转换为金蝶云星辰V2 API接口所能接受的格式。根据元数据配置,我们可以将这些字段映射到API请求中。
{
"api": "/jdy/v2/scm/sal_in_bound",
"effect": "EXECUTE",
"method": "POST",
"number": "id",
"id": "id",
"name": "id",
"idCheck": true,
"request": [
{
"field": "bill_source",
"label": "来源",
"type": "string",
"value": "ISV"
},
{
"field": "bill_date",
"label": "出库日期",
"type": "string",
"describe": "出库日期,格式:2019-01-01",
"value": "{{auditTime|date}}"
},
{
"field": "customer_id",
"label": "客户",
"type": "string",
"describe": "",
// 通过外部系统查找客户ID
// 示例:_findCollection find id from da56aa19-b7b1-3e23-9962-ae3977d4fe83 where number={extCusCode}
// 这里需要实现一个函数_findCollection来完成此操作。
// 伪代码:customer_id = _findCollection("da56aa19-b7b1-3e23-9962-ae3977d4fe83", extCusCode)
// value: customer_id
},
{
...
}
]
}
商品分录的处理
对于商品分录,我们需要遍历itemList中的每个条目,将其转换为API接口所需的格式:
{
...
{
field: 'material_entity',
label: '商品分录',
type: 'array',
describe: '商品分录',
value: 'itemList',
children: [
{
field: 'material_id',
label: '商品id',
type: 'string',
describe: '',
// 示例:_findCollection find id from 853c1661-2fc6-3120-b8d1-c4bda3aa1b94 where number={extMaterialNo}
// value: material_id
},
{
field: 'stock_id',
label: '仓库id',
type: 'string',
describe: '',
value: '1545734377240019968'
},
{
field: 'qty',
label: '数量',
type: 'int',
describe: '',
value: '{{itemList.opernumber}}'
},
...
]
}
}
自定义字段
最后,还需要处理自定义字段:
{
...
{
field: 'custom_field',
label: '自定义字段',
type: 'object',
children: [
{
field: 'custom_field__1__2uvf7udrj2ih',
label: '营销云单号',
type: 'string',
value: '{number}'
},
{
field: 'custom_field__1__2xf936gyblr4',
label: '下单人',
type: 'string',
value: '{number}'
}
]
}
}
完整API请求示例
最终生成的API请求示例如下:
{
"/jdy/v2/scm/sal_in_bound": {
method:"POST",
data:{
bill_source:"ISV",
bill_date:"2023-10-10",
customer_id:"1234567890",
remark:"备注信息",
contact_address:"广州市天河区",
contact_linkman:"张三",
contact_phone:"13800138000",
dept_number:"100000",
material_entity:[
{material_id:"9876543210", stock_id:"1545734377240019968", qty:"10", tax_price:"100.00", is_free:false, unit_id:"12345", batch_no:"BATCH12345", comment:"行备注信息", kf_date:"2023-10-01", valid_date:"2024-10-01", kf_period:"365", kf_type:"3"}
],
custom_field:{
custom_field__1__2uvf7udrj2ih:"订单12345",
custom_field__1__2xf936gyblr4:"李四"
}
}
}
}
通过这种方式,我们可以确保源平台的数据经过清洗和转换后,能够无缝地写入金蝶云星辰V2系统,实现不同系统间的数据无缝对接。