ETL转换实践:旺店通到金蝶云星空的高效数据同步

  • 轻易云集成顾问-曹润
### 旺店通·企业奇门数据集成至金蝶云星空:退换管理的实践案例分享 在现代企业中,系统对接与数据集成已成为业务流程优化不可或缺的一环。本文将分享一个具体技术案例,通过轻易云平台,将旺店通·企业奇门的数据无缝对接至金蝶云星空,实现了高效的销售退货单管理。本次分享聚焦于"旺店通-退换管理--->金蝶-销售退货单-检查数量跟金额-OK"这一实际运作方案。 在这个场景中,我们需要从旺店通·企业奇门获取退款订单的数据,其API接口为`wdt.stockin.order.query.refund`,并将这些数据高效地写入到金蝶云星空中,对应的API接口是`batchSave`。整个过程中,要确保数据流动过程中的格式转换、分页处理、以及异常处理和重试机制。同时,为了保证每一笔交易都能准确被记录,我们配置了一系列的数据质量监控和报警系统。 首先,需要解决的是大量数据快速写入的问题。通过支持高吞吐量的数据写入能力,使得大量退款订单能够被迅速且可靠地导入到金蝶云星空。这不仅加快了数据处理速度,也提升了整体工作效率。 其次,在实施过程中还要注意一些关键细节,比如如何调用旺店通·企业奇门的API接口来定时抓取退款订单,以及如何处理返回结果中的分页与限流问题。这些都直接影响着最终结果的完整性和正确性。 此外,针对两个系统之间可能存在的数据格式差异,我们使用自定义的数据转换逻辑进行适配,并借助可视化的数据流设计工具,将复杂的操作简化为直观易懂的流程图,提高了团队协同工作的效率。 最后,通过集中监控和告警系统,全程实时跟踪任务状态,一旦发生异常立即报警,并自动执行错误重试机制,以最大程度保障业务连续性。在上述方案下,不仅实现了精确、及时和有效的数据同步,还为后续相关应用提供了一整套可参照复制的方法论。 ![钉钉与ERP系统接口开发配置](https://pic.qeasy.cloud/D1.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台调用旺店通·企业奇门接口wdt.stockin.order.query.refund获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是关键的第一步。本文将深入探讨如何使用轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockin.order.query.refund`,并对获取的数据进行加工处理。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。以下是该接口的详细配置: ```json { "api": "wdt.stockin.order.query.refund", "effect": "QUERY", "method": "POST", "number": "order_no", "id": "stockin_id", "name": "order_no", "formatResponse": [ { "old": "stockin_time", "new": "stockin_date", "format": "date" } ], "idCheck": true, "joinBatch": "wdt.stockin.batch.detail", "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已完成单据)", “value”: “80” }, { “field”: “shop_nos”, “label”: “店铺编号(批量)”, “type”: “string”, “describe”: “代表店铺所有属性的唯一编码,用于店铺区分,ERP内支持自定义(ERP店铺界面设置),用于获取指定店铺单据数据信息” }, { “field”: “stockin_no”, “label”: “入库单号”, “type”: “string” } ], “otherRequest”: [ { “field”:“page_size”, “label”:“分页大小”, “type”:“string”, “describe”:“每页返回的数据条数,输入值范围1~100,不传本参数,输入值默认为40,使用举例单击这里”, “value”:“30” }, { “field”:“page_no”, “label”:“页号”, “type”:“string”, “describe”:“不传值默认从0页开始” } ], autoFillResponse: true, beatFlat: [“details_list”, "_batch_list"], condition: [ [ {“field”:“details_list.brand_name”,“logic”:“eq”,“value”:“金添食品”}, {“field”:“shop_no”,“logic”:"in",“value”:"JTSP004,JTSP002,JTSP001,sp_c156c8db887c7,JTSP005,JTSP003,JTSP006,JTSP007,JTSP010,JTSP011"} ] ], delay:50 } ``` #### 数据请求与清洗 在元数据配置中,我们定义了请求参数和响应格式。以下是关键步骤: 1. **请求参数设置**: - `start_time` 和 `end_time` 用于定义增量获取数据的时间范围。 - `status` 设置为 `80` 表示只查询已完成的入库单。 - `shop_nos` 用于指定店铺编号。 - `page_size` 和 `page_no` 用于分页控制。 2. **响应格式化**: - 将响应中的 `stockin_time` 字段重命名为 `stockin_date` 并转换为日期格式。 3. **条件过滤**: - 使用条件过滤功能,只保留品牌名称为"金添食品"且店铺编号在指定范围内的数据。 #### 数据转换与写入 在获取并清洗了源系统的数据后,我们需要进行进一步的数据转换和写入操作。这一步通常包括: 1. **字段映射**: - 将源系统中的字段映射到目标系统所需的字段。例如,将 `order_no` 映射到目标系统中的订单编号字段。 2. **数据校验**: - 根据业务规则对数据进行校验,例如检查数量和金额是否一致。 3. **批处理操作**: - 如果需要,可以将多个记录批量处理,以提高效率。 #### 实践案例 假设我们需要将从旺店通获取的退换货管理数据导入到金蝶的销售退货单中,并检查数量和金额是否正确。以下是一个具体的实践案例: 1. **调用接口获取数据**: ```json { api: 'wdt.stockin.order.query.refund', method: 'POST', request: { start_time: '2023-01-01 00:00:00', end_time: '2023-01-31 23:59:59', status: '80', shop_nos: 'JTSP004' } } ``` 2. **处理响应数据**: ```json [ { stockin_id: '12345', order_no: 'ORD001', stockin_date: '2023-01-15', details_list: [ { brand_name: '金添食品', quantity: 10, amount: 100 } ] } ] ``` 3. **转换并写入目标系统**: ```json [ { sales_return_id: '12345', order_number: 'ORD001', return_date: '2023-01-15', items: [ { product_name: '金添食品', quantity_returned: 10, total_amount_returned: 100 } ] } ] ``` 通过上述步骤,我们实现了从旺店通到金蝶系统的数据集成,并确保了每个环节的数据准确性和一致性。这不仅提高了业务流程的透明度,还大大提升了工作效率。 ![用友与WMS系统接口开发配置](https://pic.qeasy.cloud/S28.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台ETL转换:从旺店通到金蝶云星空 在数据集成的生命周期中,ETL(Extract, Transform, Load)转换是一个关键步骤。本文将详细探讨如何使用轻易云数据集成平台,将旺店通的退换管理数据转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。 #### 数据请求与清洗 首先,我们需要从源系统(旺店通)提取数据并进行清洗。假设我们已经完成了这一阶段,并且得到了结构化的数据。接下来,我们将重点关注如何利用元数据配置,将这些数据转换并写入金蝶云星空。 #### 元数据配置解析 以下是我们用于将数据写入金蝶云星空的元数据配置: ```json { "api": "batchSave", "effect": "EXECUTE", "method": "POST", "idCheck": true, "operation": { "method": "merge", "field": "order_no,stockin_date", "bodyName": "items", "bodySum": ["details_list_tax_amount", "details_list_num", "details_list__batch_list_num"], "header": ["order_no", "shop_no", "stockin_date", "logistics_no", "remark", "tid"], "body": ["details_list_goods_no", "details_list_tax_amount", "details_list_num", "details_list__batch_list_num", "details_list__batch_list_batch", "details_list_remark"] }, ... } ``` #### 数据转换与写入 1. **API接口设置** 我们使用`batchSave` API,通过POST方法将数据发送至金蝶云星空。`idCheck`设置为true,确保每条记录都有唯一标识。 2. **操作定义** - `method`: 使用`merge`方法合并记录。 - `field`: 指定合并依据的字段为`order_no`和`stockin_date`。 - `bodyName`: 定义子项名称为`items`。 - `bodySum`: 指定需要汇总计算的字段。 3. **请求参数映射** 请求参数通过字段映射进行配置,以确保源系统的数据能够正确地转换为目标系统所需的格式。例如: ```json { ... {"field":"FBillTypeID","label":"单据类型","type":"string","value":"XSTHD01_SYS"}, {"field":"FBillNo","label":"单据编号","type":"string","value":"{order_no}"}, {"field":"FSaleOrgId","label":"销售组织","type":"string","value":"103"}, ... } ``` 4. **明细信息处理** 明细信息是整个ETL过程中的关键部分,需要特别注意字段映射和计算逻辑。例如: ```json { ... {"field":"FMaterialId","label":"物料编码","type":"string","value":"{{items.details_list_goods_no}}"}, {"field":"FRealQty","label":"实退数量","type":"string","value":"_function case '{{items.details_list__batch_list_num}}' when 'No result' then '{{items.details_list_num}}' else '{{items.details_list__batch_list_num}}' end"}, {"field":"FTaxPrice","label":"含税单价","type":"string","value":"_function round({{list.details_list_tax_amount}}/{{list.details_list_num}},6)"}, ... } ``` 5. **其他请求参数** 除了上述主要参数外,还需要设置一些其他请求参数,如表单ID、操作类型等: ```json { ... {"field":"FormId","label":"业务对象表单Id","type":"string","value":"SAL_RETURNSTOCK"}, {"field":"Operation","label":"执行的操作","type":"string","value":"BatchSave"}, {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":true}, ... } ``` #### 实际应用案例 假设我们有以下源数据: ```json { "order_no": "SO123456", "shop_no": "SHOP001", ... } ``` 通过上述元数据配置,我们可以将其转换为如下目标格式,并通过API接口写入金蝶云星空: ```json { ... { FBillTypeID: 'XSTHD01_SYS', FBillNo: 'SO123456', FSaleOrgId: '103', ... FEntity: [ { FMaterialId: 'ITEM001', FRealQty: '10', FTaxPrice: '100.00', ... } ], ... } } ``` 通过这种方式,我们可以实现从旺店通到金蝶云星空的数据无缝对接,确保每个环节的数据都能准确、高效地传递和处理。 ![用友BIP接口开发配置](https://pic.qeasy.cloud/T8.png~tplv-syqr462i7n-qeasy.image)