从数据获取到ETL:旺店通与金蝶云星辰V2数据集成全面解析

  • 轻易云集成顾问-黄宏棵

案例解析:旺店通·企业奇门数据集成到金蝶云星辰V2

在企业信息系统集成过程中,实现不同平台间的数据对接是一项极具挑战的任务。本文将聚焦于一个实际运行的对接方案——从旺店通·企业奇门导出数据并集成到金蝶云星辰V2的案例,探讨如何通过轻易云数据集成平台高效可靠地完成这项工作。

整体概览

本次项目涉及将“其他出库(生产)”类型的数据从旺店通·企业奇门,通过API接口wdt.stockout.order.query获取后,再批量写入到金蝶云星辰V2的新版本接口/jdy/v2/scm/inv_other_out中。其中需要解决的重要技术问题包括确保数据不漏单、实现大量数据的快速写入以及处理两者之间的数据格式差异等。

数据抓取与转换

我们采用定时可靠抓取策略,每小时调用一次旺店通·企业奇门提供的API接口wdt.stockout.order.query,以获取最新的出库订单记录。在抓取过程中,我们特别关注分页和限流的问题。为此,在请求参数中加入了分页信息,并根据返回结果中的状态码进行限流判断,保证每次操作都在可控范围内顺利完成。

快速批量写入与映射优化

为了应对大量数据快速稳定地写入至金蝶云星辰V2,我们设计了一套批量处理机制,将多条订单记录合并一组,通过轻易云的平台特性批量传输。同时,为了解决源端和目标端字段及格式的不一致问题,对每个字段进行了精细化映射。这包括简单字符型字段转换,以及复杂结构体字段重构,以确保最终提交给金蝶云的数据满足其严格要求。

异常处理与重试机制

在整个对接过程中,不可避免会遇到网络波动或意外错误引起的失败事件。针对这些情况,我们使用了详细完整的日志监控系统来实时追踪操作进展和状态。一旦发现异常,可以触发自动重试机制,基于上一次失败时保存下来的上下文信息重新发起请求,从而保证整体流程的不间断性和准确性。

本系列文章开篇介绍了此次系统对接集成关键部分,其它具体技术实现细节将在后续章节全面展开,包括如何高效管理生命周期事件、更多分页策略优化方法及错误捕获技巧等。

打通用友BIP数据接口

使用轻易云数据集成平台调用旺店通·企业奇门接口获取并加工数据

在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口wdt.stockout.order.query,并对获取的数据进行初步加工。

接口概述

wdt.stockout.order.query接口用于查询出库单信息,支持按最后修改时间增量获取数据。该接口采用POST请求方式,返回的数据包含出库单的详细信息。为了确保数据的准确性和完整性,我们需要配置相关的元数据。

元数据配置详解

以下是我们在轻易云平台上配置的元数据:

