从旺店通提取销售退货数据并写入金蝶云星辰V2

  • 轻易云集成顾问-黄宏棵

PACKAGE--旺店通销售退货单对接金蝶云星辰销售退货单技术案例分享

在本案例中,我们将聚焦如何通过轻易云数据集成平台实现旺店通·企业奇门的数据无缝对接到金蝶云星辰V2,重点探讨"PACKAGE--旺店通销售退货单对接金蝶云星辰销售退货单"的技术细节。

首先,我们需要调用旺店通·企业奇门提供的wdt.stockin.order.query.refund API接口,从中抓取具体的销售退货数据。这个过程需特别注意处理分页和限流问题,以确保不会因请求过多而触发系统保护机制。在获取数据后,利用轻易云的平台能力完成必要的数据清洗、转换,并根据业务需求自定义转换逻辑解决两边系统之间的数据格式差异。

为保证这些批量化的数据能够快速、安全地写入金蝶云星辰V2,需要配置其API接口(/jdy/v2/scm/sal_in_bound)来接受并处理输入的数据。这一步包含多个关键技术点:高吞吐量支持、实时监控以及异常检测和告警。集中监控和日志记录功能可以让我们及时发现潜在的问题,并通过自动化重试机制提高整体流程的可靠性。

此外,为保障整个集成过程中不漏单,设置定时任务以定期从旺店通·企业奇门接口抓取更新的数据,同时要考虑实现批量操作,以减少频繁请求所带来的负载压力。在实际实施过程中,也会结合具体使用场景进行优化,例如缓存策略和动态调整批次大小等。

以上便是本项目所涉及的一些核心技术点。在下文中,我们将详细拆解各个开发步骤及其对应的代码实现,包括如何准确调用相关API、配置数据映射规则以及处理异常情况等内容。 金蝶与外部系统打通接口

调用旺店通·企业奇门接口获取并加工数据

在数据集成生命周期的第一步,我们需要调用源系统的API接口以获取初始数据。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口wdt.stockin.order.query.refund来获取销售退货单数据,并进行初步加工。

接口概述

接口wdt.stockin.order.query.refund用于查询销售退货单信息,支持增量获取和分页查询。该接口采用POST请求方式,返回的数据包括订单号、入库单ID等关键字段。

元数据配置解析

根据提供的元数据配置,我们可以看到以下几个关键点:

  • API名称: wdt.stockin.order.query.refund
  • 请求方法: POST
  • 主要字段:
    • order_no: 订单号
    • stockin_id: 入库单ID
  • 请求参数:
    • start_time: 开始时间,用于增量获取数据,格式为yyyy-MM-dd HH:mm:ss
    • end_time: 结束时间,用于增量获取数据,格式为yyyy-MM-dd HH:mm:ss
    • status: 入库单状态,默认查询已完成的单据(状态码80)
    • shop_no: 店铺编号,用于区分不同店铺的数据
    • 分页参数:page_sizepage_no

请求参数设置

在实际操作中,我们需要设置好请求参数,以确保能够正确地调用接口并获取所需的数据。以下是一个典型的请求参数设置示例:

{
    "start_time": "{{LAST_SYNC_TIME|datetime}}",
    "end_time": "{{CURRENT_TIME|datetime}}",
    "status": "80",
    "shop_no": "SHOP123",
    "page_size": "40",
    "page_no": "0"
}
  • start_timeend_time分别表示上次同步时间和当前时间,用于实现增量数据获取。
  • status设置为80,表示只查询已完成的退货单。
  • shop_no指定了特定店铺编号。
  • 分页参数设置为每页40条记录,从第0页开始。

数据处理与清洗

在成功调用API并获取到原始数据后,需要对数据进行初步清洗和处理,以便后续的数据转换与写入步骤。以下是一些常见的数据处理操作:

  1. 字段映射: 将API返回的字段映射到目标系统所需的字段。例如,将返回的order_no映射到目标系统中的订单号字段。
  2. 数据类型转换: 确保所有字段的数据类型符合目标系统要求。例如,将日期字符串转换为日期对象。
  3. 去重与过滤: 移除重复记录,并根据业务规则过滤不需要的数据。

示例代码

以下是一个示例代码片段,展示如何通过轻易云平台调用接口并处理返回的数据:

import requests
import json
from datetime import datetime

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

# 构建请求参数
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",
    "shop_no": "SHOP123",
    "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()

    # 数据处理与清洗
    processed_data = []
    for record in data['orders']:
        processed_record = {
            'order_number': record['order_no'],
            'stockin_id': record['stockin_id'],
            # 添加更多字段映射和处理逻辑...
        }
        processed_data.append(processed_record)

    # 输出处理后的数据
    print(processed_data)
