基于轻易云数据集成平台的ETL实践:写入金蝶云星空

  • 轻易云集成顾问-姚缘

旺店通·旗舰奇门销售退货单集成到金蝶云星空的实践案例

在本次技术分享中,我们将探讨如何基于06-ToB销售退货单集成方案,利用轻易云数据集成平台成功实现旺店通·旗舰奇门的数据无缝对接至金蝶云星空。

步骤一:从旺店通·旗舰奇门获取销售退货单数据

首先,通过调用 wdt.wms.stockin.refund.querywithdetail API 接口,从旺店通·旗舰奇门系统中批量抓取销售退货单的详细数据。为确保高效、可靠地获取这些信息,该接口支持分页请求和限流控制。从而能处理大规模返回数据,并避免因请求频率过高导致的接口异常。

步骤二:清洗与转换数据

考虑到供销两端系统的数据格式不一致性,接下来需要进行必要的数据清洗和转换。这一步骤可以通过平台提供的自定义数据转换逻辑功能来完成。例如,将旺店通中的字段名与金蝶云星空所要求的字段名进行映射,同时对某些特定业务逻辑做出相应调整,以适配目标系统需求。

步骤三:写入金蝶云星空

经过处理后的销售退货单记录准备完毕后,即可使用金蝶云星空提供的 batchSave API 进行批量写入。为了确保大量数据快速准确地导入目标系统,我们充分利用了该平台优化过的数据写入能力。此外,通过实时监控工具,可以追踪任务状态及性能表现,及时发现并解决可能出现的问题。

结论

此次实际运行过程中,实现了从API调取,到数据清洗转化,再到最终批量保存的一系列操作。不仅保障了重试机制,在面对突发异常时也能够稳妥处理,还具备良好的透明度与实时跟踪性。因此,本篇文章将进一步详述各关键环节以及具体配置细节,为大家提供完整、实用、高效的数据集成解决方案模板。 金蝶与SCM系统接口开发配置

调用旺店通·旗舰奇门接口wdt.wms.stockin.refund.querywithdetail获取并加工数据

在数据集成生命周期的第一步,我们需要从源系统获取数据并进行初步处理。本文将详细介绍如何通过轻易云数据集成平台调用旺店通·旗舰奇门接口wdt.wms.stockin.refund.querywithdetail,并对获取的数据进行加工。

接口调用配置

首先,我们需要配置接口调用的元数据。以下是元数据配置的详细信息:

{
  "api": "wdt.wms.stockin.refund.querywithdetail",
  "method": "POST",
  "number": "order_no",
  "id": "order_no",
  "idCheck": true,
  "request": [
    {
      "field": "pager",
      "label": "分页参数",
      "type": "object",
      "children": [
        {
          "field": "page_size",
          "label": "分页大小",
          "type": "string",
          "value": "50",
          "parent": "pager"
        },
        {
          "field": "page_no",
          "label": "页号",
          "type": "string",
          "value": "1",
          "parent": "pager"
        }
      ]
    },
    {
      "field": "params",
      "label": "业务参数",
      "type": "object",
      ...
    }
  ],
  ...
}

请求参数解析

在请求参数中,我们主要关注两个部分:分页参数和业务参数。

  1. 分页参数

    • page_size: 每页返回的数据条数,默认设置为50。
    • page_no: 当前页码,默认设置为1。
  2. 业务参数

    • start_timeend_time: 分别表示查询的开始时间和结束时间,使用动态变量{{LAST_SYNC_TIME|datetime}}{{CURRENT_TIME|datetime}}来自动填充。
    • status: 入库单状态,这里我们设置为80,即已完成状态。
    • time_type: 时间条件类型,默认为0(修改时间)。
    • warehouse_no, shop_nos, stockin_no: 分别表示仓库编码、店铺编号(多个店铺编号使用英文逗号分隔)和入库单号。

数据请求与清洗

在调用接口获取数据后,我们需要对数据进行清洗,以确保其符合后续处理的要求。以下是一个简单的数据清洗流程:

  1. 过滤无效数据:根据业务需求过滤掉不符合条件的数据。例如,只保留状态为80(已完成)的入库单。
  2. 字段映射与转换:将原始数据中的字段映射到目标系统所需的字段,并进行必要的格式转换。例如,将时间字段转换为标准的ISO格式。
  3. 去重与合并:如果存在重复记录,需要进行去重操作。同时,对于同一订单的多条记录,可以进行合并处理。

示例代码

以下是一个示例代码片段,用于调用接口并处理返回的数据:

import requests
import json
from datetime import datetime

# 定义请求URL和头部信息
url = 'https://api.wangdian.cn/openapi2/wdt.wms.stockin.refund.querywithdetail'
headers = {'Content-Type': 'application/json'}

# 构建请求体
payload = {
    'pager': {
        'page_size': '50',
        'page_no': '1'
    },
    'params': {
        'start_time': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
        'end_time': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
        'status': '80',
        'time_type': '0'
    }
}

# 发起POST请求
response = requests.post(url, headers=headers, data=json.dumps(payload))

# 检查响应状态码
if response.status_code == 200:
    data = response.json()

    # 数据清洗与处理
    cleaned_data = []
    for record in data['data']:
        if record['status'] == '80':
            cleaned_record = {
                'order_no': record['order_no'],
                'warehouse_no': record['warehouse_no'],
                ...
            }
            cleaned_data.append(cleaned_record)

    # 输出清洗后的数据
    print(json.dumps(cleaned_data, indent=4))
else:
    print(f"Error: {response.status_code}")

小结

