轻易云平台的采购入库数据ETL转换与写入流程

  • 轻易云集成顾问-吴伟
### 汤臣倍健营销云数据集成到SQL Server:采购入库同步案例 在本次技术案例中,我们将深入探讨如何通过轻易云数据集成平台,将汤臣倍健营销云的数据高效、可靠地集成到SQL Server,以实现采购入库信息的同步。具体方案为“采购入库同步-(佰嘉)广元跃泰”。 首先,我们需要从汤臣倍健营销云获取采购入库订单数据,对应API接口为 `/erp/api/order/query/purInWarehsOrder`。为了确保不漏单并抓取大批量的数据,采用了定时任务机制进行调用。这一过程不仅涉及分页处理和限流机制,还需考虑与SQL Server之间的数据格式差异。 利用轻易云平台提供的全透明可视化操作界面,可以实时监控每个环节的状态,从而保证数据处理的一致性和完整性。在大量数据快速写入SQL Server时,选择使用批量插入操作,并通过 `insert` API 将整理好的数据导入指定数据库表中。 期间必须特别注意以下几个关键点: - 如何可靠且定时地抓取汤臣倍健营销云接口的数据。 - 处理分页和限流问题,以防止接口请求过载。 - 调用 SQL Server 数据插入 API 时,针对不同字段类型做出适当转换。 - 实现异常处理与错误重试机制,提高系统稳定性和容错能力。 此次对接过程中,通过详细设计的日志记录功能及监控模块,实现了对整个生命周期内各环节操作状态的实时追踪,大幅度提升了业务透明度。同时,为确保最终写入的数据准确无误,配置了一套严格的校验流程,包括字段映射校验及一致性检查等等。 下一步将继续深入详述每一个技术细节,包括如何构建调度逻辑、参数优化,以及可能遇到的问题解决思路。 ![如何对接钉钉API接口](https://pic.qeasy.cloud/D27.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统汤臣倍健营销云接口/erp/api/order/query/purInWarehsOrder获取并加工数据 在轻易云数据集成平台中,生命周期的第一步是调用源系统接口获取数据。本文将详细探讨如何通过调用汤臣倍健营销云的接口`/erp/api/order/query/purInWarehsOrder`来获取采购入库数据,并进行初步的数据清洗和加工。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。以下是元数据配置的详细内容: ```json { "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": "xxx" }, { "field": "yxyNumber", "label": "营销云销售订单号", "type": "string", "describe": "如:YD1215710122031701,传此参数时,其他时间状态等条件无效" }, { "field": "number", "label": "系统订单号", "type": "string", "describe": "如:XOUT0000000293,传此参数时,其他时间状态等条件无效" }, { "field": "status", "label": "订单状态", "type": "string", "describe": "0:未审核 1:已审核(已出库)", "value": "1" }, { "field": "beginTime", "label": "开始时间", "type": "string", "describe": "timeType为空或者0,基于创建时间查询,timeType为1,基于更新时间查询,格式:0000-00-00或0000-00-00 00:00:00,如果不传单号此字段必填", "value": "{{LAST_SYNC_TIME|datetime}}" }, { "field": "endTime", "label": "结束时间", "type": "string", "describe": "timeType为空或者0,基于创建时间查询,timeType为1,基于更新时间查询,格式:0000-00-00或0000-00-00 00:00:00,如果不传单号此字段必填", "value": "{{CURRENT_TIME|datetime}}" }, { "field": "pageNo", "label": "页码", "type": "string", "description":"默认1", "value":"1" }, { " field":"pageSize","label":"每页条数","type":"string","describe":"默认30","value":"30"}, {"field":"timeType","label":"时间段标志","type":"string","describe":"查询时间段标识,0:创建时间(默认),1:最后更新时间","value":"1"}]} ``` #### 数据请求与清洗 在实际操作中,我们需要根据上述元数据配置来构建请求体,并发送POST请求以获取采购入库订单数据。以下是一个示例请求体: ```json { “tenantId”: “34cc4109705e4c058b7b3b0352e57d31”, “status”: “1”, “beginTime”: “2023-01-01 00:00:00”, “endTime”: “2023-01-31 23:59:59”, “pageNo”: “1”, “pageSize”: “30”, “timeType”: “1” } ``` 接收到响应后,我们需要对数据进行初步清洗。首先,根据`condition`字段中的条件过滤掉不符合要求的数据。例如,我们需要排除物料编号包含“F.A”的记录: ```python def filter_data(data): return [item for item in data if 'F.A' not in item['itemList']['materialNumber']] ``` #### 数据转换与写入 在完成初步清洗后,需要将数据转换为目标系统所需的格式,并写入目标数据库或系统。这一步通常涉及字段映射、数据类型转换等操作。例如,将源系统中的订单ID映射到目标系统中的唯一标识符: ```python def transform_data(data): transformed_data = [] for item in data: transformed_item = { 'order_id': item['id'], 'order_number': item['number'], 'status': item['status'], # 更多字段映射... } transformed_data.append(transformed_item) return transformed_data ``` 最后,将转换后的数据写入目标系统,可以使用轻易云提供的数据写入功能实现。 #### 实时监控与错误处理 在整个过程中,需要实时监控数据流动和处理状态,以确保数据集成过程顺利进行。如果出现错误,例如网络问题或API响应异常,需要及时记录日志并进行处理: ```python try: response = requests.post(api_url, json=request_body) response.raise_for_status() except requests.exceptions.RequestException as e: log_error(e) ``` 通过以上步骤,我们可以高效地从汤臣倍健营销云获取采购入库订单数据,并进行清洗、转换和写入操作,实现不同系统间的数据无缝对接。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/S11.png~tplv-syqr462i7n-qeasy.image) ### 采购入库同步到SQL Server的ETL转换与写入 在数据集成生命周期的第二步,重点在于将已经集成的源平台数据进行ETL(提取、转换、加载)转换,并最终写入目标平台SQL Server。本文将详细探讨如何通过轻易云数据集成平台配置元数据,实现这一过程。 #### 数据提取与转换 首先,我们需要从源平台提取数据并进行必要的转换,以确保其符合目标平台SQL Server API接口所能接收的格式。以下是元数据配置中的关键部分: ```json { "api": "insert", "method": "POST", "idCheck": true, "request": [ { "label": "主表参数", "field": "main_params", "type": "object", ... }, { "label": "扩展表参数", "field": "extend_params_1", "type": "array", ... } ], ... } ``` #### 主表参数配置 主表参数包含了采购入库单的基本信息,如单号编号、日期、时间、单位内码等。这些参数需要经过适当的格式化和映射,以便SQL Server能够正确解析和存储。例如: - `djbh`(单号编号):直接从源数据中提取。 - `rq`(日期)和`ontime`(时间):需要将审核时间`auditTime`进行日期和时间格式的转换。 - `hsje`(含税金额):从项目列表中计算得到。 以下是主表参数的具体配置示例: ```json { "parent": "main_params", "label": "日期", "field": "rq", "type": "string", "value": "{{auditTime|date}}" }, { "parent": "main_params", ... } ``` #### 扩展表参数配置 扩展表参数则包含了每个商品项的详细信息,如商品内码、仓库编号、批号、数量等。这些参数同样需要进行相应的转换和映射。例如: - `spid`(商品内码):通过查找集合获取对应的商品ID。 - `shl`(数量):确保数量大于0。 - `hshj`(含税价):通过函数计算得到。 以下是扩展表参数的具体配置示例: ```json { "parent": "extend_params_1", ... }, { "parent": "extend_params_1", ... } ``` #### SQL语句生成 在完成数据提取和转换后,需要生成相应的SQL语句以便将数据写入SQL Server。元数据配置中提供了主SQL语句和扩展SQL语句: ```json { ... { "label": "主SQL语句", ... } }, { ... { ... } } ``` 这些SQL语句将被用于插入采购入库单及其详细项到目标数据库中。例如,主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) ``` 而扩展SQL语句则用于插入每个商品项的详细信息: ```sql 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语句发送到目标平台SQL Server,实现数据写入。由于该平台支持全异步操作,能够确保高效且无缝的数据传输。 综上所述,通过合理配置元数据,我们可以高效地实现从源平台到目标平台的数据ETL转换与写入,确保采购入库同步过程顺利进行。 ![钉钉与ERP系统接口开发配置](https://pic.qeasy.cloud/T6.png~tplv-syqr462i7n-qeasy.image)