汤臣倍健营销云数据集成到金蝶云星辰V2的案例分享
在企业信息化运作中,数据接口的高效性和稳定性至关重要。本文将聚焦于一个具体的系统对接实例:汤臣倍健营销云的数据集成到金蝶云星辰V2。在这个项目中,我们成功实现了“仓库调拨-(Life-Space)杭州益倍盛”的全流程自动化。
为了确保整个数据整合过程中的无缝对接,我们采取了以下几个技术方案:
首先,为了保证从汤臣倍健营销云获取的数据不漏单,我们使用定时抓取任务来调用其API接口 /erp/api/order/query/borrowOrder
。通过设置合理的定时策略,可以确保每次调用都能捕捉到最新的数据变动。
其次,对于大量交易数据需要快速写入到金蝶云星辰V2的问题,我们优化了批量处理机制,并通过并行写入增加吞吐量。具体来说,通过调用API /jdy/v2/scm/inv_tfmove
,我们能够批量提交多个记录,从而有效提升系统性能。
此外,在处理分页和限流问题上,通过对汤臣倍健营销云接口返回值分析与限流管理策略,实现了业务请求的平滑度控制。例如,当检测到达到接口速率限制时,会自动进行重试操作,以避免请求失败带来的风险。
最后,不同系统之间常有数据格式差异,为此我们设计了一套自适应映射规则,使得两端的数据结构得以顺利转换。这一过程中还涉及错误重试机制,当出现异常情况时,可自动启动重试或告警通知,保障业务连续性。
以上方法不仅提高了整体运行效率,还极大地增强了系统鲁棒性。在后续内容中,将进一步探讨各个环节的详细实现步骤及关键技术点解析。
调用汤臣倍健营销云接口获取并加工数据的技术案例
在数据集成过程中,调用源系统的API接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用汤臣倍健营销云的/erp/api/order/query/borrowOrder
接口,获取并加工数据。
接口配置与请求参数
首先,我们需要配置API接口及其请求参数。根据提供的元数据配置,以下是关键的配置细节:
- API路径:
/erp/api/order/query/borrowOrder
- 请求方法:
POST
- 分页设置: 每页30条记录
- 定时任务: 每2小时执行一次,确保数据的及时更新
请求参数包括:
tenantId
: 经销商ID(必填)number
: 系统订单号(可选)status
: 订单状态(默认值为1,即已审核)beginTime
: 开始时间(基于更新时间查询)endTime
: 结束时间(基于更新时间查询)pageNo
: 页码(默认值为1)pageSize
: 每页条数(默认值为30)
请求参数示例
以下是一个典型的请求参数示例:
{
"tenantId": "08e2fd9d074f4ef7b5e6416b74d006d6",
"number": "",
"status": "1",
"beginTime": "{{DAYS_AGO_1|datetime}}",
"endTime": "{{CURRENT_TIME|datetime}}",
"pageNo": "1",
"pageSize": "30"
}
在这个示例中,我们没有传递具体的订单号,因此需要提供开始时间和结束时间来进行查询。
数据清洗与转换
获取到原始数据后,需要对其进行清洗和转换,以便后续处理和存储。以下是几个关键步骤:
-
字段映射与重命名:
- 将API返回的数据字段映射到目标系统所需的字段。
- 重命名字段以符合目标系统的数据规范。
-
数据过滤:
- 根据业务需求过滤掉不必要的数据。例如,只保留订单状态为已审核的数据。
-
格式转换:
- 将日期、时间等字段转换为目标系统所需的格式。
- 对数值字段进行单位转换或格式化处理。
数据写入
清洗和转换后的数据需要写入到目标系统中。这一步通常涉及调用目标系统的API接口或通过数据库连接进行批量插入操作。在轻易云平台上,可以通过配置相应的数据写入节点来实现这一过程。
异常处理与监控
在整个数据集成过程中,异常处理和监控也是不可忽视的重要环节。轻易云平台提供了实时监控功能,可以帮助我们及时发现并处理数据传输中的异常情况。例如:
- 网络异常: 重新尝试请求或切换备用网络。
- 数据异常: 对异常数据进行标记,并记录日志以便后续分析和处理。
- 接口响应超时: 增加超时重试机制,确保数据传输的可靠性。
通过以上步骤,我们可以高效地调用汤臣倍健营销云接口获取并加工数据,为后续的数据分析和业务决策提供坚实的数据基础。
使用轻易云数据集成平台进行ETL转换并写入金蝶云星辰V2API接口
在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL(提取、转换、加载)转换,并转为目标平台所能接收的格式。在本案例中,我们将数据转换为金蝶云星辰V2API接口所能接收的格式,并最终写入目标平台。以下是详细的技术实现过程。
API接口配置
首先,我们需要配置与金蝶云星辰V2API接口相关的元数据,以确保数据能够正确地传输和处理。以下是我们配置的元数据:
{
"api": "/jdy/v2/scm/inv_tfmove",
"effect": "EXECUTE",
"method": "POST",
"number": "1",
"autoCheck": "inv_tfmove_bill_order",
"id": "1",
"name": "1",
"idCheck": true,
"request": [
{
"field": "bill_date",
"label": "出库日期",
"type": "string",
"describe": "出库日期,格式:2019-01-01",
"value": "{created}"
},
{
"field": "trans_type",
"label": "业务类型",
"type": "string",
"describe": "1:同价调拨(默认),2:异价调拨",
"value": "1"
},
{
"field": "trans_fer_status",
"label": "调拨状态",
"type": "string",
"describe": "0:未出库(默认),1:未入库,2:部分入库,3:全部入库",
"value": "3"
},
{
"field": "remark",
"label": "单据备注",
"type": "string",
"describe":"单据备注",
“value”: “来自营销云{number}”
},
{
“field”: “material_entity”,
“label”: “商品分录”,
“type”: “array”,
“describe”: “商品编码”,
“value”: “itemList”,
“children”: [
{
“field”: “material_id”,
“label”: “商品”,
“type”: “string”,
“describe”:“商品”,
”value“: ”_findCollection find id from 395d1591-aee0-3f10-ad09-d5593167af48 where number={{itemList.helpCode}}”
},
{
”field“: ”in_stock_id“,
”label“: ”调入仓库“,
”type“: ”string“,
”describe“: ”调入仓库“,
”value“: ”_findCollection find id from f4dc9f0e-4ac1-3513-861b-a741c0e67f10 where number={{itemList.otherExtDepotCode}}“
},
{
”field“: ”out_stock_id“,
”label“: ”调出仓库“,
”type“: ”string“,
”describe“: ”调出仓库“,
”value“: ”_findCollection find id from f4dc9f0e-4ac1-3513-861b-a741c0e67f10 where number={{itemList.extDepotCode}}“
},
{
”field“: ”batch_no“,
”label“: ”批次号“,
type:“string“,
value:“{{itemList._Flot}}“
},
{
field:“kf_date“,
label:“生产日期“,
type:“string“,
value:“{{itemList._Fmfg}}“
},
{
field:“valid_date“,
label:“有效日期“,
type:“string“,
value:“{{itemList._Fexp}}“
},
{
field:“kf_period“,
label:“保质期天数“,
type:“string“,
describe:“调入仓位,启用了仓位管理则必填“,
value:“730“
},
{
field:“kf_type“,
label:“保质期单位“,
type:“string”,
describe:“保质期类型:1/天,2/月,3/年(保质期商品必填)”,
value:“1”
},
{
field:“qty”,
label:“数量”,
type:“string”,
describe:“数量”,
value:“{{itemList.opernumber}}”
},
{
field:“unit_id”,
label:“单位”,
type:“string”,
describe:“单位”,
value:“_findCollection find base_unit_id from 395d1591-aee0-3f10-ad09-d5593167af48 where number={{itemList.helpCode}}”
}
]
}
]
}
数据转换与写入过程
在数据转换过程中,我们需要将源平台的数据按照上述元数据配置进行映射和转换,以便符合金蝶云星辰V2API接口的要求。
-
提取源数据:
- 从源系统中提取原始数据,包括出库日期、业务类型、调拨状态、单据备注以及商品分录等信息。
-
字段映射:
- 将提取到的数据字段映射到目标API接口所需的字段。例如,将
created
字段映射到bill_date
,number
字段映射到remark
中的占位符等。 - 对于数组类型的数据,如
material_entity
中的商品分录,需要进一步处理每个子项的字段映射。
- 将提取到的数据字段映射到目标API接口所需的字段。例如,将
-
查找和替换:
- 利用元数据中的查找规则(如
_findCollection find id from ... where number=...
),根据源数据中的编码查找相应的ID值,并进行替换。 - 确保所有必填字段都已正确填充,例如保质期天数(
kf_period
)、保质期单位(kf_type
)等。
- 利用元数据中的查找规则(如
-
构建请求体:
- 根据映射和替换后的结果构建API请求体。确保请求体符合目标API接口的格式要求。
-
发送请求:
- 使用POST方法将构建好的请求体发送到金蝶云星辰V2API接口
/jdy/v2/scm/inv_tfmove
。 - 确认返回结果,确保数据成功写入目标平台。
- 使用POST方法将构建好的请求体发送到金蝶云星辰V2API接口
示例代码
以下是一个简化版的示例代码,用于展示如何使用Python实现上述过程:
import requests
import json
# 源数据示例
source_data = {
'created': '2023-10-01',
'number': '12345',
'itemList': [
{'helpCode': 'A001', 'otherExtDepotCode': 'D002', 'extDepotCode': 'D001', '_Flot': 'B001', '_Fmfg': '2023-09-01', '_Fexp': '2024-09-01', 'opernumber': '100'}
# 更多商品分录...
]
}
# 构建请求体
request_body = {
'bill_date': source_data['created'],
'trans_type': '1',
'trans_fer_status': '3',
'remark': f'来自营销云{source_data["number"]}',
'material_entity': []
}
for item in source_data['itemList']:
material_entry = {
'material_id': find_collection('395d1591-aee0-3f10-ad09-d5593167af48', item['helpCode']),
'in_stock_id': find_collection('f4dc9f0e-4ac1-3513-861b-a741c0e67f10', item['otherExtDepotCode']),
'out_stock_id': find_collection('f4dc9f0e-4ac1-3513-861b-a741c0e67f10', item['extDepotCode']),
'batch_no': item['_Flot'],
'kf_date': item['_Fmfg'],
'valid_date': item['_Fexp'],
'kf_period': '730',
'kf_type': '1',
'qty': item['opernumber'],
'unit_id': find_collection('395d1591-aee0-3f10-ad09-d5593167af48', item['helpCode'])
}
request_body['material_entity'].append(material_entry)
# 发送请求
response = requests.post(
url='https://api.kingdee.com/jdy/v2/scm/inv_tfmove',
headers={'Content-Type':'application/json'},
data=json.dumps(request_body)
)
# 检查响应
if response.status_code == 200:
print('Data successfully written to Kingdee Cloud')
else:
print(f'Failed to write data: {response.text}')
通过以上步骤,我们成功地将源平台的数据经过ETL转换后写入了金蝶云星辰V2API接口。这不仅提高了系统间的数据对接效率,还保证了数据的一致性和准确性。