利用轻易云平台将源数据转化写入金蝶云星空的实现方法

  • 轻易云集成顾问-黄宏棵
### 重跑数据/分销—旺店通销售出库单=>金蝶销售出库单(补货+换货)技术案例分享 在现代企业的日常运营中,不同系统之间的数据对接与集成是确保业务流程顺畅、高效运行的重要环节。本文将重点介绍如何通过轻易云数据集成平台,将旺店通·企业奇门中的销售出库单数据无缝同步到金蝶云星空,实现补货和换货功能。 **背景描述** 在该项目中,我们需要解决一个常见且具有挑战性的需求:如何确保来自旺店通·企业奇门的大量销售出库单能够准确、及时地写入到金蝶云星空系统中,并在过程中实现高吞吐量的数据处理,保证不漏单、不重单。 **技术细节** 1. **接口调用与数据抓取**: - 首先,通过调用 `wdt.stockout.order.query.trade` API 接口,从旺店通·企业奇门获取最新的销售出库单。这一步骤需要考虑接口的分页和限流问题,以避免影响源系统性能。 2. **数据转换与映射**: - 旺店通·企业奇门和金蝶云星空系统在数据结构上可能存在差异。因此,利用轻易云平台提供的自定义数据转换逻辑,对抓取到的数据进行必要的格式化处理,使其符合目标系统 `batchSave` API 的要求。 3. **批量写入与监控机制**: - 通过轻易云平台强大的高吞吐量数据写入能力,将大量已转换的数据快速而可靠地导入至金蝶云星空。此外,为确保整个过程无误,还设置了实时监控和告警机制,对每一次数据传输任务进行跟踪并记录日志,便于及时发现并处理异常情况。 4. **错误重试与异常处理**: - 在实际操作中,由于网络波动或服务端限制等原因,可能会遇到部分请求失败的情况。对此,我们设计了健壮的错误重试机制,通过捕获具体异常类型后自动重新发送请求,以最大程度提高整体成功率,减少人为干预工作量。 5. **集中管理API资产**: - 同时,为帮助运维人员全面掌握API使用情况,我们利用统一视图控制台功能,对所有涉及此次对接项目中的API资产进行集中管理,实现资源优化配置,提高整体运作效率。 以上步骤涵盖了从初始配置、接口调用,到最后的数据存储及监控等全生命周期的重要环节。这种基于实际案例的方法不仅增强了理解,也为类似场景提供了可行性参考。在下一部分内容里,我们将深入探讨这些步骤 ![数据集成平台API接口配置](https://pic.qeasy.cloud/D31.png~tplv-syqr462i7n-qeasy.image) ### 使用旺店通·企业奇门接口wdt.stockout.order.query.trade获取并加工数据 在数据集成生命周期的第一步,我们需要从源系统获取数据。本文将详细介绍如何使用旺店通·企业奇门接口`wdt.stockout.order.query.trade`来实现这一目标,并对数据进行初步加工。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。以下是我们使用的元数据配置: ```json { "api": "wdt.stockout.order.query.trade", "effect": "QUERY", "method": "POST", "number": "order_no", "id": "stockout_id", "idCheck": true, "request": [ {"field": "start_time", "label": "开始时间", "type": "datetime", "describe": "增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{LAST_SYNC_TIME|datetime}}"}, {"field": "end_time", "label": "结束时间", "type": "datetime", "describe": "增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{CURRENT_TIME|datetime}}"}, {"field": "status", "label": "状态", "type":"string", "describe":"5已取消,55已审核,95已发货,105 部分打款,110已完成,113:异常发货","value":"110"}, {"field":"src_order_no","label":"系统订单编号","type":"string","describe":"111"}, {"field":"src_tid","label":"原始单号","type":"string","describe":"111"}, {"field":"stockout_no","label":"出库单号","type":"string","describe":"111"}, {"field":"shop_no","label":"店铺编号","type":"string","describe":"代表店铺所有属性的唯一编码,用于店铺区分,ERP内支持自定义(ERP店铺界面设置),用于获取指定店铺单据数据信息"}, {"field":"warehouse_no","label":"仓库编号","type":"string","describe":"代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置),用于获取指定仓库单据数据信息(不支持一次推送多个仓库编号)"}, {"field":"FSaleDeptID","label":"销售部门","type":"string","parser":{"name":"ConvertObjectParser","params":"FNumber"}} ], "otherRequest":[ {"field":"page_size","label":"分页大小","type":"string","describe":"每页返回的数据条数,输入值范围1~100,不传本参数,输入值默认为40,使用举例单击这里","value":"{PAGINATION_PAGE_SIZE}"}, {"field":"page_no","label":"页号","type":"string","describe":"不传值默认从0页开始","value":"{PAGINATION_START_PAGE}"} ], "autoFillResponse": true, "condition":[ [{"field": "trade_type", "logic": "in", "value": "2,3,7,101,8"}, {"field": "shop_name", "logic": "eqv2", "value": "'系统分销店铺ae89e42'"}] ] } ``` #### 请求参数详解 - **start_time** 和 **end_time**:用于增量获取数据,这两个字段分别表示开始时间和结束时间。 - **status**:状态码为110表示已完成的订单。 - **src_order_no**、**src_tid**、**stockout_no**:这些字段用于标识订单和出库单的相关信息。 - **shop_no** 和 **warehouse_no**:分别表示店铺编号和仓库编号,用于区分不同的店铺和仓库。 - **FSaleDeptID**:销售部门,通过`ConvertObjectParser`解析为具体的部门编号。 分页参数包括: - **page_size**:每页返回的数据条数。 - **page_no**:当前请求的页号。 #### 数据请求与清洗 在调用接口时,我们需要注意以下几点: 1. **增量同步机制**:通过`start_time`和`end_time`字段实现增量同步,这样可以确保每次只获取最新的数据。 2. **状态过滤**:通过`status`字段过滤出已完成的订单,这样可以减少无效数据的处理。 3. **分页处理**:由于接口返回的数据可能较多,我们需要通过分页参数来控制每次请求的数据量。 示例请求体如下: ```json { “start_time”: “2023-10-01 00:00:00”, “end_time”: “2023-10-01 23:59:59”, “status”: “110”, “page_size”: “50”, “page_no”: “0” } ``` #### 数据转换与写入 在获取到原始数据后,需要对其进行初步清洗和转换,以便后续写入目标系统。常见的数据清洗操作包括: 1. **字段映射与重命名**:将源系统中的字段映射到目标系统中的相应字段,并进行必要的重命名。 2. **数据类型转换**:确保所有字段的数据类型符合目标系统的要求,例如日期格式、数字精度等。 3. **异常数据处理**:过滤掉不符合业务规则或存在异常的数据记录。 例如,将源系统中的出库单号映射到目标系统中的订单号,并将日期格式转换为标准格式: ```json { “order_id”: “{{stockout_no}}”, “order_date”: “{{stockout_date|date('yyyy-MM-dd')}}” } ``` 通过以上步骤,我们可以高效地从旺店通·企业奇门接口中获取并加工所需的数据,为后续的数据集成工作打下坚实基础。 ![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/S14.png~tplv-syqr462i7n-qeasy.image) ### 利用轻易云数据集成平台实现ETL转换并写入金蝶云星空API接口 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL转换,并最终写入目标平台——金蝶云星空。本文将详细探讨如何利用轻易云数据集成平台配置元数据,实现这一过程。 #### API接口配置 我们需要配置一个名为`batchSave`的API接口,使用POST方法进行数据传输。以下是具体的元数据配置: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "FBillTypeID", "label": "单据类型", "type": "string", "describe": "单据类型", "value": "_function CASE {trade_type} WHEN '2' THEN 'ZYD-017' WHEN '3' THEN 'ZYD-104' WHEN '7' THEN 'ZYD-105' WHEN '8' THEN 'ZYD-105' WHEN '101' THEN 'ZYD-103' END", "parser": { "name": "ConvertObjectParser", "params": "FNUMBER" } }, { "field": "FBillNo", "label": "单据编号", "type": "string", "describe": "单据编号", "value": "{order_no}" }, { ... } ], ... } ``` #### 数据字段解析与转换 1. **单据类型 (FBillTypeID)**: - 使用条件语句根据`trade_type`字段的值确定单据类型。 - 示例:当`trade_type`为`2`时,单据类型为`ZYD-017`。 - 使用`ConvertObjectParser`解析器,将其转换为金蝶系统识别的编码格式。 2. **单据编号 (FBillNo)**: - 直接映射源数据中的`order_no`字段。 3. **日期 (FDate)**: - 映射源数据中的`consign_time`字段。 4. **销售组织 (FSaleOrgId)**: - 根据不同的店铺编号(如E0029、E0030等)映射到相应的销售组织编码。 - 使用条件语句和解析器进行转换。 5. **客户 (FCustomerID)**: - 映射源数据中的`fenxiao_nick`字段,并通过解析器将其转换为金蝶系统识别的编码格式。 - 配置了正向映射,确保目标系统能正确识别该客户信息。 6. **发货组织 (FStockOrgId)**: - 类似于销售组织,根据店铺编号映射到相应的发货组织编码,并使用解析器进行转换。 7. **销售部门 (FSaleDeptID)**: - 映射源数据中的`fenxiao_nick`字段,通过解析器和正向映射确保目标系统识别。 8. **物料明细 (FEntity)**: - 包含多个子字段,如物料编码、仓库、计价数量、价税合计、总毛重和批次号等。 - 每个子字段都需要进行相应的数据映射和解析。例如,物料编码(FMaterialID)使用源数据中的`spec_no`字段,通过解析器转换为金蝶系统识别的编码格式。 #### 其他请求参数配置 除了主要的数据字段外,还需要配置一些其他请求参数: ```json { ... "otherRequest": [ { ... }, { ... } ], ... } ``` 这些参数包括表单ID(FormId)、操作类型(Operation)、是否自动提交和审核(IsAutoSubmitAndAudit)等。这些参数确保了在写入目标平台时,能够正确执行相应的操作。 #### 操作方法 最后,我们定义操作方法为批量保存(batchArraySave),每次处理20条记录: ```json { ... "operation": { ... "rowsKey": "array", ... "rows": 20, ... ... } } ``` 通过上述配置,我们可以实现从源平台到金蝶云星空的数据ETL转换,并成功写入目标平台。这不仅提高了数据处理效率,也确保了各个系统间的数据一致性和准确性。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/T6.png~tplv-syqr462i7n-qeasy.image)