ETL实战:从旺店通到金蝶云星空的数据转换与写入

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

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

在本文中,我们将探讨如何通过轻易云数据集成平台,实现旺店通·企业奇门的出库单管理数据,准确、安全、快速地集成到金蝶云星空下的其他出库单模块。具体案例方案为【类型:盘亏出库】旺店通-出库单管理==>金蝶-其他出库单。

确保集成过程不漏单

为了确保从旺店通到金蝶云星空的数据传输过程中不会出现遗漏情况,我们首先需要调用wdt.stockout.order.query接口来抓取所有需要处理的订单。在此步骤中,通过定时任务可靠地抓取接口数据,可以大幅减少因人为或意外因素导致的数据缺失。

批量写入与性能优化

大量获取的数据需要高效地写入至金蝶云星空数据库。我们使用其提供的batchSave API进行批量插入操作,并在处理过程中对分页和限流问题进行有效控制。这不仅提高了系统运行效率,还避免了由于一次性提交过多数据可能引发的网络拥堵或接口超时等风险。

数据格式差异及映射问题

不同系统间的数据格式往往存在差异,为了解决这一难题,需要根据两边API规范,对接收和发送的数据结构进行必要转换。例如,将从旺店通获取到JSON格式解析后,根据业务需求重新映射字段,然后以符合金蝶云要求的新JSON格式包裹再提交至 batchSave 接口。另外,还配置针对特定字段规则生成自定义映射策略,以保障数据完整性和一致性。

异常处理与重试机制

任何技术实现都需考虑异常情况。在本方案中,一旦遇到调用失败、网络波动等非预期状况时,自动触发错误重试机制,通过配置合理次数及时间间隔,确保最终成功写入目标系统。同时,每次执行日志均记录详细信息,为后续排错和性能优化提供依据。

总结以上几个关键环节,本项目旨在保证强稳定、高效率以及透明化监控整个数据处理生命周期。后续部分将进一步详述每一步实现细节,包括代码示例及最佳实践,请持续关注。

金蝶与外部系统打通接口

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

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

接口调用配置

首先,我们需要根据元数据配置来设置API请求参数。以下是关键参数的详细说明:

  • API名称: wdt.stockout.order.query
  • 请求方法: POST
  • 主要字段:
    • start_time: 开始时间,格式为yyyy-MM-dd HH:mm:ss,用于增量获取数据。
    • end_time: 结束时间,格式为yyyy-MM-dd HH:mm:ss,用于增量获取数据。
    • status: 出库单状态,此处固定为110表示已完成。
    • order_type: 出库单类型,此处固定为4表示盘亏出库。
    • page_size: 每页返回的数据条数,默认值为40。
    • page_no: 页号,从0页开始。

以下是一个典型的请求配置示例:

{
    "api": "wdt.stockout.order.query",
    "method": "POST",
    "request": {
        "start_time": "{{LAST_SYNC_TIME|datetime}}",
        "end_time": "{{CURRENT_TIME|datetime}}",
        "status": "110",
        "order_type": "4",
        "page_size": "{PAGINATION_PAGE_SIZE}",
        "page_no": "{PAGINATION_START_PAGE}"
    }
}

数据请求与清洗

在实际操作中,我们需要先从源系统(旺店通)获取原始出库单数据。通过上述配置,我们可以发起HTTP POST请求,并接收响应数据。为了确保数据的完整性和准确性,我们通常会进行以下几个步骤:

  1. 分页处理: 因为一次请求可能无法获取所有数据,需要通过分页参数page_sizepage_no逐页获取。
  2. 时间戳管理: 使用start_timeend_time参数来实现增量更新,确保每次只获取自上次同步以来的新数据。
  3. 状态过滤: 固定使用状态码110,以确保只获取已完成的出库单。

示例代码如下:

import requests
import datetime

# 设置时间戳
last_sync_time = datetime.datetime.now() - datetime.timedelta(days=1)
current_time = datetime.datetime.now()

# 请求参数
params = {
    "start_time": last_sync_time.strftime("%Y-%m-%d %H:%M:%S"),
    "end_time": current_time.strftime("%Y-%m-%d %H:%M:%S"),
    "status": "110",
    "order_type": "4",
    "page_size": 40,
    "page_no": 0
}

# 发起POST请求
response = requests.post("https://api.wangdian.cn/openapi2/wdt.stockout.order.query", data=params)
data = response.json()

# 数据清洗与处理
if data["code"] == 0:
    orders = data["orders"]
    for order in orders:
        # 对每个订单进行必要的数据清洗与转换
        process_order(order)
else:
    print("Error:", data["message"])

数据转换与写入

在完成初步的数据清洗后,我们需要将这些数据转换为目标系统(如金蝶)的格式,并写入目标数据库。这一步通常包括字段映射、格式转换等操作。例如,将旺店通的出库单号映射到金蝶的其他出库单号字段。

示例代码如下:

def process_order(order):
    # 假设目标系统需要以下字段:order_no, stockout_id, warehouse_no, shop_no
    transformed_order = {
        "order_no": order["stockout_no"],
        "stockout_id": order["stockout_id"],
        "warehouse_no": order["warehouse_no"],
        "shop_no": order["shop_no"]
    }

    # 将转换后的订单写入目标数据库(此处仅作示例)
    write_to_target_system(transformed_order)

def write_to_target_system(order):
    # 示例:将订单写入数据库或通过API推送到目标系统
    pass

通过上述步骤,我们能够高效地从旺店通系统中提取盘亏出库单数据,并进行必要的数据清洗和转换,为后续的数据处理环节打下坚实基础。这种全生命周期管理的方法不仅提高了业务透明度,还显著提升了整体效率。 用友与WMS系统接口开发配置

数据集成:将源平台数据转换并写入金蝶云星空

在数据集成的过程中,将源平台的数据转换为目标平台所能接受的格式是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台,将旺店通的出库单管理数据通过ETL(提取、转换、加载)过程,转换并写入金蝶云星空的其他出库单API接口。

元数据配置解析

在进行ETL操作之前,我们需要对元数据配置进行详细解析,以确保每个字段都能正确映射到目标平台。


{
  "api": "batchSave",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "request": [
    {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{order_no}"},
    {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"标准其他出库单:QTCKD01_SYS\n资产出库:QTCKD02_SYS\nVMI出库:QTCKD03_SYS\n费用物料出库:QTCKD04_SYS\n库存调整:QTCKD05_SYS","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"QTCKD06_SYS"},
    {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"},
    {"field":"FPickOrgId","label":"领用组织","type":"string","describe":"领用组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"100"},
    {"field":"FStockDirect","label":"库存方向","type":"string","describe":"库存方向","value":"GENERAL"},
    {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{consign_time}"},
    {"field":"FDeptId","label":"领料部门","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"BM000003"},
    {"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", 
![金蝶云星空API接口配置](https://pic.qeasy.cloud/T3.png~tplv-syqr462i7n-qeasy.image)
更多系统对接方案