解析旺店通与金蝶云星辰V2的ETL数据转换与集成技术

  • 轻易云集成顾问-彭萍

旺店通销售出库单对接金蝶云星辰V2的技术案例分享

在电商快速发展的今天,高效、准确的数据集成成为企业优化业务流程必不可少的需求。本技术文章将详细解析如何通过旺店通·企业奇门数据集成到金蝶云星辰V2,实现销售出库单对接任务。本文特别聚焦于一线实际运行方案:旺店通销售出库单对接(线下)

首先,我们需使用wdt.stockout.order.query.trade接口从旺店通·企业奇门获取销售信息,不仅要确保数据不漏单,且需处理分页和限流问题,以保证大规模数据提取的稳定性。由于两系统的数据格式有所差异,在写入之前必须进行必要的数据转换和映射。此外,通过定时可靠的抓取机制,可以自动化批量采集订单信息并将其快速写入到金蝶云星辰V2。

为了实现这一目标,轻易云数据集成平台提供了全方位支持,包括实时监控与日志记录功能。这不仅允许我们即时察觉并解决异常情况,还能通过错误重试机制大幅提升数据传输的成功率。同时,针对金蝶云星辰V2特殊化要求,我们采用/jdy/v2/scm/sal_out_bound API完成最终的信息提交。

以下章节将深入探讨具体实现步骤,包括API调用方法、分页与限流策略以及定制化映射对接等技术细节,为您呈现一个完整、高效、可靠的数据集成解决方案。 数据集成平台API接口配置

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

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

接口调用配置

首先,我们需要配置接口调用的元数据。根据提供的metadata,以下是具体的配置细节:

  • API: wdt.stockout.order.query.trade
  • 请求方法: POST
  • 主要字段:
    • order_no: 销售订单号
    • stockout_id: 出库单ID
    • start_time: 数据增量获取的开始时间,格式为yyyy-MM-dd HH:mm:ss
    • end_time: 数据增量获取的结束时间,格式为yyyy-MM-dd HH:mm:ss
    • status: 销售订单状态,包括已取消、已审核、已发货、部分打款、已完成和异常发货等状态
    • shop_no: 店铺编号,用于区分不同店铺的数据
    • warehouse_no: 仓库编号,用于区分不同仓库的数据

请求参数设置

为了实现增量数据获取,我们需要设置start_timeend_time参数。这两个参数分别代表上次同步时间和当前时间,可以通过模板变量动态填充:

{
    "start_time": "{{LAST_SYNC_TIME|datetime}}",
    "end_time": "{{CURRENT_TIME|datetime}}"
}

此外,为了确保我们只获取特定状态的订单,可以设置status参数:

{
    "status": "95,105,110,113"
}

分页参数也非常重要,以确保我们能够处理大量数据而不会遗漏:

{
    "page_size": "{PAGINATION_PAGE_SIZE}",
    "page_no": "{PAGINATION_START_PAGE}"
}

数据请求与清洗

在发送请求后,我们将接收到一批原始数据。为了便于后续处理,需要对这些数据进行初步清洗和转换。以下是一些常见的数据清洗步骤:

  1. 字段映射:将接口返回的数据字段映射到目标系统所需的字段。例如,将返回的order_no映射到目标系统中的订单号字段。
  2. 数据过滤:根据业务需求过滤掉不必要的数据。例如,只保留特定状态(如已发货、已完成)的订单。
  3. 格式转换:将日期时间等字段转换为目标系统所需的格式。

示例代码

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

import requests
import json
from datetime import datetime

# 设置请求URL和头信息
url = "https://api.wangdian.cn/openapi2/wdt.stockout.order.query.trade"
headers = {
    "Content-Type": "application/json"
}

# 设置请求参数
params = {
    "start_time": datetime.strftime(LAST_SYNC_TIME, "%Y-%m-%d %H:%M:%S"),
    "end_time": datetime.strftime(CURRENT_TIME, "%Y-%m-%d %H:%M:%S"),
    "status": "95,105,110,113",
    "shop_no": "KH01181",
    "page_size": 40,
    "page_no": 0
}

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

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

    # 数据清洗与转换示例
    cleaned_data = []
    for item in data['orders']:
        cleaned_item = {
            'order_id': item['order_no'],
            'stockout_id': item['stockout_id'],
            'status': item['status'],
            'shop_no': item['shop_no'],
            'warehouse_no': item['warehouse_no']
        }
        cleaned_data.append(cleaned_item)

    # 打印或保存清洗后的数据
    print(cleaned_data)