else:
    print(f"Error: {response.status_code}, {response.text}")

通过上述步骤,我们可以高效地从旺店通·企业奇门接口获取销售退货单数据,并进行必要的清洗和处理,为后续的数据转换与写入打下坚实基础。 用友与CRM系统接口开发配置

将源平台数据转换为金蝶云星辰V2API接口格式并写入目标平台

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

数据请求与清洗

在ETL流程中,首先要从源系统中提取数据并进行清洗。假设我们已经完成了这一步,接下来需要将清洗后的数据进行格式转换,以符合金蝶云星辰V2API接口的要求。

数据转换与写入

根据元数据配置,我们需要将源平台的数据字段映射到金蝶云星辰V2API接口的相应字段。以下是具体的字段映射和转换逻辑:

  1. 出库日期(bill_date)

    • 类型:date
    • 描述:格式为YYYY-MM-DD
    • 源字段:check_time
    • 转换逻辑:直接映射源字段值。
  2. 客户编码(customer_number)

    • 类型:string
    • 描述:客户编码
    • 源字段:shop_no
    • 转换逻辑:直接映射源字段值。
  3. 单据编码(bill_no)

    • 类型:string
    • 描述:单据编码
    • 源字段:order_no
    • 转换逻辑:直接映射源字段值。
  4. 分录明细行(material_entity)

    • 类型:array
    • 描述:包含多个子字段

      1. 商品编码(material_number)

        • 类型:string
        • 描述:商品编码
        • 源字段:details_list.spec_no
        • 转换逻辑:直接映射源字段值。
      2. 价税合计(all_amount)

        • 类型:string
        • 描述:价税合计
        • 源字段:details_list.right_cost
        • 转换逻辑:直接映射源字段值。
      3. 仓库编码(stock_number)

        • 类型:string
        • 描述:仓库编码
        • 源字段:warehouse_no
        • 转换逻辑:直接映射源字段值。
      4. 数量(qty)

        • 类型:float
        • 描述:数量
        • 源字段:details_list.goods_count
        • 转换逻辑:直接映射源字段值。
      5. 是否赠品(is_free)

        • 类型:string
        • 描述:“true”或“false”
        • 源字段:details_list.right_cost
        • 转换逻辑:
          case '{{details_list.right_cost}}' when "0.0000" then 'true' else 'false' end
      6. 生产日期(kf_date)

        • 类型: string
        • 描述: 生产日期
      7. 单位id(unit_id)

        • 类型: string
        • 描述: 单位id,通过MongoDB查询获取:
          _mongoQuery b88a7889-af5d-3efd-aac4-d4960eae6748 findField=content.base_unit_id where={"content.number":{"$eq":"{{details_list.spec_no}}"}}

实际操作示例

假设我们有如下JSON格式的数据从源平台提取:

{
    "check_time": "2023-10-01",
    "shop_no": "CUST001",
    "order_no": "ORD12345",
    "warehouse_no": "WH001",
    "details_list": [
        {
            "spec_no": "PROD001",
            "right_cost": "100.00",
            "goods_count": 10,
            "production_date": "2023-09-01"
        },
        {
            "spec_no": "PROD002",
            "right_cost": "0.0000",
            "goods_count": 5,
            "production_date": "2023-09-05"
        }
    ]
}

通过上述元数据配置和转换逻辑,生成的目标平台数据格式如下:


{
    "bill_date": "2023-10-01",
    "customer_number": "CUST001",
    "bill_no": "ORD12345",
    "material_entity": [
        {
            "material_number": "PROD001",
            "all_amount": "100.00",
            "stock_number": "WH001",
            "qty": 10,
            "is_free": false,
            // MongoDB查询结果填充unit_id,例如:
            // "_mongoQuery result for PROD001"
            // 此处假设查询结果为"UNIT001"
            // 实际操作中需替换为真实查询结果:
            // "_mongoQuery b88a7889-af5d-3efd-aac4-d4960eae6748 findField=content.base_unit_id where={\"content.number\":{\"$eq\":\"PROD001\"}}"
            // 查询结果示例:
            // {"content.base_unit_id":"UNIT001"}
            // 则unit_id填充为"UNIT001"
            // 单位id:
            // 此处假设查询结果为"UNIT001"
            // 实际操作中需替换为真实查询结果:
            "_mongoQuery result for PROD001"

![用友与WMS系统接口开发配置](https://pic.qeasy.cloud/T23.png~tplv-syqr462i7n-qeasy.image)
更多系统对接方案