从聚水潭到金蝶云星空:使用轻易云平台实现ETL数据转换

  • 轻易云集成顾问-蔡威
### 聚水潭·奇门数据集成到金蝶云星空案例分享:聚水潭--销售出库单=>金蝶--销售订单 在系统对接和数据集成的过程中,如何高效、准确地将不同平台的数据无缝对接,是一个关键且挑战性的技术难题。本案详细解析了通过轻易云数据集成平台,将聚水潭·奇门的销售出库单数据流畅写入至金蝶云星空中的解决方案。 首先,我们需要确保从聚水潭·奇门接口定时可靠地抓取必要的数据。使用 `jushuitan.saleout.list.query` API 接口,可以按照预设时间间隔批量获取最新的销售出库单信息。同时,为处理大量数据,需考虑分页和限流问题,以保证完整而有效地获取所有必需的数据。 ```json { "method": "jushuitan.saleout.list.query", "timestamp": "<current_timestamp>", "params": { // 必要请求参数如起始时间、结束时间等 } } ``` 一旦成功获取到所需的数据,即可着手进行格式转换,以匹配金蝶云星空要求的格式。在这一环节中,对数据字段进行映射转化是至关重要的一步。这不仅涉及基础字段名称和类型的变换,还可能包括一定规则下的数据重构,如单位转换、值拼接等。 随后,通过调用金蝶云API `batchSave` 方法,将整理好的批量数据信息写入系统,并实时监控每一次写入过程以便于异常处理。对于已经写入失败或部分成功但未完全同步的记录,可设置自动重试机制,从而提升整体链路稳定性与容错能力: ```json { "method": "batchSave", "timestamp": "<current_timestamp>", "dataList": [ // 与目标数据库结构相符的一组整理后的记录 ] } ``` 当面对两个异构系统之间复杂多样的数据差异时,通过精细化定制映射关系以及灵活配置错误重试策略,不仅能够保障业务顺利衔接,也大幅优化了整个集成流水线上的透明度与可追溯性。因此,在整个实现过程中,实现对接口错误日志记录及运行状态实时监控,也是提高效率和安全性的关键举措之一。 以上步骤清晰展示了如何利用轻易云的平台特性,有条不紊、高效准确地将聚水潭·奇门中复杂、多样且巨量的销售信息平滑过渡并同步到金蝶云星空,使得企业用户可以更好地实现资源整合与运营优化。 ![打通金蝶云星空数据接口](https://pic.qeasy.cloud/D23.png~tplv-syqr462i7n-qeasy.image) ### 调用聚水潭·奇门接口jushuitan.saleout.list.query获取并加工数据 在数据集成生命周期的第一步,我们需要从源系统聚水潭·奇门接口`jushuitan.saleout.list.query`获取销售出库单数据,并进行初步加工。以下将详细介绍如何配置和调用该接口,以及如何处理返回的数据。 #### 接口配置与调用 首先,我们需要根据提供的元数据配置来设置API请求参数。以下是关键参数及其说明: - **api**: `jushuitan.saleout.list.query` - **method**: `POST` - **number**: `io_id` - **id**: `o_id` - **idCheck**: `true` 请求参数列表: 1. **page_index**(开始页) - 类型:`int` - 描述:第几页,从第一页开始,默认1 - 示例值:1 2. **page_size**(拉取量) - 类型:`int` - 描述:每页多少条,最大25 - 默认值:50 3. **start_time**(起始时间) - 类型:`datetime` - 描述:起始时间,和结束时间必须同时存在,时间间隔不能超过七天,与线上单号列表、内部单号列表不能同时为空 - 示例值:`{{LAST_SYNC_TIME|datetime}}` 4. **end_time**(结束时间) - 类型:`datetime` - 描述:结束时间,和起始时间必须同时存在,时间间隔不能超过七天,与线上单号列表、内部单号列表不能同时为空 - 示例值:`{{CURRENT_TIME|datetime}}` 5. **date_type**(时间类型) - 类型:`int` - 描述:时间类型 默认0 0=修改时间 ; 1=制单日期; 2=出库时间 - 默认值:2 6. **status**(状态) - 类型:`string` - 默认值:Confirmed #### 数据请求与清洗 在完成API请求参数配置后,我们可以通过POST方法调用该接口获取销售出库单数据。以下是一个示例请求体: ```json { "page_index": 1, "page_size": 50, "start_time": "{{LAST_SYNC_TIME|datetime}}", "end_time": "{{CURRENT_TIME|datetime}}", "date_type": 2, "status": "Confirmed" } ``` 调用接口后,将返回包含销售出库单信息的JSON数据。我们需要对这些数据进行初步清洗,以便后续的数据转换与写入步骤。 #### 数据清洗步骤 1. **字段映射与重命名** 根据业务需求,将返回的数据字段映射到目标系统所需的字段。例如,将返回的`io_id`映射为目标系统中的订单编号。 2. **数据过滤** 根据特定条件过滤不需要的数据。例如,只保留状态为“Confirmed”的记录。 3. **格式转换** 将日期格式从源系统的格式转换为目标系统所需的格式。例如,将YYYY-MM-DD HH:mm:ss格式转换为YYYYMMDD。 4. **数据校验** 对关键字段进行校验,确保数据完整性和准确性。例如,检查订单编号是否为空或重复。 以下是一个示例代码片段,用于处理返回的数据: ```python import requests import json from datetime import datetime # 配置API请求参数 url = "https://api.jushuitan.com/api/open/query" headers = {"Content-Type": "application/json"} payload = { "page_index": 1, "page_size": 50, "start_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "end_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), "date_type": 2, "status": "Confirmed" } # 调用API接口获取数据 response = requests.post(url, headers=headers, data=json.dumps(payload)) data = response.json() # 数据清洗与处理 cleaned_data = [] for record in data['result']: cleaned_record = { 'order_id': record['io_id'], 'order_date': record['io_date'].replace('-', ''), 'status': record['status'] # 添加其他需要处理的字段 } cleaned_data.append(cleaned_record) # 输出清洗后的数据 print(json.dumps(cleaned_data, indent=4)) ``` 通过上述步骤,我们成功地从聚水潭·奇门接口获取并清洗了销售出库单数据,为后续的数据转换与写入做好了准备。这一步骤确保了源系统的数据能够准确、高效地传递到目标系统中,实现不同系统间的数据无缝对接。 ![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/S4.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将聚水潭销售出库单转换并写入金蝶云星空API 在数据集成生命周期的第二步,我们需要将已经从源平台(如聚水潭)获取的数据进行ETL转换,并将其转为目标平台(金蝶云星空API接口)所能接收的格式,最终写入目标平台。本文将详细探讨这一过程中涉及的技术细节和元数据配置。 #### API 接口与元数据配置 在本案例中,我们使用金蝶云星空的`batchSave` API接口来接收和处理销售订单数据。以下是关键的元数据配置: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "FBillTypeID", "label": "单据类型", "type": "string", "describe": "单据类型", "parser": { "name": "ConvertObjectParser", "params": "FNumber" }, "value": "XSDD01_SYS" }, { "field": "FBillNo", "label": "单据编号", "type": "string", "describe": "单据编号", "value": "{io_id}" }, { ... } ], ... } ``` #### 数据字段解析与转换 1. **单据类型 (`FBillTypeID`)**: - 类型:字符串 - 描述:单据类型 - 转换器:`ConvertObjectParser`,参数为 `FNumber` - 值:固定为 `XSDD01_SYS` 2. **单据编号 (`FBillNo`)**: - 类型:字符串 - 描述:单据编号 - 值:来自源平台的 `{io_id}` 3. **销售组织 (`FSaleOrgId`)**: - 类型:字符串 - 描述:销售组织 - 转换器:`ConvertObjectParser`,参数为 `FNumber` - 值:来自源平台的 `{shop_id}` - 映射配置:目标 `6650611c87f0fc67ac495205` 4. **日期 (`FDate`)**: - 类型:字符串 - 描述:日期 - 值:来自源平台的 `{io_date}` 5. **客户 (`FCustId`)**: - 类型:字符串 - 描述:客户 - 转换器:`ConvertObjectParser`,参数为 `FNumber` - 值:来自源平台的 `{shop_id}` 6. **订单明细 (`FSaleOrderEntry`)**: - 类型:数组 - 描述:订单明细 - 子字段包括: * **物料编码 (`FMaterialId`)** - 类型:字符串 - 描述:物料编码 - 转换器:`ConvertObjectParser`,参数为 `FNumber` - 值:来自源平台的 `{{details_list.goods_no}}` * **含税单价 (`FTaxPrice`)** - 类型:字符串 - 描述:含税单价 - 值:使用 `_function LEFT( '{{details_list.sell_price}}' , 6)` 函数截取价格前六位数字。 * **税率 (`FEntryTaxRate`)** - 类型:浮点数 - 描述:税率 - 值:使用 `_findCollection find FTaxRateId_FTaxRate from adac3655-a3cb-3551-9024-8e7b360f930a where FNumber={{details_list.goods_no}}` 函数查找税率。 * **销售数量 (`FQty`)** - 类型:字符串 - 描述:销售数量 - 值: 来自源平台的 `{{details_list.goods_count}}` * **要货日期 (`FDeliveryDate`)** - 类型: 字符串 - 描述: 要货日期 - 值: 来自源平台的 `{consign_time}` * **是否赠品 (`FIsFree`)** – 类型: 字符串 – 描述: 是否赠品 – 值: 使用 `_function CASE WHEN {{details_list.sell_price}}>0 THEN 'false' ELSE 'true' END` 判断是否为赠品。 #### 其他请求字段 1. **业务对象表单ID (`FormId`)**: – 类型: 字符串 – 描述: 必须填写金蝶的表单ID,如 `PUR_PurchaseOrder` – 值: 固定为 `SAL_SaleOrder` 2. **执行操作 (`Operation`)**: – 类型: 字符串 – 描述: 执行操作 – 值: 固定为 `BatchSave` 3. **提交并审核 (`IsAutoSubmitAndAudit`)**: – 类型: 布尔值 – 描述: 提交并审核 – 值: 固定为 `true` 4. **验证基础资料 (`IsVerifyBaseDataField`)**: – 类型: 布尔值 – 描述: 是否验证所有基础资料有效性 – 值: 固定为 `true` #### 实际应用中的注意事项 在实际应用中,需要特别注意以下几点: 1. 确保所有字段值符合目标系统要求,尤其是必填字段。 2. 使用转换器(如 `ConvertObjectParser`)确保数据格式正确。 3. 根据业务需求调整映射关系和函数调用,以确保数据准确性。 4. 在提交请求前,通过调试工具或日志记录检查生成的数据结构是否符合预期。 通过以上配置和技术细节,我们可以高效地完成从聚水潭到金蝶云星空的数据集成任务,实现不同系统间的数据无缝对接。 ![打通用友BIP数据接口](https://pic.qeasy.cloud/T30.png~tplv-syqr462i7n-qeasy.image)