案例分享:汤臣倍健营销云数据集成到SQL Server
在企业信息化建设中,确保不同系统间的数据无缝对接,是保障业务准确、高效运行的关键环节。本文将详细剖析如何采用轻易云数据集成平台,实现汤臣倍健营销云数据与SQL Server的高效对接。本案例聚焦于项目“采购入库同步-(Life-Space)广元跃泰”,展示了一系列技术细节和实现方案。
在这个集成过程中,我们首要任务是从汤臣倍健营销云接口/erp/api/order/query/purInWarehsOrder
获取订单入库数据,并通过加工、清洗后批量写入到SQL Server数据库。为确保整个流程的可靠性与高效性,实施了以下关键技术方案:
-
定时抓取机制:利用平台提供的调度功能,以固定时间间隔调用汤臣倍健营销云接口,确保新生成的数据被及时获取,有效避免因漏单导致的数据不完整问题。
-
分页处理与限流控制:由于API返回结果有限制,每次调用仅返回部分记录,我们设计了分页处理策略,通过递增页码逐次拉取全部所需数据。同时,为防止频繁调用导致接口限流或超时错误,引入了重试机制及执行间隔控制,从而保证每条记录都能成功获取。
-
大规模数据快速写入:使用批量操作,将经过转换处理后的大量订单数据快速导入至SQL Server。在插入过程中引入事务管理以及并行操作,提高整体写入效率,并有效降低系统负载。
-
实时监控与日志记录:集成人员能够通过可视化界面实时监控每个环节的数据流动情况及状态,一旦出现异常即时警报,并保留详尽日志以便追踪和排查问题来源,保障对接过程透明且可追溯。
-
定制化映射规则: 针对两个系统之间潜在的数据格式差异,进行必要的数据转换和字段映射设置,包括但不限于日期格式、数值类型等,从根本上解决因格式不匹配引发的存储错误问题。
下面我们将深入探讨上述技术点的实际应用,以及代码实现细节,希望通过此分享为其他类似项目提供参考和借鉴。
调用源系统汤臣倍健营销云接口/erp/api/order/query/purInWarehsOrder获取并加工数据
在数据集成的生命周期中,第一步是调用源系统的API接口获取原始数据,并对其进行初步加工。本文将详细介绍如何通过调用汤臣倍健营销云的接口/erp/api/order/query/purInWarehsOrder
来实现这一过程。
接口配置与请求参数
为了从汤臣倍健营销云获取采购入库订单数据,我们需要配置API请求参数。以下是元数据配置的详细说明:
{
"api": "/erp/api/order/query/purInWarehsOrder",
"method": "POST",
"number": "number",
"id": "id",
"pagination": {
"pageSize": 30
},
"condition": [
[
{
"field": "itemList.materialNumber",
"logic": "notlike",
"value": "F.A"
}
]
],
"idCheck": true,
"request": [
{
"field": "tenantId",
"label": "经销商id",
"type": "string",
"describe": "经销商id(必填,营销云id)如:34cc4109705e4c058b7b3b0352e57d31",
"value": "{{TENANT_ID}}"
},
{
"field": "yxyNumber",
"label": "营销云销售订单号",
"type": "string",
"describe": "如:YD1215710122031701,传此参数时,其他时间状态等条件无效"
},
{
"field": "number",
"label": "系统订单号",
"type": "string",
"describe": "如:XOUT0000000293,传此参数时,其他时间状态等条件无效"
},
{
"field": "status",
...
请求参数详解
- tenantId(经销商ID): 必填项,用于标识具体的经销商。
- yxyNumber(营销云销售订单号): 可选项,指定时其他时间和状态条件无效。
- number(系统订单号): 可选项,指定时其他时间和状态条件无效。
- status(订单状态): 用于过滤订单状态,如已审核、未审核等。
- beginTime(开始时间): 基于创建或更新时间查询的起始时间。
- endTime(结束时间): 基于创建或更新时间查询的结束时间。
- pageNo(页码): 默认值为1,用于分页查询。
- pageSize(每页条数): 默认值为30,用于分页查询。
- timeType(时间段标志): 指定查询基于创建时间还是更新时间。
数据请求与清洗
在发送请求之前,需要确保所有必填字段都已正确填写。以下是一个示例请求体:
{
...
{
...
{"tenantId":"34cc4109705e4c058b7b3b0352e57d31"},
{"status":"1"},
{"beginTime":"{{LAST_SYNC_TIME|datetime}}"},
{"endTime":"{{CURRENT_TIME|datetime}}"},
{"pageNo":"1"},
{"pageSize":"30"},
{"timeType":"1"}
}
}
发送POST请求后,将返回包含采购入库订单的数据。接下来,我们需要对这些数据进行清洗和初步处理。
数据转换与写入
在获取到原始数据后,需要根据业务需求对数据进行转换。例如,可以过滤掉不符合条件的记录,或者将某些字段格式化为目标系统所需的格式。以下是一个简单的数据清洗示例:
def clean_data(raw_data):
cleaned_data = []
for record in raw_data:
if not record['itemList']['materialNumber'].startswith('F.A'):
cleaned_record = {
'order_id': record['id'],
'order_number': record['number'],
'status': record['status'],
'created_time': record['createdTime']
}
cleaned_data.append(cleaned_record)
return cleaned_data
经过清洗后的数据可以直接写入目标系统或存储在中间数据库中,以便后续处理。
小结
通过调用汤臣倍健营销云接口/erp/api/order/query/purInWarehsOrder
并对返回的数据进行清洗和转换,我们能够高效地获取并处理采购入库订单数据。这一步骤不仅确保了数据的一致性和准确性,还为后续的数据处理和分析奠定了坚实基础。
使用轻易云数据集成平台进行采购入库数据ETL转换并写入SQL Server
在轻易云数据集成平台中,将采购入库数据从源平台转换为目标平台SQL Server所能接收的格式,并最终写入目标平台,涉及到多个关键步骤和技术细节。以下将详细探讨如何利用元数据配置完成这一过程。
1. 数据请求与清洗
在ETL流程中,首先需要从源系统请求数据并进行初步清洗。这一步骤主要包括获取原始数据、处理缺失值、标准化字段等。由于本文重点在于数据转换与写入,这部分内容将简要带过。
2. 数据转换与写入
第二步是将已经清洗的源数据进行转换,并通过API接口写入目标平台SQL Server。以下是具体操作步骤:
2.1 配置主表参数
根据提供的元数据配置,我们需要构建主表参数main_params
,这些参数将通过API接口传递给SQL Server。
{
"djbh": "{number}",
"djlx": "CGC",
"rq": "{{opertime|date}}",
"ontime": "{{auditTime|time}}",
"wldwid": "WLD00001903",
"hsje": "{{itemList.taxlastmoney}}",
"shouhr": "{recvContact}",
"shhdz": "{recvAddr}",
"lxdh": "{recvTel}",
"beizhu": "订单备注:{remark}",
"webdjbh": "{yxyNumber}"
}
这些字段对应的值需要从源系统的数据中提取,并根据需求进行格式化。例如,日期和时间字段需要转换为适合SQL Server存储的格式。
2.2 配置扩展表参数
扩展表参数extend_params_1
用于存储详细的商品信息,每个商品信息作为数组中的一个对象:
[
{
"djbh": "{number}",
"dj_sn": "{oSn}",
"spid": "_findCollection find spid from d76b64f9-f0e0-3436-a2d9-14c5579faa1b where spbh2={extMaterialNo}",
"ckid": "{{itemList.depotNo}}",
"pihao": "{{itemList._Flot}}",
"sxrq": "{{itemList._Fexp}}",
"baozhiqi": "{{itemList._Fmfg}}",
"shl": "{{itemList.opernumber}}",
"hshj": "_function {{itemList.taxlastmoney}}/{{itemList.opernumber}}",
"hsje": "{{itemList.taxlastmoney}}",
"xgdjbh": "{yxyNumber}",
"recnum": "{oSn}",
"hzid": "{orgId}",
"ckname": "{tenantName}"
}
]
这里的spid
字段需要通过一个查找函数从特定集合中获取,而其他字段则直接从源数据中提取或计算得到。
2.3 构建SQL语句
根据元数据配置,主表和扩展表的SQL插入语句如下:
主表插入语句:
INSERT INTO gxkphz (djbh, djlx, rq, ontime, wldwid, hsje, shouhr, shhdz, lxdh, beizhu, webdjbh)
VALUES (:djbh, :djlx, :rq, :ontime, :wldwid, :hsje, :shouhr, :shhdz, :lxdh, :beizhu, :webdjbh)
扩展表插入语句:
INSERT INTO gxkpmx (djbh, dj_sn, spid, ckid, pihao, sxrq, baozhiqi, shl, hshj, hsje, xgdjbh, recnum,hzid ,ckname)
VALUES (:djbh,:dj_sn,:spid,:ckid,:pihao,:sxrq,:baozhiqi,:shl,:hshj,:hsje,:xgdjbh,:recnum,:hzid ,:ckname)
这些SQL语句将在API请求时动态填充参数,从而实现对目标数据库的写入操作。
2.4 API请求配置
最后,我们需要配置API请求,将上述参数和SQL语句发送到目标平台。API请求采用POST方法,并包含以下主要部分:
{
"api":"insert",
"method":"POST",
"idCheck":true,
...
}
具体的请求体应包含前面构建好的主表和扩展表参数,以及相应的SQL语句。
总结
通过以上步骤,我们可以利用轻易云数据集成平台,将采购入库的数据从源系统转换为目标平台SQL Server所能接收的格式,并成功写入数据库。在实际应用中,需要根据具体业务需求调整元数据配置和处理逻辑,以确保数据准确性和一致性。