ETL过程解析:从旺店通到金蝶云星空的数据转换

  • 轻易云集成顾问-张妍琪
### 系统对接集成案例:旺店通·企业奇门数据集成到金蝶云星空 在业务运作过程中,数据的高效传输和准确集成至关重要。本技术文章将探讨如何通过系统对接,实现旺店通·企业奇门的数据顺利集成到金蝶云星空,本次案例实际运行的方案名称为"直接调拨单退回"。 为实现这个目标,我们利用了旺店通提供的API接口`wdt.stockin.order.query.refund`来抓取所需的数据,并使用金蝶云星空的API `batchSave`将数据写入其系统。本文重点讲解以下几个方面: - **高吞吐量的数据写入能力**:确保大量数据能够快速被导出并写入金蝶云星空,提高整体处理效率。 - **自定义数据转换逻辑**:针对不同业务需求和数据结构对获取的数据进行必要转换,以适应两大平台上的差异性。 - **分页和限流问题处理**:在调用旺店通·企业奇门接口时,合适地处理该接口的分页与限流,以保证稳定性。 - **异常处理与错误重试机制**: 针对可能出现的网络或服务中断等因素建立完备异常检测及重试策略。 由此,通过合理设计流程、优化实现细节以及借助强大的监控工具,使整个系统对接过程不仅高效,而且可视化透明。这一实践案例展示了利用先进平台功能,在复杂环境中实现实时且可靠的数据交换。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/D2.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统旺店通·企业奇门接口wdt.stockin.order.query.refund获取并加工数据 在数据集成生命周期的第一步,我们需要从源系统中获取数据,并对其进行初步的清洗和加工。本文将详细探讨如何通过调用旺店通·企业奇门接口`wdt.stockin.order.query.refund`来实现这一目标。 #### 接口调用配置 为了实现数据的有效获取,我们需要配置相关的元数据。以下是针对`wdt.stockin.order.query.refund`接口的具体配置: ```json { "api": "wdt.stockin.order.query.refund", "method": "POST", "number": "order_no", "id": "stockin_id", "pagination": { "pageSize": 50 }, "idCheck": true, "condition_bk": [ [ { "field": "shop_no", "logic": "like", "value": "JS" } ] ], "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":"入库单状态 10已取消20编辑中30待审核60待结算80已完成(默认查询80已完成单据)" }, { "field":"shop_no", "label":"店铺编号", "type":"string", “describe":"代表店铺所有属性的唯一编码,用于店铺区分,ERP内支持自定义(ERP店铺界面设置),用于获取指定店铺单据数据信息" }, { “label":"入库单号”, “field":"stockin_no”, “type":"string”, “value":"RK2211180252” } ], “otherRequest”:[ { “field”:”page_size”, “label”:”分页大小”, “type”:”string”, “describe”:”每页返回的数据条数,输入值范围1~50,不传本参数,输入值默认为40,使用举例单击这里”, “value”:”{PAGINATION_PAGE_SIZE}” }, { “field”:”page_no”, “label”:”页号”, “type”:”string”, “describe”:”不传值默认从0页开始”, “value”:”{PAGINATION_START_PAGE}” } ] } ``` #### 数据请求与清洗 1. **请求参数配置**: - `start_time` 和 `end_time` 用于定义数据的时间范围,通过模板变量 `{{LAST_SYNC_TIME|datetime}}` 和 `{{CURRENT_TIME|datetime}}` 动态生成。 - `status` 默认查询状态为80,即已完成的单据。 - `shop_no` 用于区分不同店铺的数据。 - `stockin_no` 指定入库单号。 2. **分页处理**: - 使用 `page_size` 和 `page_no` 参数进行分页,每次请求最多返回50条记录。 - 默认从第0页开始,通过调整 `PAGINATION_START_PAGE` 实现多页数据的连续获取。 3. **条件过滤**: - 配置了条件过滤器 `condition_bk`,仅查询店铺编号包含"JS"的记录。 #### 数据转换与写入 在成功获取到原始数据后,需要对其进行转换和写入操作。以下是常见的数据转换步骤: 1. **字段映射**: 将源系统中的字段映射到目标系统所需的字段。例如,将源系统中的 `order_no` 映射为目标系统中的订单编号。 2. **数据清洗**: 对获取的数据进行清洗,包括去除无效字符、标准化日期格式等操作。 3. **增量更新**: 利用 `start_time` 和 `end_time` 实现增量更新,仅处理自上次同步以来的新数据。 4. **写入目标系统**: 将处理后的数据写入目标系统,可以通过API调用或数据库操作实现。 #### 实时监控与异常处理 在整个过程中,需要实时监控数据流动和处理状态,以确保高效和准确的数据集成。一旦发现异常情况,如接口调用失败或数据不一致,应及时进行错误处理和重试机制。 通过上述步骤,我们可以高效地调用旺店通·企业奇门接口获取并加工所需的数据,为后续的数据集成奠定坚实基础。 ![如何对接钉钉API接口](https://pic.qeasy.cloud/S21.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台:将源数据转换为金蝶云星空API格式并写入 在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。本文将详细探讨这一过程中涉及的技术细节和实现方法。 #### 元数据配置解析 首先,我们需要理解元数据配置中的各个字段及其对应的含义。以下是主要字段及其解析: - `api`: 指定调用的API接口名称,这里为`batchSave`。 - `method`: 指定HTTP请求的方法,这里为`POST`。 - `idCheck`: 是否进行ID检查,这里设置为`true`。 - `operation`: 定义操作相关的信息,包括行键、行数和方法。 - `request`: 包含具体的数据字段配置,每个字段都有其对应的标签、类型、描述和值。 #### 数据转换与写入过程 1. **构建请求体** 根据元数据配置,我们需要构建一个符合金蝶云星空API要求的请求体。以下是一个示例请求体结构: ```json { "FormId": "STK_TransferDirect", "Operation": "Save", "IsAutoSubmitAndAudit": false, "IsVerifyBaseDataField": true, "Model": { "FBillNo": "{order_no}", "FBillTypeID": {"FNumber": "ZJDB09_SYS"}, "FBizType": "NORMAL", "FTransferDirect": "GENERAL", "FTransferBizType": "InnerOrgTransfer", ... "FBillEntry": [ { "FMaterialId": {"FNumber": "{{details_list.spec_no}}"}, ... } ] } } ``` 2. **字段解析与映射** 每个字段都需要进行解析和映射。例如,`FBillTypeID`使用了`ConvertObjectParser`进行解析,将其转换为金蝶云星空系统所识别的格式。 ```json { "field": "FBillTypeID", "label": "单据类型", "type": "string", ... "parser": {"name":"ConvertObjectParser","params":"FNumber"} } ``` 3. **动态值处理** 某些字段需要根据特定条件动态生成值,例如: ```json { "field":"FSaleOrgId", ... "value":"_function case when '{shop_name}' like '%古神%' then 102 when '{shop_name}' like '%广州格物%' then 101 when '{shop_name}' like '%广西格物%' then 103 ELSE 100 end" } ``` 4. **数组处理** 对于数组类型的数据,如`FBillEntry`,我们需要确保每个子项都正确映射。例如: ```json { "field":"FBillEntry", ... "children":[ { ... "value":"{{details_list.spec_no}}" ... } ] } ``` 5. **发送请求** 构建好请求体后,通过HTTP POST方法将数据发送到金蝶云星空API接口。 #### 实际案例分析 假设我们有一条调拨单退回记录,其原始数据如下: ```json { "order_no": "DB20231001", ... "details_list": [ { ... "spec_no": "SP001", ... } ] } ``` 通过上述步骤,我们可以将其转换为符合金蝶云星空API要求的格式,并通过HTTP POST请求写入目标平台。 ```json { ..., “Model”: { “FBillNo”: “DB20231001”, “FBillTypeID”: {“FNumber”: “ZJDB09_SYS”}, … “FBillEntry”: [ { “FMaterialId”: {“FNumber”: “SP001”}, … } ] } } ``` 通过这种方式,我们实现了从源平台到目标平台的数据无缝对接,确保了数据的一致性和完整性。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/T16.png~tplv-syqr462i7n-qeasy.image)