ETL过程解析:从旺店通销售数据到金蝶云星空订单系统的转换

  • 轻易云集成顾问-张妍琪

旺店通销售出库对接金蝶销售订单(线上)——高效数据集成方案分享

在现代企业运营中,将不同平台上的数据无缝集成已成为提高业务效率和决策准确性的关键环节。本次案例将聚焦于如何使用轻易云数据集成平台,实现旺店通·企业奇门与金蝶云星空的有效对接,确保销售出库单从旺店通顺利转化为金蝶云中的销售订单。

需求背景

某大型电商企业主要依赖旺店通系统进行库存管理,同时利用金蝶云星空处理财务与ERP事务。为了打通这两个重要系统间的数据流,该项目需要实现以下几项关键任务:

  1. 确保从旺店通获取到的销售出库单不漏单。
  2. 实现大量数据快速写入到金蝶云星空。
  3. 保证定时可靠地抓取旺店通·企业奇门接口的数据。
  4. 处理接口分页和限流问题,以保证系统稳定性。

技术挑战

在实际操作中,我们面临着众多技术挑战,包括但不限于:

  • 如何调用并处理wdt.stockout.order.query.trade接口以获取完整、准确的数据?
  • 如何针对大批量的记录进行高效的数据写入到金蝶云星空,并且尽可能减少网络延迟?
  • 数据格式差异带来的映射问题,以及如何通过定制化字段匹配实现精确传输?
  • 在遇见异常情况下,制定可靠的错误重试机制,确保数据不丢失、不重复。

本案例详细介绍了我们所采用的方法,包括具体API调用细节、分页及限流处理策略以及各类异常情况处置流程。希望读者能通过本次分享,对类似项目有一个更清晰、更全面的认识,为后续实施提供参考依据。 金蝶云星空API接口配置

调用源系统旺店通·企业奇门接口wdt.stockout.order.query.trade获取并加工数据

在数据集成生命周期的第一步中,调用源系统接口获取并加工数据是至关重要的一环。本文将详细探讨如何使用轻易云数据集成平台配置元数据,调用旺店通·企业奇门接口wdt.stockout.order.query.trade来获取销售出库订单,并进行必要的数据清洗和转换。

接口调用配置

首先,我们需要配置API接口的基本信息和请求参数。根据提供的元数据配置,接口调用的基本信息如下:

  • API: wdt.stockout.order.query.trade
  • 方法: POST
  • 分页大小: 100

请求参数包括时间范围、状态、系统订单编号、原始单号、出库单号、店铺编号和仓库编号等。以下是具体的请求参数配置:

{
  "start_time": "{{LAST_SYNC_TIME|datetime}}",
  "end_time": "{{CURRENT_TIME|datetime}}",
  "status": "95",  // 已发货状态
  "shop_no": "指定店铺编号",
  "warehouse_no": "指定仓库编号",
  "page_size": "{PAGINATION_PAGE_SIZE}",
  "page_no": "{PAGINATION_START_PAGE}"
}

数据过滤条件

为了确保我们获取的数据符合业务需求,需要设置过滤条件。根据元数据配置,我们排除了特定店铺编号的数据:

"condition":[
  [{"field":"shop_no","logic":"neq","value":"002"},
   {"field":"shop_no","logic":"neqv2","value":"CTPDZ01002"},
   {"field":"shop_no","logic":"neqv2","value":"CRT01001"},
   {"field":"shop_no","logic":"neqv2","value":"CRT02001"},
   {"field":"shop_no","logic":"neqv2","value":"CRT02002"}]
]

这些条件确保了我们只获取不包含上述店铺编号的数据。

数据清洗与转换

在获取到原始数据后,我们需要对其进行清洗和转换,以便后续处理。以下是几个关键步骤:

  1. 字段重命名:将consign_time字段重命名为consign_time_new,并将其格式化为日期类型。

    "formatResponse":[{"old":"consign_time","new":"consign_time_new","format":"date"}]
  2. 扁平化处理:将嵌套的details_list字段进行扁平化处理,以便于后续的数据操作。

    "beatFlat":["details_list"]
  3. 增量数据获取:为了实现增量更新,我们使用定时任务(crontab)来定期拉取新数据。增量获取的时间范围由start_timeend_time字段决定。

    "omissionRemedy":{
     "crontab":"0 0 * * *",
     "takeOverRequest":[
       {"id":"4623d86a-46bc-303d-8f30-30945add6e62", 
        "field":"start_time", 
        "label":"开始时间", 
        "type":"datetime", 
        "is_required":true, 
        "describe":"增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss", 
        "value":"{{DAYS_AGO_1|datetime}}"
       },
       {"id":"189afb22-1012-3a81-9c16-e5ac86c0382b", 
        "field":"end_time", 
        "label":"结束时间", 
        "type":"datetime", 
        "is_required":true, 
        "describe":"增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss", 
        "value":"{{CURRENT_TIME|datetime}}"
       }
     ]
    }

