数据转换与写入:ETL将数据集成到金蝶云星辰V2的流程解析

  • 轻易云集成顾问-钟家寿
### 旺店通·企业奇门与金蝶云星辰V2的采购入库集成案例分享 在如今复杂多变的供应链管理中,实现不同系统间的数据无缝对接,是确保业务高效运转的重要保障。本文将详细介绍如何利用轻易云数据集成平台,将旺店通·企业奇门的采购入库数据成功集成到金蝶云星辰V2,并实现稳定可靠的数据传输。 一、问题背景及需求分析 为了满足企业日益增长的信息化需求,我们需要从旺店通·企业奇门获取实时的采购入库信息(API接口:wdt.stockin.order.query.purchase),并将其准确地批量写入到金蝶云星辰V2系统(API接口:/jdy/v2/scm/pur_inbound)。考虑到这两个系统在数据格式和接口处理上的差异,我们面临如下几个技术挑战: 1. **确保不漏单**地抓取并传输旺店通·企业奇门的数据。 2. 处理因数据量大带来的分页和限流问题,以保证大量数据快速写入。 3. 在对接过程中,如何解决两者之间的数据格式差异,以及异常处理与错误重试机制。 二、主要技术实施步骤概述 我们采用了定时任务调度的方法,每隔固定时间段(如每小时)自动调用`wdt.stockin.order.query.purchase` API接口,从而保证新产生的库存订单能够被及时抓取。同时,通过分页查询来应对大规模数据请求,防止出现限流或超时情况。在具体实施过程中,我们重点关注以下几点: 1. **调用接口细节**: 遵循旺店通·企业奇门API文档,对每次请求进行参数校验与设置,确保能正确返回所需信息。例如,通过合理设定分页大小,可以有效避免频繁触发API速率限制。 2. **数据转换与映射**: 获得原始数据后,根据金蝶云星辰V2要求进行字段匹配和转换,完成JSON对象结构调整。这一步至关重要,因为两者采用完全不同的数据模型,需要准确映射以维持语义一致性。 3. **错误重试及日志记录**: 每次尝试写入操作均附加错误捕获机制。一旦发生失败,会通过预定义逻辑重新提交,同时保留完整过程日志,以便于追踪和审计。 三、结果展示与优化建议 经过多轮测试验证,该方案已成功上线运行,极大提高了跨系统协同工作的效率。此外,为进一步提升整体性能,可考虑引入更多优化策略,如动态调节查询频率、更精细化分片处理等。 下一部分 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/D19.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口wdt.stockin.order.query.purchase获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockin.order.query.purchase`,并对获取的数据进行初步加工。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。以下是该接口的主要配置参数: - **API名称**: `wdt.stockin.order.query.purchase` - **请求方法**: `POST` - **分页设置**: 每页50条记录 - **过滤条件**: 排除仓库编号为`WH2024052601`的数据 - **ID检查**: 启用 #### 请求参数详解 在实际调用过程中,我们需要传递多个请求参数,这些参数决定了我们能否成功获取所需的数据。 1. **开始时间 (`start_time`)** - 类型:datetime - 描述:增量获取数据的开始时间,格式为`yyyy-MM-dd HH:mm:ss` - 示例值:`{{LAST_SYNC_TIME|datetime}}` 2. **结束时间 (`end_time`)** - 类型:datetime - 描述:增量获取数据的结束时间,格式为`yyyy-MM-dd HH:mm:ss` - 示例值:`{{CURRENT_TIME|datetime}}` 3. **状态 (`status`)** - 类型:string - 描述:入库单状态,支持多个状态值,用逗号分隔 - 示例值:`60,80` 4. **上层单据编号 (`src_order_no`)** - 类型:string - 描述:上层单据编号,默认为采购单号 5. **仓库编号 (`warehouse_no`)** - 类型:string - 描述:代表仓库所有属性的唯一编码,用于区分不同仓库的数据 6. **分页大小 (`page_size`)** - 类型:string - 描述:每页返回的数据条数,默认值为40,范围1~100 - 示例值:`{PAGINATION_PAGE_SIZE}` 7. **页号 (`page_no`)** - 类型:string - 描述:分页页号,不传值默认从0页开始 - 示例值:`{PAGINATION_START_PAGE}` #### 数据请求与清洗 在配置好元数据后,我们可以发起API请求。以下是一个典型的请求示例: ```json { "start_time": "2023-01-01 00:00:00", "end_time": "2023-01-31 23:59:59", "status": "60,80", "warehouse_no": "WH2023052602", "page_size": 50, "page_no": 0 } ``` 此请求将返回指定时间范围内、状态为60或80、且仓库编号不为`WH2024052601`的采购入库单数据。 #### 数据转换与写入 在成功获取到原始数据后,我们需要对其进行转换和清洗,以便后续处理和存储。以下是一些常见的数据清洗步骤: 1. **字段映射与重命名** 将原始字段映射到目标系统所需的字段。例如,将`order_no`映射为目标系统中的订单编号字段。 2. **数据类型转换** 确保所有字段的数据类型符合目标系统要求。例如,将字符串类型的日期字段转换为日期类型。 3. **过滤无效数据** 根据业务规则过滤掉无效或不完整的数据。例如,排除缺少关键字段(如订单编号或仓库编号)的记录。 4. **去重处理** 如果启用了ID检查,可以通过唯一标识符(如`stockin_id`)去重,确保不会重复处理相同的数据。 #### 实时监控与调试 在整个过程中,通过轻易云平台提供的实时监控功能,可以随时查看数据流动和处理状态。这有助于及时发现并解决潜在问题,提高整体效率和透明度。 通过上述步骤,我们可以高效地调用旺店通·企业奇门接口获取采购入库单数据,并对其进行初步加工,为后续的数据处理和分析奠定坚实基础。 ![金蝶与SCM系统接口开发配置](https://pic.qeasy.cloud/S13.png~tplv-syqr462i7n-qeasy.image) ### 数据集成与ETL转换:将数据写入金蝶云星辰V2API接口 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,转为目标平台金蝶云星辰V2API接口所能够接收的格式,并最终写入目标平台。本文将详细探讨如何使用轻易云数据集成平台配置元数据,实现采购入库V2.0方案的数据写入。 #### API接口与元数据配置 为了实现数据的无缝对接,我们需要了解目标平台API接口的具体要求和元数据配置。以下是金蝶云星辰V2API接口的相关元数据配置: ```json { "api": "/jdy/v2/scm/pur_inbound", "effect": "EXECUTE", "method": "POST", "number": "1", "id": "1", "name": "1", "idCheck": true, "request": [ {"field": "bill_date", "label": "单据日期", "type": "string", "describe": "单据日期", "value": "{check_time}"}, {"field": "bill_no", "label": "单据编码", "type": "string", "describe": "单据编码", "value": "{order_no}"}, {"field": "transtype", "label": "业务类型", "type": "string", "describe": "数量", "value":"4"}, {"field": "supplier_number", "label":"供应商编码","type":"string","describe":"供应商编码","value":"{provider_no}"}, {"field":"remark","label":"备注","type":"string","describe":"商品编码","value":"{purchase_no}"}, {"field":"operation_key","label":"操作类型","type":"string","describe":"仓库编码","value":"audit"}, {"field":"material_entity","label":"商品分录","type":"array","describe":"含税单价","value":"details_list", "children":[ {"field":"material_number","label":"商品编码","type":"string","value":"{{details_list.goods_no}}"}, {"field":"stock_number","label":"仓库编码","type":"string","value":"{{details_list.warehouse_no}}"}, {"field":"qty","label":"数量","type":"string","value":"{{details_list.right_num}}"}, {"field":"unit_id", "label" : "单位", "type" : "string", "value" : "_mongoQuery d476a55d-acc7-3156-9c7f-b9f9dce596b5 findField=content.base_unit_id where={\"content.number\": {\"$eq\":\"{{details_list.goods_no}}\"}}" }, {"field" : "tax_price", "label" : "含税单价", "type" : "string", "value" : "{{details_list.tax_price}}" }, {"field" : "cess", "label" : "税率", "type" : "string", "value" : "_function {{details_list.tax}} * (100)" }, {"field" : "is_free", "label" : "是否赠品", "type" : int, "value" : "_function case '{{details_list.tax_price}}' when '0.0000' then '1' else '0' end" } ] } ] } ``` #### 数据转换与写入 在进行ETL转换时,我们需要特别注意以下几个关键字段和其对应的处理逻辑: 1. **单据日期(bill_date)**:该字段需要从源数据中的`check_time`字段提取,并直接映射到目标字段。 2. **单据编码(bill_no)**:从源数据中的`order_no`字段提取,并映射到目标字段。 3. **业务类型(transtype)**:固定值为“4”,无需动态映射。 4. **供应商编码(supplier_number)**:从源数据中的`provider_no`字段提取,并映射到目标字段。 5. **备注(remark)**:从源数据中的`purchase_no`字段提取,并映射到目标字段。 6. **操作类型(operation_key)**:固定值为“audit”,无需动态映射。 7. **商品分录(material_entity)**: - **商品编码(material_number)**:从子对象`details_list.goods_no`中提取。 - **仓库编码(stock_number)**:从子对象`details_list.warehouse_no`中提取。 - **数量(qty)**:从子对象`details_list.right_num`中提取。 - **单位(unit_id)**:通过MongoDB查询获取,查询条件为子对象`details_list.goods_no`。 - **含税单价(tax_price)**:从子对象`details_list.tax_price`中提取。 - **税率(cess)**:通过函数计算,将子对象`details_list.tax`乘以100。 - **是否赠品(is_free)**:通过函数判断,如果子对象`details_list.tax_price`为“0.0000”,则值为1,否则为0。 #### 实际应用案例 假设我们有如下源平台的数据: ```json { "check_time": "2023-10-01T00:00:00Z", "order_no": "#12345678", ... } ``` 我们需要将其转换并写入到金蝶云星辰V2API接口。首先,通过元数据配置,我们可以生成如下请求体: ```json { ... } ``` 通过上述步骤,我们能够确保源平台的数据准确、无误地转换并写入到目标平台,从而实现系统间的数据无缝对接。这不仅提高了业务流程的自动化程度,也确保了数据的一致性和完整性。 ![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/T16.png~tplv-syqr462i7n-qeasy.image)