使用轻易云平台实现销售出库单数据的ETL转换和写入金蝶云

  • 轻易云集成顾问-何语琴

旺店通·旗舰奇门数据集成到金蝶云星空的技术案例分享

在当今高度竞争的市场环境中,企业需要高效且准确的数据集成方案来支持其业务流程。对于一家依赖旺店通·旗舰奇门进行分销销售管理的公司而言,如何将销售出库单数据可靠地集成为其他系统供用,是一项关键任务。在本篇文章中,我们详细探讨了通过“分销销售出库单集成方案-P-T”,将旺店通·旗舰奇门的数据无缝对接到金蝶云星空,以及相关API接口调用和技术实现细节。

环境概述

  • 源系统:旺店通·旗舰奇门
  • 目标系统:金蝶云星空

主要API接口:

  • 获取数据(source): wdt.wms.stockout.sales.querywithdetail
  • 写入数据(target): batchSave

为了确保从旺店通·旗舰奇门获得的每条数据信息都能精准高效地传输至金蝶云星空,并避免漏单情况,我们设计了一套完整的数据处理流程。

数据获取与转换

作为第一步,通过调用wdt.wms.stockout.sales.querywithdetail API接口,我们定时抓取最新的销售出库单信息,这些信息包括订单号、商品详情、数量等关键信息。同时,为了适应不同系统间的数据结构差异,我们编写自定义逻辑,将原始数据转化为符合金蝶云星空要求的格式。

以下是具体步骤:

  1. 分页及限流处理: 调用wdt.wms.stockout.sales.querywithdetail时,由于涉及大批量数据,需要解决分页及限流问题。我们设置自动页码迭代机制,并内置防止API请求频率过高导致超限告警措施。

  2. 实时监控与日志记录: 在整个过程中,使用集中监控和告警系统实时跟踪每个交易状态。一旦出现异常,如网络延迟或响应错误,会立即触发重试机制,同时生成详细日志以便后续分析。

  3. 自定义转换逻辑应用: 将获取到的信息映射并转化为符合目标API (batchSave) 接口规范的数据格式,例如字段名称映射和类型匹配,以确保正确性。

  4. 快速写入与性能优化: 利用平台提供的大量数据吞吐能力,将清洗后的数据批量发送至金蝶云星空。这不仅提高了传输效率,同时也保证大量交易在短时间内完成上传,从而提升整体业务处理速度。

此案例展示了复杂业务场景 打通用友BIP数据接口

调用源系统旺店通·旗舰奇门接口wdt.wms.stockout.sales.querywithdetail获取并加工数据

在数据集成生命周期的第一步,我们需要从源系统获取数据,并对其进行初步加工。本文将详细探讨如何使用旺店通·旗舰奇门接口wdt.wms.stockout.sales.querywithdetail来实现这一过程。

接口调用配置

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

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

请求参数解析

在请求参数中,pagerparams是两个主要的对象字段。pager用于分页控制,而params包含了具体的业务参数。

  • 分页参数

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

    • start_time: 数据查询的开始时间,默认值为30分钟前。
    • end_time: 数据查询的结束时间,默认值为当前时间。
    • status_type: 出库单状态类型,默认值为3(按照指定的status状态字段查询)。
    • status: 出库单状态详细信息,当status_type=3时生效,默认值为110。
    • warehouse_no, stockout_no, shop_nos, src_order_no, need_sn, position: 分别对应仓库编码、出库单编号、店铺编号、销售订单号、是否返回SN信息、是否按照货位排序等字段。

数据请求与清洗

在实际操作中,我们通过POST请求调用该接口,并传入上述配置好的请求参数。以下是一个示例代码片段:

import requests
import json
from datetime import datetime, timedelta

# 设置请求URL和头部信息
url = 'https://api.example.com/wdt.wms.stockout.sales.querywithdetail'
headers = {'Content-Type': 'application/json'}

# 配置请求参数
payload = {
    'pager': {
        'page_size': 50,
        'page_no': 1
    },
    'params': {
        'start_time': (datetime.now() - timedelta(minutes=30)).strftime('%Y-%m-%d %H:%M:%S'),
        'end_time': datetime.now().strftime('%Y-%m-%d %H:%M:%S'),
        'status_type': '3',
        'status': '110',
        # 可以根据实际需求添加其他业务参数
    }
}

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

# 检查响应状态码并处理响应数据
if response.status_code == 200:
    data = response.json()
    # 对数据进行清洗和初步处理
    processed_data = process_data(data)
else:
    print(f"Error: {response.status_code}")

