ETL转换与数据同步:旺店通到金蝶云案例分析

  • 轻易云集成顾问-曹润

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

在实际业务场景中,销售退货同步是一个关键环节。本文将聚焦于如何通过轻易云数据集成平台,实现旺店通·企业奇门的数据高效、可靠地集成到金蝶云星空,其中方案名称为:销售退货同步_后补批号RK。在这个案例中,我们使用了wdt.stockin.order.query.refund获取旺店通的退货订单数据,并通过batchSave API接口实现快速写入到金蝶云星空。

首先,通过定时任务抓取旺店通·企业奇门API wdt.stockin.order.query.refund的数据,以确保不会有任何订单遗漏。这需要特别注意分页和限流问题,通过对API请求进行合理划分,保证每次请求都能成功并获得预期返回结果。同时,为应对大量数据处理需求,我们设计了批量写入机制,将获取到的退货订单一次性导入至金蝶云星空,提高整体效率。

其次,对于两者之间的数据结构差异,在映射过程中我们进行了精细化的定制。确保每个字段准确无误地对接,这一步骤尤为关键,因为稍有不慎就可能导致系统间的信息不同步。此外,在整个过程中还设置了全面的异常处理与错误重试机制,一旦出现意外情况,即可自动重发直至成功,有效保障了数据传输过程中的稳定性和可靠性。

最后,对各个环节实施实时监控与日志记录,使操作透明化,每一笔交易都有迹可循,从而进一步提升业务透明度和控制能力。

以上就是本项目技术方案开头部分,接下来将详细介绍具体实施步骤及代码示例(待续)。 金蝶与CRM系统接口开发配置

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

在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口wdt.stockin.order.query.refund,并对获取的数据进行初步加工。

接口调用配置

首先,我们需要配置元数据以便正确调用接口。以下是元数据配置的详细内容:

{
  "api": "wdt.stockin.order.query.refund",
  "method": "POST",
  "number": "order_no",
  "id": "order_no",
  "pagination": {
    "pageSize": 50
  },
  "request": [
    {"field":"start_time","label":"开始时间","type":"datetime","value":"{{LAST_SYNC_TIME|datetime}}"},
    {"field":"end_time","label":"结束时间","type":"datetime","value":"{{CURRENT_TIME|datetime}}"},
    {"field":"status","label":"状态","type":"string","describe":"入库单状态 10已取消20编辑中30待审核60待结算80已完成(默认查询80已完成单据)"},
    {"field":"shop_no","label":"店铺编号","type":"string"},
    {"field":"src_order_no","label":"退换单号","type":"string"},
    {"field":"stockin_no","label":"入库单号","type":"string"},
    {"field":"time_type","label":"时间类型","type":"int","describe":"0:最后修改时间,1:创建时间 2:预入库单关联时间 默认为0"},
    {"field":"shop_no","label":"店铺编号","type":"string","describe":"代表店铺所有属性的唯一编码,用于店铺区分,ERP内支持自定义(ERP店铺界面设置),用于获取指定店铺单据数据信息"},
    {"field":"shop_nos","label":"店铺编号(批量)","type":"string","describe":"批量指定店铺获取(多个店铺编号之间用英文逗号隔开,最多指定20个店铺)"}
  ],
  "otherRequest": [
    {"field": "page_size", "label": "分页大小", "type": "string", "value": "{PAGINATION_PAGE_SIZE}"},
    {"field": "page_no", "label": "页号", "type": "string", "value": "{PAGINATION_START_PAGE}"}
  ]
}

请求参数解析

在请求参数中,我们需要特别注意以下几个字段:

  • start_timeend_time:这两个字段用于指定查询的时间范围,分别取值为上次同步时间和当前时间。
  • status:用于过滤入库单的状态,默认查询已完成的单据。
  • shop_noshop_nos:用于指定需要查询的店铺编号,可以是单个或多个。
  • time_type:用于指定时间类型,例如最后修改时间、创建时间等。

数据请求与清洗

在发起请求后,我们会收到一组原始数据。这些数据可能包含冗余信息或格式不一致的问题,因此需要进行清洗和初步加工。以下是一个简单的数据清洗示例:

import requests
import json
from datetime import datetime

# 配置请求参数
url = 'https://api.wangdian.cn/openapi2/wdt.stockin.order.query.refund'
headers = {'Content-Type': 'application/json'}
payload = {
    'start_time': '2023-01-01T00:00:00',
    'end_time': datetime.now().strftime('%Y-%m-%dT%H:%M:%S'),
    'status': '80',
    'shop_no': 'SHOP123',
    'time_type': 0,
    'page_size': 50,
    'page_no': 1
}

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

# 数据清洗示例
cleaned_data = []
for item in data['orders']:
    cleaned_item = {
        'order_no': item['order_no'],
        'shop_no': item['shop_no'],
        'status': item['status'],
        # 添加其他需要的字段
    }
    cleaned_data.append(cleaned_item)

print(cleaned_data)

分页处理

由于接口返回的数据可能非常庞大,我们需要进行分页处理。通过设置page_sizepage_no参数,可以逐页获取数据并进行处理。

def fetch_all_data():
    page_no = 1
    all_data = []

    while True:
        payload['page_no'] = page_no
        response = requests.post(url, headers=headers, data=json.dumps(payload))
        data = response.json()

        if not data['orders']:
            break

        all_data.extend(data['orders'])
        page_no += 1

    return all_data