数据校验与写入

在完成上述步骤后,我们需要对清洗和转换后的数据进行校验,以确保其完整性和准确性。例如,可以通过检查每条记录的唯一标识符(如stockout_id)来避免重复写入。

"idCheck": true,
"number": "order_no",
"id": "stockout_id"

校验通过后,将处理好的数据写入目标系统,如金蝶销售订单系统。这一步通常涉及到将清洗后的数据映射到目标系统的相应字段,并调用目标系统的API进行写入操作。

通过以上步骤,我们实现了从旺店通·企业奇门接口获取销售出库订单,并进行了必要的数据清洗和转换,为后续的数据处理奠定了坚实基础。 用友BIP接口开发配置

数据集成生命周期中的ETL转换:将旺店通销售出库数据写入金蝶云星空

在数据集成的生命周期中,ETL(提取、转换、加载)是一个关键环节。本文将深入探讨如何使用轻易云数据集成平台将已经集成的源平台数据进行ETL转换,并转为目标平台金蝶云星空API接口所能够接收的格式,最终写入目标平台。

元数据配置解析

元数据配置是实现ETL过程的核心。以下是一个详细的元数据配置示例:

{
  "api": "batchSave",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "rowsKey": "array",
    "rows": 1,
    "method": "batchArraySave"
  },
  "groupCalculate": {
    "headerGroup": ["consign_time_new", "shop_no", "KdStock"],
    "bodyGroup": ["details_list_spec_no"],
    "bodyName": "details",
    "calculate": {
      "details_list_share_amount": "$sum",
      "details_list_goods_count": "$sum"
    }
  },
  ...
}

数据请求与清洗

首先,我们需要从源系统(旺店通)提取销售出库数据。提取的数据可能包含多个字段,如单据类型、单据编号、销售组织、日期、客户等。这些字段需要根据目标系统(金蝶云星空)的要求进行转换。

数据转换

在转换过程中,我们需要将源系统的数据字段映射到目标系统的数据字段。例如:

  • FBillTypeID 映射到 WDTXSDD
  • FSaleOrgId 映射到 _mongoQuery f3b55dc4-44d0-3a14-a28f-c372d39e70cc findField=content.FSaleOrgId_FNumber where={"content.FNumber":{"$eq":"{shop_no}"}}
  • FDate 映射到 {consign_time_new}
  • FCustId 映射到 _mongoQuery f3b55dc4-44d0-3a14-a28f-c372d39e70cc findField=content.FCustomerId_FNumber where={"content.FNumber":{"$eq":"{shop_no}"}}

这些映射关系通过元数据配置中的 parservalue 字段来实现。

数据聚合与计算

在某些情况下,我们需要对提取的数据进行聚合和计算。例如,在订单明细中,我们需要计算每个物料的总金额和总数量:

"groupCalculate": {
  "headerGroup": ["consign_time_new", "shop_no", "KdStock"],
  "bodyGroup": ["details_list_spec_no"],
  "bodyName": "details",
  "calculate": {
    "details_list_share_amount": "$sum",
    "details_list_goods_count": "$sum"
  }
}

数据写入

完成数据转换后,我们使用金蝶云星空的API接口将数据写入目标系统。以下是一个典型的API请求结构:

{
  ...
  "request":[
    {"field":"FBillTypeID","label":"单据类型","type":"string","value":"WDTXSDD"},
    {"field":"FBillNo","label":"单据编号","type":"string"},
    {"field":"FSaleOrgId","label":"销售组织","type":"string","value":"_mongoQuery ..."},
    {"field":"FDate","label":"日期","type":"string","value":"{consign_time_new}"},
    {"field":"FCustId","label":"客户","type":"string","value":"_mongoQuery ..."},
    ...
    {"field":"FSaleOrderEntry","label":"订单明细","type":"array","children":[
      {"field":"FMaterialId","label":"物料编码","type":"string","value":"{{details.details_list_spec_no}}"},
      {"field":"FTaxPrice","label":"含税单价","type":"string","value":"_function round( {{details.details_list_share_amount}}/{{details.details_list_goods_count}} , 6)"},
      {"field":"FQty","label":"销售数量","type":"string","value":"{{details.details_list_goods_count}}"},
      ...
    ]}
  ],
  ...
}

通过上述配置,我们可以确保数据按照金蝶云星空API接口的要求进行格式化,并成功写入目标系统。

API调用与执行

最后,通过调用金蝶云星空的批量保存接口(batchSave),我们可以将转换后的数据提交并审核:

{
  ...
  "otherRequest":[
    {"field":"FormId","label":"业务对象表单Id","type":"string","value":"SAL_SaleOrder"},
    {"field":"Operation","label":"执行的操作","type":"string","value":"BatchSave"},
    {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"true"}
  ]
}

通过上述步骤,轻易云数据集成平台能够高效地完成从源系统到目标系统的数据ETL过程,实现不同系统间的数据无缝对接。 打通企业微信数据接口

更多系统对接方案