ETL实战:数据清洗与映射转换实现金蝶云星空集成

  • 轻易云集成顾问-林峰

案例分享:旺店通·企业奇门数据集成到金蝶云星空

在本案例中,我们将深入探讨如何利用轻易云数据集成平台,将旺店通·企业奇门的入库单数据成功集成至金蝶云星空,实现高效的数据同步与业务管理。这个具体方案名称为“旺店通入库单-金蝶其他入库单【盘盈入库】”。

确保数据不漏单

为了确保从旺店通·企业奇门获取的数据不会出现遗漏,我们首先需要调用其提供的wdt.stockin.order.query接口,该API可以保证定时可靠地抓取最新的库存信息。在配置过程中,设置适当的轮询间隔时间,并利用轻易云的数据监控功能,确保每次请求均完整返回所需数据。

大量数据快速写入

一旦获取到足够的信息后,需要批量将这些记录高效、安全地写入金蝶云星空系统。通过调用其提供的batchSave API,可以实现大规模、快速的数据写操作。同时,为了最大化性能,采用异步处理及多线程技术,以提高吞吐量并降低延迟。

数据格式转换与映射对接

由于两者之间涉及的数据格式存在差异,在进行实际传输之前,需要进行必要的数据清洗和转换。例如,从旺店通实例化出来的是JSON对象,而在进入金蝶之前可能需要符合特定XML或另一种结构标准。因此,通过自定义脚本或者内置映射工具,对字段进行一对一映射并转换成为目标格式。

分页和限流处理

考虑到有时会面对大量数据,必须有效构建分页机制以及实施限流措施来防止请求过载。这既能优化网络传输效率,也能保护服务器避免因频繁请求而导致崩溃。对于分页,可以设定合理的页面大小,根据实际情况动态调整,请求分批次发送;限流则根据系统容忍度配置适宜阈值。

以上介绍简要概述了该案例中的主要集成步骤,后续章节将详细讲解每个环节的具体实现方法及代码示例,包括错误重试机制、实时日志监控等高级特性的应用,以进一步保障系统稳定运行和业务连续性。 轻易云数据集成平台金蝶集成接口配置

调用旺店通·企业奇门接口wdt.stockin.order.query获取并加工数据

在数据集成生命周期的第一步,调用源系统接口获取数据是至关重要的一环。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口wdt.stockin.order.query来获取并加工入库单数据。

接口调用配置

首先,我们需要配置接口调用的元数据。以下是关键的元数据配置项:

  • API: wdt.stockin.order.query
  • 请求方法: POST
  • 主键字段: order_no
  • 查询条件:
    • 按最后修改时间增量获取数据,使用start_timeend_time作为时间范围。
    • 过滤特定仓库名称,例如排除包含“百媚”的仓库。
    • 查询特定类型的入库单,例如盘盈入库(order_type = 4)。
    • 默认查询已完成状态的入库单(status = 80)。

请求参数设置

根据元数据配置,我们需要设置以下请求参数:

  1. 时间范围参数:

    • start_time: 按最后修改时间增量获取数据的开始时间,格式为yyyy-MM-dd HH:mm:ss
    • end_time: 按最后修改时间增量获取数据的结束时间,格式为yyyy-MM-dd HH:mm:ss
  2. 固定参数:

    • order_type: 源单据类别,这里我们选择盘盈入库(值为4)。
    • status: 入库单状态,默认查询已完成状态(值为80)。
  3. 分页参数:

    • page_size: 每页返回的数据条数,这里设置为50。
    • page_no: 页号,不传值默认从0页开始。
  4. 可选过滤条件:

    • warehouse_no: 仓库编号,用于获取指定仓库的单据信息。
    • src_order_no: 上层单据编号,可以不传开始时间和结束时间。
    • stockin_no: 入库单号,可以不传开始时间和结束时间。

示例请求配置

{
    "api": "wdt.stockin.order.query",
    "method": "POST",
    "request": [
        {"field": "start_time", "value": "{{LAST_SYNC_TIME|datetime}}"},
        {"field": "end_time", "value": "{{CURRENT_TIME|datetime}}"},
        {"field": "order_type", "value": "4"},
        {"field": "status", "value": "80"}
    ],
    "otherRequest": [
        {"field": "page_size", "value": "50"},
        {"field": "page_no", "value": ""}
    ]
}