{
  "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":"5"
    },
    {
      ...

请求参数解析

  1. 时间参数

    • start_timeend_time 分别表示查询的起始和结束时间,格式为 yyyy-MM-dd HH:mm:ss。这些参数通过模板变量 {{LAST_SYNC_TIME|datetime}}{{CURRENT_TIME|datetime}} 动态生成。
  2. 订单类型

    • order_type 固定为 5,表示生产出库。
  3. 状态过滤

    • status 设置为 95,110,表示查询已发货和已完成的订单。
  4. 仓库编号

    • warehouse_no 用于区分不同仓库,这里不传递具体值以支持多仓库查询。
  5. 分页参数

    • page_sizepage_no 用于控制分页,每页返回30条记录,从第0页开始。

数据请求与清洗

在配置好元数据后,通过轻易云平台发送POST请求到旺店通·企业奇门接口。示例请求体如下:

{
  ...
  {
    ...
    {"start_time":"2023-10-01 00:00:00","end_time":"2023-10-01 23:59:59","order_type":"5","status":"95,110"},
    {"page_size":"30","page_no":"0"}
  }
}

请求返回的数据需要经过清洗和转换,以便后续处理。以下是常见的数据清洗步骤:

  1. 字段映射:将返回的数据字段映射到目标系统所需的字段。例如,将返回的 stockout_id 映射为目标系统中的唯一标识符。
  2. 数据过滤:根据业务需求过滤掉不必要的数据。例如,只保留特定状态或特定仓库的数据。
  3. 格式转换:将日期、数值等字段转换为目标系统所需的格式。

数据转换与写入

经过清洗后的数据可以进一步转换,并写入到目标系统中。这一步通常涉及到复杂的业务逻辑和规则,需要根据具体需求进行定制化开发。

通过上述步骤,我们成功地从旺店通·企业奇门接口获取了所需的生产出库单信息,并对其进行了初步加工,为后续的数据处理打下了坚实基础。 企业微信与ERP系统接口开发配置

将源平台数据ETL转换并写入金蝶云星辰V2API接口的技术案例

在轻易云数据集成平台中,将源平台的数据进行ETL(提取、转换、加载)转换,并最终写入目标平台金蝶云星辰V2API接口,是一个复杂而关键的步骤。本文将详细探讨如何通过配置元数据,实现这一过程。

API接口配置与元数据解析

我们需要将源平台的数据转换为金蝶云星辰V2API接口所能接收的格式。根据提供的元数据配置,目标API接口为/jdy/v2/scm/inv_other_out,请求方法为POST。以下是关键字段及其对应关系:

  • bill_date(单据日期):映射到源数据中的consign_time
  • bill_no(单据编码):映射到源数据中的order_no
  • trans_type_id(业务类型id):固定值13
  • operation_key(操作类型):固定值audit
  • material_entity(商品分录):这是一个数组,包含多个子字段,如商品ID、数量、单位和仓库等

数据提取与清洗

首先,从源平台提取原始数据,并进行必要的清洗操作。假设源数据结构如下:

{
  "consign_time": "2023-10-01",
  "order_no": "ORD123456",
  "details_list": [
    {
      "goods_no": "G001",
      "goods_count": 10,
      "warehouse_no": "W001"
    },
    {
      "goods_no": "G002",
      "goods_count": 5,
      "warehouse_no": "W002"
    }
  ]
}

数据转换

根据元数据配置,我们需要将上述原始数据转换为目标API所需的格式。具体步骤如下:

  1. 单据日期和单据编码:直接映射

    {
     "bill_date": "{consign_time}",
     "bill_no": "{order_no}"
    }
  2. 业务类型和操作类型:固定值填充

    {
     "trans_type_id": "13",
     "operation_key": "audit"
    }
  3. 商品分录:复杂嵌套结构,需要进一步处理每个商品条目

    • 商品ID (material_id) 和 单位 (unit_id) 需要通过MongoDB查询获取。
    • 仓库ID (stock_id) 通过集合查询获取。

具体实现代码示例如下:

let transformedData = {
  bill_date: sourceData.consign_time,
  bill_no: sourceData.order_no,
  trans_type_id: '13',
  operation_key: 'audit',
  material_entity: sourceData.details_list.map(item => {
    return {
      material_id: queryMongoDB('d476a55d-acc7-3156-9c7f-b9f9dce596b5', 'content.id', { 'content.number': item.goods_no }),
      qty: item.goods_count.toString(),
      unit_id: queryMongoDB('d476a55d-acc7-3156-9c7f-b9f9dce596b5', 'content.base_unit_id', { 'content.number': item.goods_no }),
      stock_id: findCollection('9cf5314a-709f-3e72-b021-c9edae06888f', 'id', { number: item.warehouse_no })
    };
  })
};

function queryMongoDB(collectionId, field, query) {
  // 模拟MongoDB查询函数,根据实际情况实现
}

function findCollection(collectionId, field, query) {
  // 模拟集合查询函数,根据实际情况实现
}

数据加载

最后,将转换后的数据通过POST请求发送至金蝶云星辰V2API接口:

fetch('/jdy/v2/scm/inv_other_out', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(transformedData)
})
.then(response => response.json())
.then(data => console.log('Success:', data))
.catch(error => console.error('Error:', error));

总结

通过以上步骤,我们成功地将源平台的数据进行了ETL转换,并写入了金蝶云星辰V2API接口。这一过程不仅涉及到简单的数据映射,还包括复杂的嵌套结构处理和多系统间的数据查询与整合。在实际应用中,根据具体需求和系统环境,可能还需要进一步优化和调整。 钉钉与MES系统接口开发配置

更多系统对接方案