all_orders = fetch_all_data()
print(f"Total orders fetched: {len(all_orders)}")

以上代码展示了如何通过分页机制获取所有订单数据,并将其存储在一个列表中。

数据转换与写入

在完成数据清洗后,我们可以根据业务需求对数据进行进一步转换,并将其写入目标系统。例如,将订单数据转换为目标系统所需的格式,并通过API或数据库连接写入目标系统。

def transform_and_write(data):
    transformed_data = []

    for item in data:
        transformed_item = {
            # 转换为目标系统所需格式
            'order_id': item['order_no'],
            'store_id': item['shop_no'],
            # 添加其他转换逻辑
        }
        transformed_data.append(transformed_item)

    # 写入目标系统(示例)
    target_url = 'https://target-system/api/orders'

    for item in transformed_data:
        response = requests.post(target_url, headers=headers, data=json.dumps(item))
        if response.status_code != 200:
            print(f"Failed to write order {item['order_id']}")

transform_and_write(cleaned_data)

通过上述步骤,我们成功实现了从旺店通·企业奇门接口获取、清洗、转换并写入数据到目标系统的全过程。这不仅提高了数据处理效率,还确保了数据的一致性和准确性。 电商OMS与WMS系统接口开发配置

使用轻易云数据集成平台进行销售退货数据同步至金蝶云星空API接口

在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,最终写入目标平台金蝶云星空API接口。本文将详细探讨如何利用轻易云数据集成平台配置元数据,将销售退货信息同步到金蝶云星空。

配置元数据

首先,我们需要配置元数据以适应金蝶云星空API接口的要求。以下是具体的配置细节:

{
  "api": "batchSave",
  "method": "POST",
  "idCheck": true,
  "operation": {
    "rowsKey": "array",
    "rows": 1,
    "method": "batchArraySave"
  },
  "request": [
    {
      "field": "FBillTypeID",
      "label": "单据类型",
      "type": "string",
      "describe": "单据类型",
      "parser": {
        "name": "ConvertObjectParser",
        "params": "FNumber"
      },
      "value": "XSTHD01_SYS"
    },
    {
      "field": "FBillNo",
      "label": "单据编号",
      "type": "string",
      "describe": "单据编号",
      "value": "{order_no}"
    },
    {
      ...
    }
  ],
  ...
}

数据字段解析与转换

在配置过程中,关键在于如何解析和转换各个字段,使其符合金蝶云星空API的格式要求。以下是一些重要字段及其解析方法:

  • FBillTypeID: 单据类型,使用ConvertObjectParser进行解析,将内部编码转换为金蝶系统识别的编码。
  • FBillNo: 单据编号,直接从源数据中提取。
  • FSaleOrgId: 销售组织,通过查找表获取对应的组织编码。
  • FDate: 日期,直接映射源数据中的日期字段。
  • FStockOrgId: 库存组织,固定值为100。
  • FRetcustId: 退货客户,通过ConvertObjectParser解析客户编码。
  • FHeadNote: 备注信息,直接从源数据中提取。

明细信息处理

对于明细信息(FEntity),我们需要处理每一条记录中的多个字段:

{
  ...
  {
    "field":"FEntity",
    ...
    {
      ...
      {
        ...
        {
          ...
          {
            ...
            {
              ...
              {
                ...
                {
                  ...
                  {
                    ...
                    {
                      ...
                      {"field":"FLot","label":"批次","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"_function CASE '_findCollection find FIsBatchManage from 4ae4b66a-79ab-3a6d-8f33-723f326a42d0 where FNumber={{details_list.goods_no}} _endFind' WHEN 'false' THEN '' ELSE '{{details_list.batch_no}}' END","parent":"FEntity"},
                      {"field":"FNote","label":"备注","type":"string","describe":"文本","value":"{{details_list.remark}}","parent":"FEntity"},
                      {"field":"FOrderNo","label":"订单单号","type":"string","describe":"文本","value":"{{details_list.tid}}","parent":"FEntity"},
                      {"field":"F_QKZI_Text2","label":"临时批号","type":"string","describe":"文本","value":"{{details_list.batch_no}}","parent":"FEntity"}
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  ...
}

其中,每个字段都需要根据具体业务需求进行相应的转换和解析。例如:

  • FLot: 批次,根据物料编码查询是否启用批次管理,如果启用则填入批次号,否则为空。
  • FNote: 明细备注,直接映射源数据中的备注字段。

财务信息处理

财务信息(SubHeadEntity)部分也需要特别关注:

{
  ...
  {"field":"SubHeadEntity", ...}
}

其中包括结算组织等重要财务字段,这些字段同样需要通过查找表或固定值进行赋值。

最终请求生成

所有配置完成后,系统会生成一个完整的请求体,并通过POST方法提交到金蝶云星空API接口。以下是一个简化示例:

{
  ...
  {
    ...,
    {"FormId", ...},
    {"Operation", ...},
    {"IsAutoSubmitAndAudit", ...},
    {"IsVerifyBaseDataField", ...},
    {"SubSystemId", ...}
  }
}

通过这种方式,我们可以确保所有的数据都符合目标系统的要求,并且能够顺利写入金蝶云星空,实现销售退货数据的无缝同步。

以上就是利用轻易云数据集成平台进行销售退货同步至金蝶云星空API接口的一些关键技术点和配置方法,希望能为相关技术人员提供有价值的参考。 如何开发金蝶云星空API接口

更多系统对接方案