新版订单-出库单-广州闽康:汤臣倍健营销云到金蝶云星辰V2的数据集成技术案例
在企业信息系统对接过程中,如何高效且准确地实现数据的集成,是一个普遍的挑战。本文将通过具体技术实现详细解析如何将汤臣倍健营销云的数据无缝对接到金蝶云星辰V2,通过这种方式,实现新版订单到出库单的全流程自动化管理。
首先需要解决的问题是如何确保不漏单地抓取汤臣倍健营销云中的数据。使用轻易云平台,我们可以定时调用其API /api/openapi/v1/erp/order/honour/agreement/header
来获取最新的订单数据,并处理其中分页和限流问题,从而保证数据抓取的完整性和及时性。
为了应对大量数据快速写入到金蝶云星辰V2的问题,我们采取了批量操作的方法。利用轻易云平台,可以将从汤臣倍健营销云获得的数据,按照一定规则进行批量处理后,写入至金蝶云接口 /jdy/v2/scm/sal_out_bound
中。这不仅大幅度提升了写入效率,还有效规避了因频繁请求导致系统性能下降的问题。
在整个集成过程中,不可避免会遇到各种异常情况。例如,在调用外部API时可能出现网络波动或返回错误。这需要我们设置一套完备的错误重试机制,以确保每一条合法记录最终都能成功传递。此外,对不同系统间的数据格式差异,也是我们要重点考虑并解决的问题。通过定制化的数据映射方法,将源端数据格式转换为目标系统要求的数据结构,这是顺利完成此项工作的关键环节之一。
实时监控与日志记录也是保障整个流程稳定运行的重要手段。在轻易云平台上配置合适参数,可以针对每个步骤进行精准监测,一旦发生异常立即报警并记录日志,方便事后分析与优化。
以上是针对本案例中部分核心技术点的一些分享,希望能够为相关开发者提供有益参考。在实际项目实施中,根据具体需求还有更多细节调整,这将在后续章节详述。
调用汤臣倍健营销云接口获取并加工数据
在数据集成生命周期的第一步,我们需要从源系统获取数据,并对其进行初步加工。本文将详细探讨如何调用汤臣倍健营销云的接口 /api/openapi/v1/erp/order/honour/agreement/header
,并对返回的数据进行处理。
接口调用配置
首先,我们需要配置API调用的元数据。根据提供的元数据配置,我们可以看到以下关键字段:
api
:/api/openapi/v1/erp/order/honour/agreement/header
method
:POST
effect
:QUERY
- 请求参数(request)包括:
orgId
(组织ID)page
(页码)id
(订单id)applyerId
(要货方id)supplierId
(供货方id)no
(订单号)distributionType
(分销类型)distributorId
(分销商id)orderStatus
(订单状态)- 等等
这些参数中,有些是固定值,有些则需要根据业务逻辑动态生成。
请求参数设置
在实际操作中,我们需要根据业务需求设置请求参数。例如,以下是一个典型的请求体:
{
"orgId": "7002337aae2e4af7b370beab389cb902",
"page": "1",
"orderStatus": "WAIT_DELIVERY,PART_DELIVERY,ALL_DELIVERY,WAIT_OUT_STORAGE,PART_OUT_STORAGE,ALL_OUT_STORAGE,PART_CONFIRM,CONFIRM,AUDIT_SUCCESS,FINISH",
"nature": "1",
"lastStartDt": "{{LAST_SYNC_TIME|datetime}}",
"lastEndDt": "{{CURRENT_TIME|datetime}}"
}
其中,lastStartDt
和 lastEndDt
使用了动态变量,分别表示上次同步时间和当前时间。这些变量可以通过轻易云平台的内置函数自动填充。
数据请求与清洗
发送请求后,我们会收到一组原始数据。接下来,需要对这些数据进行清洗和初步处理,以便后续的数据转换和写入步骤。
假设我们收到以下响应:
{
"data": [
{
"id": "12345",
"no": "ORD001",
"applyerId": "A001",
...
},
...
],
"total": 100,
...
}
我们需要提取并清洗这些数据,例如去除无效字段、格式化日期等。以下是一个简单的数据清洗示例:
def clean_data(raw_data):
cleaned_data = []
for item in raw_data['data']:
cleaned_item = {
'order_id': item['id'],
'order_no': item['no'],
'applyer_id': item['applyerId'],
# 添加其他必要字段
}
cleaned_data.append(cleaned_item)
return cleaned_data
数据转换与写入准备
清洗后的数据需要进一步转换,以符合目标系统的要求。例如,将字段名转换为目标系统所需的格式,或者进行必要的数据类型转换。
def transform_data(cleaned_data):
transformed_data = []
for item in cleaned_data:
transformed_item = {
'ORDER_ID': item['order_id'],
'ORDER_NO': item['order_no'],
'APPLYER_ID': item['applyer_id'],
# 添加其他必要字段
}
transformed_data.append(transformed_item)
return transformed_data
经过上述步骤处理后的数据,即可进入生命周期的下一阶段:数据写入目标系统。
小结
通过以上步骤,我们实现了从汤臣倍健营销云接口获取订单数据,并进行了初步清洗和转换。这一过程展示了如何利用轻易云平台的元数据配置高效地完成数据集成生命周期中的第一步,为后续的数据处理奠定了基础。
使用轻易云数据集成平台进行ETL转换并写入金蝶云星辰V2API接口
在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL(提取、转换、加载)转换,并最终写入目标平台。在本案例中,我们将重点介绍如何将数据转换为金蝶云星辰V2API接口所能够接收的格式,并最终写入目标平台。
配置元数据
首先,我们需要配置元数据,以确保数据能够正确地映射到金蝶云星辰V2API接口。以下是元数据配置的详细内容:
{
"api": "/jdy/v2/scm/sal_out_bound",
"effect": "EXECUTE",
"method": "POST",
"number": "id",
"id": "id",
"name": "id",
"idCheck": true,
"request": [
{"field":"bill_source","label":"单据来源,固定传入ISV","type":"string","describe":"单据来源,固定传入APP","value":"ISV"},
{"field":"bill_date","label":"出库日期,格式:2019-01-01","type":"datetime","describe":"出库日期,格式:2019-01-01","value":"{{approveDt|date}}"},
{"field":"customer_id","label":"客户id","type":"string","describe":"客户信息","value":"_findCollection find id from 7e4af0e4-cf19-31e3-899d-ccdaf06f789a where number={clientAppNo}"},
{"field":"remark","label":"单据备注","type":"string","value":"{remark}"},
{"field":"contact_linkman","label":"联系信息-联系人","type":"string","value":"{contacts}"},
{"field":"contact_phone","label":"联系信息-联系方式","type":"string","value":"{phone}"},
{"field":"contact_address","label":"联系信息-详细地址","type":"string","value":"{shippingAddress}"},
{"field":"dept_id","label":"部门","type":"string","value":"100000"},
{"field":"custom_field","label":"自定义字段","type": "object", "children":[
{"field": "custom_field__1__2uvgtgp4lsdr", "label": "营销云单号", "type": "string", "value": "{no}"},
{"field": "custom_field__1__2xf8e10c3x1i", "label": "下单人", "type": "string", "value": "{salesmanName}"}
]},
{"field": "material_entity", "label": "商品分录", "type": "array",
"children":[
{"field": "material_number", "label": "商品", "type": "string", "value": "{{details.extNo}}"},
{"field": "stock_id", "label": "仓库", "type": "string", "value": "1535523767860605952"},
{"field": "qty", "label": "数量", "type": "string", "value": "{{details.quantity}}"},
{"field": "unit_id", "label": "单位id", "type": "string",
value: "_findCollection find base_unit_id from 1923d958-d955-3e8d-9b5e-0bd93965ff70 where number={{details.extNo}}"
},
{"field”: “tax_price”, “label”: “含税单价”, “type”: “string”, “value”: “{{details.price}}”},
{“field”: “is_free”, “label”: “是否赠品”, “type”: “string”, “value”: “false”},
{“field”: “batch_no”, “label”: “批次”, “type”: “string”, “value”: “{{details._Flot}}”},
{“field”: “kf_date”, “label”: “生产日期”, “type”: “string”, “value”: “{{details._Fmfg}}”},
{“field”: ”valid_date“, ”label“: ”有效日期“, ”type“: ”string“, ”value“: ”{{details._Fexp}}”},
{“field”:”kf_period“, ”label“:”保质期天数“, ”type“:”string“, ”value“:”2”},
{“field”:”kf_type“, ”label“:”保质期类型“, ”type“:”string“, ”value“:”3”}
]
}
]
}
数据请求与清洗
在这个阶段,我们从源系统请求原始数据,并对其进行清洗和预处理。这个过程包括校验数据的完整性和一致性,确保所有必要字段都已填充,并且格式正确。例如,我们需要确保出库日期(bill_date
)的格式为YYYY-MM-DD
,并且客户ID(customer_id
)能够正确映射到金蝶云星辰系统中的客户记录。
数据转换与写入
一旦数据清洗完成,我们就可以开始进行ETL转换。以下是如何将清洗后的数据映射到金蝶云星辰V2API接口所需格式的具体步骤:
- 设置请求头和请求体:
- 请求方法为POST。
- API路径为
/jdy/v2/scm/sal_out_bound
。 - 请求体包含所有必要字段,如单据来源、出库日期、客户ID等。
import requests
import json
url = 'https://api.kingdee.com/jdy/v2/scm/sal_out_bound'
headers = {'Content-Type': 'application/json'}
data = {
'bill_source': 'ISV',
'bill_date': '2023-10-01',
'customer_id': '123456',
'remark': '测试备注',
'contact_linkman': '张三',
'contact_phone': '13800138000',
'contact_address': '广州市天河区',
'dept_id': '100000',
'custom_field': {
'custom_field__1__2uvgtgp4lsdr': 'YXYD12345',
'custom_field__1__2xf8e10c3x1i': '李四'
},
'material_entity': [
{
'material_number': 'ABC123',
'stock_id': '1535523767860605952',
'qty': '10',
'unit_id': '_findCollection find base_unit_id from ... where number=ABC123',
'tax_price': '100.00',
‘is_free’: ‘false’,
‘batch_no’: ‘BATCH001’,
‘kf_date’: ‘2023-09-01’,
‘valid_date’: ‘2024-09-01’,
‘kf_period’: ‘365’,
‘kf_type’: ‘3’
}
]
}
response = requests.post(url, headers=headers, data=json.dumps(data))
print(response.json())
上述代码展示了如何通过Python脚本,将清洗后的订单数据转换为金蝶云星辰V2API接口所需的JSON格式,并发送HTTP POST请求以完成数据写入。
验证与监控
最后一步是验证和监控。我们需要检查API响应,以确保数据成功写入目标平台。如果出现错误,需要根据错误信息进行排查和修正。此外,通过轻易云的数据监控功能,可以实时跟踪每个环节的数据流动和处理状态,确保整个流程的透明度和高效性。
通过以上步骤,我们实现了从源系统到金蝶云星辰V2API接口的数据ETL转换和写入。这不仅提高了业务流程的自动化程度,也确保了数据的一致性和准确性。