如何将数据转换并加载到金蝶云星辰V2:实践案例

  • 轻易云集成顾问-卢剑航
### 系统对接集成案例分享:旺店通·企业奇门数据集成到金蝶云星辰V2 在实施企业信息化系统集成时,数据流的无缝对接是确保业务顺畅运行的关键。本文将详细探讨如何通过轻易云数据集成平台,实现旺店通·企业奇门的数据高效、准确地导入至金蝶云星辰V2中。在这个过程中,我们选用的实际运行方案为“其他出库(委外)V2.0”,旨在优化订单处理流程,提高系统一致性。 首先,要从旺店通·企业奇门获取出库订单的相关数据,我们调用了其API `wdt.stockout.order.query`。为了避免因分页和限流问题导致的数据遗漏或重复读取,我们采用了定时可靠的数据抓取机制,并实时监控接口返回结果,确保所有订单都能被完整抓取并妥善记录。 下一个挑战是处理从旺店通获取到的大量数据。在这一步中,我们专注于快速、高效地将这些数据写入金蝶云星辰V2,通过批量写入功能 `/jdy/v2/scm/inv_other_out` 大幅度缩短了同步时间。同时,为应对两大平台之间存在的数据格式差异,在映射过程中特别进行了定制化调整,以保证目标数据库能够正确识别和存储各类字段信息。 值得注意的是,整个集成过程不仅需要关注正常情况下的数据传输,还必须构建一套完善的异常处理与错误重试机制。当遇到网络抖动或者第三方API响应异常时,这些机制能够自动检测并采取相应措施进行重试操作,最大程度上降低因意外情况引起的数据丢失风险。 通过上述步骤及技术手段,不仅实现了旺店通·企业奇门与金蝶云星辰V2系统间稳定、高效、安全的数据交互,还提升了整体业务运维效率,为后续更多跨系统协同打下坚实基础。 ![系统集成平台API接口配置](https://pic.qeasy.cloud/D16.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口获取并加工数据 在数据集成生命周期的第一步,我们需要调用源系统的API接口以获取原始数据,并对其进行初步加工。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口 `wdt.stockout.order.query`,并对返回的数据进行处理。 #### 接口配置与请求参数 首先,我们需要配置API接口的元数据。以下是我们使用的元数据配置: ```json { "api": "wdt.stockout.order.query", "method": "POST", "number": "order_no", "id": "stockout_id", "pagination": { "pageSize": 30 }, "condition": [ [ { "field": "warehouse_no", "logic": "neq", "value": "WH2024052601" } ] ], "idCheck": true, "request": [ { "field": "start_time", "label": "开始时间", "type": "string", "describe": "按最后修改时间增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{LAST_SYNC_TIME|datetime}}" }, { "field": "end_time", "label": "结束时间", "type": "string", "describe": "按最后修改时间增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{CURRENT_TIME|datetime}}" }, { "field": "order_type", "label": "出库单类型", "type": "string", "describe":"2调拨出库,3采购退货出库,4盘亏出库,5生产出库,7其他出库,8多发出库,9纠错出库,10保修配件出库,11初始化出库,12jit拣货出库,13委外出库", "value":"13" }, { "field":"status", ... ``` #### 请求参数解析 1. **时间参数**:`start_time` 和 `end_time` 用于按最后修改时间增量获取数据。`start_time` 使用上次同步时间,`end_time` 使用当前时间。 2. **订单类型**:`order_type` 固定为 `13`,表示委外出库。 3. **订单状态**:默认查询已发货和已完成的单据,即状态为 `95` 和 `110`。 4. **仓库编号排除条件**:排除仓库编号为 `WH2024052601` 的记录。 #### 数据请求与分页处理 为了确保高效的数据传输,我们使用分页机制。每次请求返回最多30条记录,通过调整 `page_no` 参数逐页获取所有符合条件的数据。 ```json { ... ,"otherRequest":[ { ... }, { ... } ] } ``` #### 数据清洗与转换 在获取到原始数据后,需要对其进行清洗和转换,以便后续处理和存储。以下是一些常见的数据清洗操作: 1. **字段映射**:将API返回的数据字段映射到目标系统所需的字段。例如,将 `order_no` 映射为目标系统中的订单编号。 2. **数据过滤**:根据业务需求过滤掉不需要的记录。例如,只保留状态为已发货和已完成的记录。 3. **格式转换**:将日期、金额等字段转换为目标系统所需的格式。 #### 实际案例分析 假设我们从API返回了以下部分数据: ```json { ... } ``` 我们需要对这些数据进行如下处理: 1. 将 `order_no` 转换为目标系统中的订单编号。 2. 将日期字段从字符串格式转换为日期对象。 3. 根据业务规则过滤掉不符合条件的记录。 通过上述步骤,我们可以确保从源系统获取的数据经过清洗和转换后,能够无缝对接到目标系统中,从而实现高效的数据集成。 以上就是调用旺店通·企业奇门接口获取并加工数据的详细过程。在实际操作中,根据具体业务需求可能还需要进行更多定制化处理。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/S22.png~tplv-syqr462i7n-qeasy.image) ### 数据集成与转换:将数据写入金蝶云星辰V2 API接口 在数据集成的生命周期中,第二步至关重要,即将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并最终写入目标平台。在本案例中,我们将探讨如何使用轻易云数据集成平台,将数据转换为金蝶云星辰V2 API接口所能接收的格式,并写入目标平台。 #### 元数据配置解析 首先,我们需要理解元数据配置中的各个字段及其含义: ```json { "api": "/jdy/v2/scm/inv_other_out", "effect": "EXECUTE", "method": "POST", "number": "id", "id": "id", "name": "id", "idCheck": true, "request": [ { "field": "bill_date", "label": "单据日期", "type": "string", "value": "{consign_time}" }, { "field": "bill_no", "label": "单据编码", "type": "string", "value": "{order_no}" }, { "field": "trans_type_id", "label": "业务类型id", "type": "string", "value": "13" }, { "field": "operation_key", "label": "操作类型", "type": "string", "value": "audit" }, { ... } ] } ``` - `api`: 接口路径 `/jdy/v2/scm/inv_other_out` - `method`: HTTP请求方法 `POST` - `number`, `id`, `name`: 标识字段 - `request`: 请求体字段配置 #### 数据请求与清洗 在此阶段,我们从源系统提取原始数据,并进行必要的清洗和预处理。假设我们已经获得了如下格式的源数据: ```json { "_id":"12345abcde", "_source":{ ... "_details_list":[ {"goods_no":"1001",...}, {"goods_no":"1002",...} ] } } ``` #### 数据转换与写入 接下来,我们将源数据转换为目标平台所需的格式。以下是关键步骤: 1. **提取并映射字段**: - 将`consign_time`映射到`bill_date` - 将`order_no`映射到`bill_no` - 固定值`13`赋给`trans_type_id` - 固定值`audit`赋给`operation_key` 2. **处理商品分录**: - 对于每个商品分录(即数组中的每个对象),需要查询MongoDB以获取相关信息,如商品ID、单位ID等。 - 使用 `_mongoQuery` 和 `_findCollection` 方法进行查询和映射。 例如,对于商品编号为 `1001` 的商品,执行以下查询: ```json { "_mongoQuery d476a55d-acc7-3156-9c7f-b9f9dce596b5 findField=content.id where={\"content.number\": {\"$eq\":\"1001\"}}" } ``` 3. **构建请求体**: 最终构建的请求体应符合API要求,例如: ```json { ... { field: 'material_entity', label: '商品分录', type: 'array', value: 'details_list', children: [ { field: 'material_id', label: '商品', type: 'string', value: '_mongoQuery d476a55d-acc7-3156-9c7f-b9f9dce596b5 findField=content.id where={"content.number":{"$eq":"{{details_list.goods_no}}"}}' }, ... ] } } ``` #### 最终请求示例 最终生成的请求体可能如下: ```json { ..., { bill_date: '2023-10-01', bill_no: 'ORD12345', trans_type_id: '13', operation_key: 'audit', material_entity: [ { material_id: 'MAT001', // 从MongoDB查询结果 qty: '10', // 从 details_list 中提取 unit_id: 'UNIT001', // 从MongoDB查询结果 stock_id: 'STOCK001' // 从 findCollection 查询结果 }, ... ] } } ``` 通过上述步骤,我们成功地将源平台的数据转换为金蝶云星辰V2 API接口所能接收的格式,并准备好发送POST请求以完成数据写入。 ![钉钉与MES系统接口开发配置](https://pic.qeasy.cloud/T21.png~tplv-syqr462i7n-qeasy.image)