else:
    print(f"Error: {response.status_code}, {response.text}")

小结

通过以上步骤,我们成功地从旺店通·企业奇门接口获取了销售出库单数据,并进行了初步清洗和转换。这一步骤为后续的数据转换与写入奠定了基础。在实际应用中,可以根据具体业务需求进一步优化和扩展这些操作。 如何对接钉钉API接口

数据转换与写入金蝶云星辰V2API接口的技术案例

在数据集成生命周期的第二步,我们将已经集成的源平台数据进行ETL转换,转为目标平台金蝶云星辰V2API接口所能够接收的格式,并最终写入目标平台。本文将详细探讨这一过程中涉及的技术细节和实现方法。

API接口配置

首先,我们需要了解金蝶云星辰V2API接口的配置。根据提供的元数据配置,我们需要向/jdy/v2/scm/sal_out_bound接口发送POST请求。该接口要求的数据字段包括单据来源、出库日期、单据编号、客户ID、备注以及商品分录等。

以下是元数据配置中的主要字段及其描述:

  1. 单据来源:固定传入ISV
  2. 出库日期:格式为YYYY-MM-DD,从源数据中的consign_time字段获取。
  3. 单据编号:从源数据中的stockout_no字段获取。
  4. 客户ID:通过MongoDB查询获取,查询条件为商品实体ID(details_list.src_oid)。
  5. 备注:从源数据中的cs_remark字段获取。
  6. 商品分录:包含商品编码、仓库编码、数量、含税单价等多个子字段。

数据转换过程

在实际操作中,数据转换包括以下几个步骤:

  1. 提取源数据: 从源平台提取销售出库单的数据,包括基本信息和商品明细。

  2. 映射字段: 根据元数据配置,将源数据映射到目标API所需的字段。例如:

    • bill_source: 固定值 ISV
    • bill_date: 映射自 consign_time
    • bill_no: 映射自 stockout_no
    • customer_id: 通过MongoDB查询获取
    • remark: 映射自 cs_remark
  3. 处理数组类型字段: 对于商品分录(即数组类型字段),需要逐一处理每个子项,并进行相应的映射和查询。例如:

    • material_number: 映射自 details_list.spec_no
    • stock_number: 映射自 warehouse_no
    • qty: 映射自 details_list.goods_count
    • 其他字段通过MongoDB查询或条件判断获取

MongoDB查询示例

对于需要通过MongoDB查询获取的数据,可以使用如下示例代码:

const mongoQuery = async (collection, query, field) => {
    const result = await db.collection(collection).findOne(query);
    return result ? result[field] : null;
};

// 获取客户ID
const customerId = await mongoQuery(
    'customer_collection',
    { 'content.material_entity_id': details_list.src_oid },
    'content.customer_id'
);

// 获取含税单价
const taxPrice = await mongoQuery(
    'material_collection',
    { 'content.material_entity_id': details_list.src_oid },
    'content.material_entity_tax_price'
);

数据写入目标平台

完成数据转换后,将其封装为符合金蝶云星辰V2API接口要求的JSON格式,并发送POST请求:

const axios = require('axios');

const payload = {
    bill_source: "ISV",
    bill_date: consign_time,
    bill_no: stockout_no,
    customer_id: customerId,
    remark: cs_remark,
    material_entity: details_list.map(item => ({
        material_number: item.spec_no,
        stock_number: warehouse_no,
        qty: item.goods_count,
        tax_price: await mongoQuery('material_collection', { 'content.material_entity_id': item.src_oid }, 'content.material_entity_tax_price'),
        // 其他子项同理处理
    }))
};

axios.post('/jdy/v2/scm/sal_out_bound', payload)
    .then(response => {
        console.log('Data successfully written to Kingdee Cloud:', response.data);
    })
    .catch(error => {
        console.error('Error writing data to Kingdee Cloud:', error);
    });

关键技术点总结

  1. 元数据配置解析:根据提供的元数据配置文件,准确解析每个字段及其来源。
  2. 动态查询与映射:利用MongoDB动态查询功能,根据条件获取所需的数据并进行映射。
  3. 数组处理与嵌套结构:对数组类型的数据进行逐项处理,并确保嵌套结构符合目标API要求。
  4. 错误处理与日志记录:在发送请求时,做好错误处理和日志记录,以便排查问题。

通过以上步骤,我们可以实现将源平台的数据成功转换并写入到金蝶云星辰V2API接口中,从而完成整个ETL过程。 用友与外部系统接口集成开发

更多系统对接方案