数据清洗与过滤

在获取到原始数据后,需要进行必要的数据清洗和过滤。根据元数据配置,我们可以应用以下过滤条件:

  1. 排除生产入库类型的记录:

    {"field":"stockin_reason","logic":"notlike","value":"生产入库"}
  2. 包含特定仓库名称,例如“七遇”:

    {"field":"warehouse_name","logic":"like","value":"七遇"}
  3. 根据仓库编号进行精确匹配:

    {"field":"warehouse_no","logic":"eqv2","value":"02"}

这些条件可以组合使用,以确保最终的数据符合业务需求。例如:

[
    [{"field":"stockin_reason","logic":"notlike","value":"生产入库"},{"field":"warehouse_name","logic":"like","value":"七遇"}],
    [{"field":"stockin_reason","logic":"notlike","value":"生产入库"},{"field":"warehouse_name","logic":"like","value":"百媚"}],
    [{"field":"stockin_reason","logic":"notlike","value":"生产入库"},{"field":"warehouse_no","logic":"eqv2","value":"02"}]
]

实时监控与调试

在实际操作中,通过轻易云平台提供的全透明可视化界面,可以实时监控接口调用和数据处理状态。这有助于快速发现并解决潜在问题,提高整体效率。

通过上述步骤,我们能够高效地从旺店通·企业奇门系统中获取所需的盘盈入库单数据,并进行必要的数据清洗和过滤,为后续的数据转换与写入阶段打下坚实基础。 如何开发钉钉API接口

轻易云数据集成平台:将旺店通入库单转换为金蝶其他入库单【盘盈入库】

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

元数据配置解析

元数据配置是ETL过程中至关重要的一部分,它定义了源数据如何映射到目标系统的字段。以下是本文使用的元数据配置:

{
  "api": "batchSave",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "rowsKey": "array",
    "rows": 1,
    "method": "batchArraySave"
  },
  "request": [
    {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{order_no}"},
    {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","value":"QTRKD01_SYS","parser":{"name":"ConvertObjectParser","params":"FNumber"},"mappingDirection":"positive"},
    {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{warehouse_no}","mapping":{"target":"6448b8978ae83f3ed8347076","direction":"positive"}},
    {"field":"FStockDirect","label":"库存方向","type":"string","describe":"下拉列表"},
    {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{{stockin_time|datetime}}"},
    {"field":"FDEPTID","label":"部门","type":"string","describe":"基础资料","value":"'function case when '{warehouse_no}' = '07' then '006' when '{warehouse_no}' = '06' then '006' when '{warehouse_no}' = '02' then '01201' when '{warehouse_no}' = 'wdt01_CC' then '01202' when '{warehouse_no}' = 'wdt01' then '01202' when '{warehouse_no}' = 'QYYC-JSQY-WDT-cc' then '01201' when '{warehouse_no}' = 'QYYC-JSQY-WDT' then '01201' else '006' end'", "mappingDirection": "positive", "parser": {"name": "ConvertObjectParser", "params": "FNumber"}},
    {"field": "FOwnerTypeIdHead", "label": "货主类型", "type": "string", "describe": "多类别基础资料列表", "value": "BD_OwnerOrg"},
    {"field": "FOwnerIdHead", "label": "货主", "type"::string, describe:多类别基础资料, parser: {name: ConvertObjectParser, params: FNumber}, value:100},
    {"field": FNOTE, label:备注, type:string, describe:多行文本, value:盘盈入库},
    {
      field:FEntity,
      label:明细信息,
      type:array,
      children:[
        {field:FInStockType,label:入库类型,type:string,describe:下拉列表,parent:FEntity},
        {field:FMATERIALID,label:物料编码,type:string,describe:基础资料,parser:{name:ConvertObjectParser,params:FNumber},value:"{{details_list.spec_no}}",parent:FEntity},
        {field:FCMKBarCode,label:零售条形码,type:string,describe:文本,parent:FEntity},
        {field:FSTOCKID,label:收货仓库,type:string,describe:基础资料,parser:{name:ConvertObjectParser,params:FNumber},value:"{warehouse_no}",parent:FEntity},
        {field:FStockLocId,label:仓位,type:string,describe:维度关联字段,parent:FEntity},
        {field:FQty,label:实收数量,type:string,describe:数量,value:"{{details_list.goods_count}}",parent:FEntity},
        {field:FPrice,label:成本价,type:string,describe:单价,parent:FEntity},
        {field:FEntryNote,label:备注,type:string,describe:"多行文本,value:"{{detail_list.remark}}",parent:FEntity},
        {field:"FSRCBILLNO", label:"源单编号", type:"string", describe:"源单编号", parent:"FEntity"},
        {field:"FSRCBILLTYPEID", label:"源单类型", type:"string", describe:"源单类型", parent:"FEntity"},
        {parent:"FEntity", label:"货主类型", field:"FOWNERTYPEID", type:"string", value:"BD_OwnerOrg"},
        {parent:"FEntity", label:"货主" field"FOWNERID" type"string" value"100" parser{name"ConvertObjectParser" params"FNumber"}}
      ],
      value="details_list"
    }
  ],
  otherRequest:[
    {field"FormId" label业务对象表单Id type字符串 describe必须填写金蝶的表单ID如PUR_PurchaseOrder valueSTK_MISCELLANEOUS},
    {fieldIsVerifyBaseDataField label验证基础资料 type布尔类 describe是否验证所有的基础资料有效性,布尔类,默认false(非必录) valuetrue},
    {fieldOperation label执行的操作 type字符串 valueSave},
    {fieldIsAutoSubmitAndAudit label提交并审核 type布尔类 valuetrue}
  ]
}

数据请求与清洗

在ETL流程中,首先需要从源系统(旺店通)提取数据,并进行必要的数据清洗。清洗后的数据需要符合目标系统(金蝶云星空)的要求。

  1. 提取订单号:通过{order_no}字段获取旺店通中的订单号,并映射到金蝶的FBillNo字段。
  2. 库存组织:通过{warehouse_no}字段获取库存组织,并使用ConvertObjectParser将其转换为金蝶所需格式。
  3. 日期格式转换:使用{{stockin_time|datetime}}将日期格式转换为金蝶接受的格式。
  4. 部门映射:根据不同的仓库编号,将其映射到相应的部门编号。

数据转换与写入

在完成数据清洗后,需要将数据按照目标系统的要求进行转换,并通过API接口写入金蝶云星空。

  1. 批量保存接口:使用batchSave API,通过POST方法提交数据。
  2. 验证基础资料:设置IsVerifyBaseDataField为true,以确保所有基础资料有效性。
  3. 自动提交并审核:设置IsAutoSubmitAndAudit为true,实现自动提交和审核功能。

明细信息处理

对于明细信息,需要特别注意以下几点:

  1. 物料编码转换:通过details_list.spec_no字段获取物料编码,并使用ConvertObjectParser进行转换。
  2. 实收数量和成本价:分别通过details_list.goods_count和相应字段获取实收数量和成本价。
  3. 备注信息:通过detail_list.remark获取备注信息,并写入相应字段。

API调用示例

最终,我们可以构建一个完整的API调用请求,如下所示:

{
  api : batchSave,
  method : POST,
  idCheck : true,
  operation : {
    rowsKey : array,
    rows : 1,
    method : batchArraySave
  },
  request : [
    {
      field : FBillNo,
      label : 单据编号,
      type : string,
      describe : 单据编号,
      value : order_no
    },
    ...
  ],
  otherRequest:[
    {
      field : FormId,
      label : 业务对象表单Id,
      type : string,
      describe : 必须填写金蝶的表单ID如:PUR_PurchaseOrder,
      value : STK_MISCELLANEOUS
   },
   ...
 ]
}

通过上述步骤,我们实现了从旺店通到金蝶云星空的数据无缝对接,大大提升了业务处理效率。 如何对接用友BIP接口

更多系统对接方案