def process_data(data):
    # 实现具体的数据清洗逻辑,例如去除无效字段、格式转换等
    cleaned_data = []
    for item in data['result']:
        cleaned_item = {
            'order_no': item['order_no'],
            'stockout_id': item['stockout_id'],
            # 添加其他需要保留或转换的字段
        }
        cleaned_data.append(cleaned_item)
    return cleaned_data

数据转换与写入

在完成数据清洗后,我们可以将其转换为目标系统所需的格式,并写入到目标数据库或文件系统中。这一步通常包括字段映射、格式转换等操作。

例如,将清洗后的数据写入到数据库中:

import pymysql

def write_to_db(cleaned_data):
    connection = pymysql.connect(
        host='localhost',
        user='user',
        password='password',
        database='database'
    )

    try:
        with connection.cursor() as cursor:
            for item in cleaned_data:
                sql = """INSERT INTO stockout_orders (order_no, stockout_id) 
                         VALUES (%s, %s)"""
                cursor.execute(sql, (item['order_no'], item['stockout_id']))

        connection.commit()

    finally:
        connection.close()

# 调用写入函数
write_to_db(processed_data)

通过上述步骤,我们实现了从源系统旺店通·旗舰奇门接口获取数据并进行初步加工,为后续的数据集成奠定了基础。在实际应用中,可以根据具体需求进一步优化和扩展这些操作。 用友与CRM系统接口开发配置

使用轻易云数据集成平台实现分销销售出库单的ETL转换及写入金蝶云星空

在轻易云数据集成平台中,数据处理的第二步是将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,最终写入目标平台。本案例中,我们将分销销售出库单的数据转换为金蝶云星空API接口所能接收的格式,并写入目标平台。

配置元数据

首先,我们需要配置元数据,以便将源数据映射到目标API所需的字段格式。以下是具体的元数据配置:

{
  "api": "batchSave",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "rowsKey": "array",
    "rows": 20,
    "method": "batchArraySave"
  },
  "request": [
    {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","value":"DSXSCHD07","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
    {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{order_no}"},
    {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{consign_time}"},
    {"field":"FStockOrgId","label":"发货组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"106"},
    {"field":"FSaleOrgId","label":"销售组织","type":"string","describe":"组织","value":"_findCollection find FUseOrgID from 08313512-4ecd-37b1-9945-be9366662e85 where FWDTDCName={fenxiao_nick}","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
    {"field":"FCustomerID","label":"客户","type":"string","describe":"基础资料","value":"_findCollection find FCustID from 08313512-4ecd-37b1-9945-be9366662e85 where FWDTDCName={fenxiao_nick}","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
    {"field":"Fnote","label":"备注","type":"","describe":"","value":""},
    {"field":"","label":"","type":"","describe":"","value":""},
    ...
  ],
  "otherRequest":[
    {"field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder", "value": "KD_DSSAL_OutStock"},
    {"field": "Operation", "label": "执行的操作", "type": "", "value": ""},
    ...
  ]
}

数据转换

在进行ETL转换时,我们需要特别注意以下几点:

  1. 字段映射:确保每个字段都正确映射到目标API所需的字段。例如,FBillNo 对应源数据中的 {order_no}FDate 对应 {consign_time}
  2. 数据解析:对于一些复杂的数据类型,如基础资料字段,需要使用 ConvertObjectParser 等解析器进行转换。例如,FSaleOrgIdFCustomerID 都需要通过查找对应关系进行转换。
  3. 嵌套结构:对于包含嵌套结构的数据,如订单明细 FEntity,需要逐层解析和映射。例如,物料编码 FMaterialID 对应 {details_list.goods_no},实发数量 FRealQty 对应 {details_list.goods_count}

API请求

完成数据转换后,我们通过API请求将转换后的数据写入金蝶云星空。具体请求如下:

{
  "FormId": "KD_DSSAL_OutStock",
  "Operation": {
    ...
  },
  ...
}

此处我们使用POST方法,将批量保存(batchSave)操作发送到金蝶云星空API接口。确保请求体中的所有字段都已正确填充,并符合目标系统要求。

实际应用案例

假设我们有一个分销销售出库单,其源数据如下:

{
  ...
}

通过上述元数据配置和ETL转换,我们可以生成如下符合金蝶云星空API要求的数据格式:

{
  ...
}

最后,通过调用金蝶云星空API接口,将处理好的数据提交并审核,实现从源平台到目标平台的数据无缝对接。

总结

通过轻易云数据集成平台,我们能够高效地完成分销销售出库单的数据ETL转换,并成功写入金蝶云星空。这不仅提升了业务流程的自动化程度,还确保了数据的一致性和准确性。 钉钉与ERP系统接口开发配置

更多系统对接方案