通过上述步骤,我们成功地调用了旺店通·旗舰奇门接口wdt.wms.stockin.refund.querywithdetail,并对获取的数据进行了初步清洗和加工。这一步骤为后续的数据转换与写入奠定了基础。在实际应用中,可以根据具体业务需求进一步优化和扩展数据处理逻辑。 金蝶与MES系统接口开发配置

使用轻易云数据集成平台将源数据转换并写入金蝶云星空API接口

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

元数据配置解析

元数据配置是ETL过程中的核心部分,它定义了如何将源数据映射到目标系统的数据结构中。以下是关键字段和配置的详细解析:

  1. API接口和请求方法

    {"api":"batchSave","method":"POST"}

    这里指定了目标API接口为batchSave,请求方法为POST

  2. 单据类型

    {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"XSTHD01_SYS"}

    单据类型字段FBillTypeID使用了ConvertObjectParser解析器,将值转化为金蝶云星空系统可识别的格式。

  3. 单据编号

    {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{order_no}"}

    单据编号直接从源数据中获取,并映射到目标字段FBillNo

  4. 销售组织

    {"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"销售组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find zip from ec445d8c-9d91-3845-9175-79fb0588e1b3 where shop_no={shop_no}"}

    销售组织字段使用了复杂的查询语句,从另一个集合中查找对应的值,并通过解析器进行转换。

  5. 日期

    {"field":"FDate","label":"日期","type":"date","describe":"日期","value":"{modified}"}

    日期字段直接从源数据中的修改时间字段获取,并映射到目标字段FDate

  6. 库存组织

    {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"库存组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_findCollection find FRetorgId from 3164206c-5f8d-3e8b-be49-752e25070e6f where F_KD_WDTRundNo={refund_no}"}

    库存组织字段同样使用复杂查询语句,通过解析器转换后映射到目标字段。

明细信息处理

明细信息部分包含多个子字段,每个子字段都需要进行相应的处理和映射:

  1. 物料编码

    {"field":"FMaterialId","label":"物料编码","type":"string","describe":"物料编码","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{{details_list.spec_no}}"}

    物料编码从明细列表中的规格编号字段获取,并通过解析器转换后映射到目标字段。

  2. 实退数量

    {"field":"FRealQty","label":"实退数量","type": "int", "describe": "实退数量", "value": "{{details_list.num}}"}

    实退数量直接从明细列表中的数量字段获取,并映射到目标字段。

  3. 含税单价

    {"field": "FTaxPrice", "label": "含税单价", "type": "float", "describe": "含税单价", "value": "_findCollection find FTAXPRICE from 3164206c-5f8d-3e8b-be49-752e25070e6f where F_KD_WDTRundNo={refund_no} FMaterialID={{details_list.spec_no}}"}

    含税单价通过复杂查询语句从另一个集合中查找对应值,并映射到目标字段。

  4. 是否赠品

    {"field": "FIsFree", "label": "是否赠品", "type": "bool", "describe": "是否赠品", "value": "_findCollection find FISFREE from 3164206c-5f8d-3e8b-be49-752e25070e6f where F_KD_WDTRundNo={refund_no} FMaterialID={{details_list.spec_no}}"}

    是否赠品通过查询语句查找对应值,并映射到目标字段。

财务信息处理

财务信息部分包含多个子字段,每个子字段也需要进行相应的处理和映射:

  1. 结算组织

    {"field": "FSettleOrgId", "label": "结算组织", "type": "string", "describe": "结算组织", "parser":{"name": "ConvertObjectParser", "params": "FNumber"}, 
    "value": "_findCollection find FSALEORGID from 3164206c-5f8d-3e8b-be49-752e25070e6f where F_KD_WDTRundNo={refund_no}"}

    结算组织通过复杂查询语句查找对应值,并通过解析器转换后映射到目标字段。

  2. 整单折扣额、是否含税、价外税

    {"field": "FAllDisCount", 
    "label": 
    "整单折扣额",
    "type":
    "float",
    "describe":
    "整单折扣额"},
    {"field":
    "FIsIncludedTax",
    "label":
    "是否含税",
    "type":
    "bool",
    "value":
    "true"},
    {"field":
    "FIsPriceExcludeTax",
    "label":
    "价外税",
    "type":
    "bool",
    "value":
    "true"}

    这些财务信息直接从源数据或默认值中获取,并映射到相应的目标字段。

操作配置

最后,我们需要配置一些操作相关的信息,以确保数据能够正确提交并审核:

  1. 业务对象表单Id

     {"field":
     FormId,
     label:
     业务对象表单Id,
     type:
     string,
     describe:
     业务对象表单Id,
     value:
     SAL_RETURNSTOCK}
  2. 执行操作

    {"field":
    Operation,
    label:
    执行操作,
    type:
    string,
    describe:
    执行操作,
    value:
    BatchSave}
  3. 提交并审核、验证基础资料、负库存

    {"field":
    IsAutoSubmitAndAudit,
    label:
    提交并审核,
    type:
    bool,
    describe:
    提交并审核,
    value:
    true},
    {"field":
    IsVerifyBaseDataField,
    label:
    验证基础资料,
    type:
    bool,
    describe:
    是否验证所有基础资料有效性,布尔类,默认false(非必录),
    value:
    false},
    {"field":
    InterationFlags,
    label:
    负库存,
    type:
    string,
    value:
    STK_InvCheckResult}

这些操作配置确保了在完成ETL转换后,数据能够自动提交并审核,同时设置了一些必要的校验和标志位以保证数据完整性和一致性。

通过以上步骤,我们成功地将源平台的数据进行了ETL转换,使其符合金蝶云星空API接口所能接收的格式,最终实现了无缝的数据写入。 数据集成平台API接口配置

更多系统对接方案