轻易云平台ETL实践:将旺店通数据写入用友BIP

  • 轻易云集成顾问-林峰

旺店通·企业奇门数据集成到用友BIP:退货入库对接YS销售出库(红字) 实践分享

在企业信息系统中,不同平台间的数据对接往往是一个复杂且关键的过程。本篇文章将聚焦于一个实际运行的案例,即如何将旺店通·企业奇门中的退货入库数据高效、可靠地集成到用友BIP系统,具体方案名称为“退货入库对接YS销售出库(红字)-v”。本文提供了一些实践经验和技术要点,供大家参考。

首先,我们使用了旺店通·企业奇门提供的API接口wdt.stockin.order.query.refund来定时抓取退货入库的数据。为了确保数据不漏单并增加数据获取的成功率,在设计过程中我们重点考虑了接口调用的限流和分页处理,并制定了异常处理与错误重试机制。这些措施有效避免了由于网络波动或其他因素导致的数据丢失情况。

此外,为解决大量数据快速写入用友BIP的问题,我们深入研究并运用了其API /yonbip/scm/salesout/mergeSourceData/save。通过批量操作提高写入效率,同时结合轻易云的平台特性,保证每个步骤在全生命周期内透明可视化,实现实时监控和日志记录。不仅如此,对于两者之间的数据格式差异,我们基于用友BIP的平台特性进行了定制化数据映射,以实现无缝衔接。

值得一提的是,该项目还采用了一系列定制化手段,对不同类型或者异常状态进行多层次、分类别地细致管理。例如,通过精确划分业务逻辑,保障涉及任何问题都能被迅速定位及自动修复,从而提高整个流程的信息一致性和可靠性。

综合以上所述,本次技术实践不仅展示了如何高效完成旺店通·企业奇门与用友BIP之间的数据集成,还提出了一套行之有效的方法论,可以为类似场景下其他系统间的数据对接提供有益借鉴。在后续内容中,我们将进一步解析各环节的具体实施细节,包括调用示例代码、配置策略等,以便更直观地了解整个集成过程。 泛微OA与ERP系统接口开发配置

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

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

接口调用配置

首先,我们需要配置接口调用的元数据。根据提供的元数据配置,我们可以看到该接口采用POST方法,并且支持分页查询。以下是具体的配置细节:

  • API名称: wdt.stockin.order.query.refund
  • 请求方法: POST
  • 分页大小: 50条记录
  • 请求参数:
    • start_time: 开始时间,格式为yyyy-MM-dd HH:mm:ss
    • end_time: 结束时间,格式为yyyy-MM-dd HH:mm:ss
    • status: 入库单状态,默认查询已完成单据(80)
    • shop_no: 店铺编号,用于区分不同店铺的数据
    • page_size: 每页返回的数据条数,范围1~50,默认40
    • page_no: 页号,从0页开始

请求参数设置

为了实现增量数据获取,我们需要动态设置start_timeend_time参数。通常情况下,这两个参数分别对应上次同步时间和当前时间:

{
  "start_time": "{{LAST_SYNC_TIME|datetime}}",
  "end_time": "{{CURRENT_TIME|datetime}}",
  "status": "80",
  "shop_no": "your_shop_no",
  "page_size": "{PAGINATION_PAGE_SIZE}",
  "page_no": "{PAGINATION_START_PAGE}"
}

其中,{{LAST_SYNC_TIME|datetime}}{{CURRENT_TIME|datetime}}是平台内置的变量,用于动态获取上次同步时间和当前时间。

数据格式化与转换

在获取到原始数据后,需要对部分字段进行格式化处理。例如,将返回结果中的stockin_time字段重新命名为stockin_time_new并转换为日期格式:

"formatResponse": [
    {
        "old": "stockin_time",
        "new": "stockin_time_new",
        "format": "date"
    }
]

这种转换确保了数据在后续处理阶段的一致性和可读性。

数据请求与清洗

通过上述配置,我们可以发起对源系统的请求,并获取相应的退货入库单据数据。在实际操作中,可以使用以下代码片段来实现这一过程:

import requests
import json

url = 'https://api.wangdian.cn/openapi2/wdt.stockin.order.query.refund'
headers = {'Content-Type': 'application/json'}
payload = {
    'start_time': '2023-01-01 00:00:00',
    'end_time': '2023-01-31 23:59:59',
    'status': '80',
    'shop_no': 'your_shop_no',
    'page_size': 50,
    'page_no': 0
}

response = requests.post(url, headers=headers, data=json.dumps(payload))
data = response.json()

# 数据清洗与转换
for record in data['orders']:
    record['stockin_time_new'] = convert_to_date(record['stockin_time'])

其中,convert_to_date()函数用于将字符串类型的日期转换为标准日期格式。

异常处理与重试机制

在实际操作中,还需要考虑网络异常、接口超时等问题。可以通过设置重试机制来提高数据请求的可靠性:

import time

def fetch_data_with_retry(url, headers, payload, retries=3):
    for attempt in range(retries):
        try:
            response = requests.post(url, headers=headers, data=json.dumps(payload))
            if response.status_code == 200:
                return response.json()
            else:
                print(f"Error: {response.status_code}")
        except Exception as e:
            print(f"Exception occurred: {e}")
        time.sleep(2 ** attempt) # 指数退避策略
    return None

data = fetch_data_with_retry(url, headers, payload)

通过上述步骤,我们能够高效地调用旺店通·企业奇门接口获取退货入库单据,并对数据进行必要的清洗和转换,为后续的数据处理和分析奠定基础。 电商OMS与ERP系统接口开发配置

轻易云数据集成平台:将源平台数据转换为用友BIPAPI接口格式并写入目标平台

在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL转换,使其符合用友BIPAPI接口所能够接收的格式,并最终写入目标平台。本文将深入探讨如何利用轻易云数据集成平台完成这一任务,特别是通过配置元数据来实现这一过程。

API接口配置

首先,我们需要了解目标平台用友BIPAPI接口的具体配置要求。根据提供的元数据配置,API接口路径为/yonbip/scm/salesout/mergeSourceData/save,请求方法为POST。以下是详细的请求字段及其描述:

  1. mergeSourceData: 是否合并上游数据,值为true时,需要提供来源单据主表ID、来源单据行ID、单据转换规则和操作标识。
  2. vouchdate: 单据日期,例如2020-11-30 00:00:00
  3. warehouse: 仓库ID或编码,例如Z001
  4. bizFlow: 流程ID,例如4420f835-f5e0-11ec-9896-6c92bf477043
  5. bizFlow_version: 流程版本,例如V1.0
  6. code: 单据编号,例如XSCK20201130000002
  7. bustype: 交易类型ID或编码,例如A30001
  8. details: 销售出库单子表,包括数量、来源单据主表ID、来源单据行ID、批次号、单据转换规则、货位和操作标识等字段。

数据转换与写入

在轻易云数据集成平台中,我们可以通过配置ETL流程来实现上述字段的数据转换与写入。以下是关键步骤:

  1. 提取源数据

    • 从源系统提取退货入库相关的数据。这些数据可能包括退货单编号、商品编号、数量等信息。
  2. 数据清洗与转换

    • 根据业务需求,对提取的数据进行清洗和转换。例如,将退货数量转为负数以符合销售出库(红字)的要求:
      {
      "field": "qty",
      "label": "数量",
      "type": "string",
      "describe": "数量 示例:12",
      "value": "_function {{details_list.goods_count}}*(-1)"
      }
  3. 映射到目标字段

    • 将清洗后的数据映射到用友BIPAPI接口所需的字段。例如,将源系统中的仓库编号映射到目标系统中的仓库字段:
      {
      "field": "warehouse",
      "label": "仓库id或编码",
      "type": "string",
      "describe": "仓库id或编码 示例:Z001",
      "value": "{warehouse_no}"
      }
  4. 处理关联关系

    • 处理与上游单据的关联关系。例如,通过查询获取来源单据主表ID和行ID:
      {
      "field": "sourceid",
      "label": "来源单据主表id",
      "type": "string",
      "describe": "来源单据主表id,如果有来源则必输",
      "value": "_findCollection find new_id from 0f0e68a8-e0e7-3b16-b5d0-a92181fac0a6 where code={src_order_no}"
      },
      {
      "field": "sourceautoid",
      "label": "来源单据行id",
      "type": "string",
      "describe": "来源单据行id,有来源必输",
      "value": "_mongoQuery fa473892-f9ab-3980-849e-5ef4c61d75bb findField=content.new_saleReturnDetailId where={\"content.code\":{\"$eq\":\"{src_order_no}\"},\"content.skuCode\":{\"$eq\":\"{{details_list.goods_no}}\"},\"content.saleReturnDetailDefineCharacter.attrext50\":{\"$eq\":\"{{details_list.src_order_detail_id}}\"}}"
      }
  5. 构建请求体并发送请求

    • 构建完整的请求体,包括所有必要字段和子表信息:
      {
      "mergeSourceData": true,
      ...
      "_status": "Insert"
      }
    • 使用POST方法将请求体发送到用友BIPAPI接口路径。

实践案例

假设我们有一条退货入库记录,其退货单编号为"THRK20201130000001",商品编号为"SP001",数量为10,仓库编号为"Z001"。我们需要将其转换为销售出库(红字)记录并写入用友BIP系统。

  1. 提取源数据:

    {
     "src_order_no": "THRK20201130000001",
     ...
    }
  2. 数据清洗与转换:

    {
     ...
     {"field":"qty","value":"_function {{details_list.goods_count}}*(-1)"},
     ...
    }
  3. 映射到目标字段:

    {
     ...
     {"field":"warehouse","value":"Z001"},
     ...
    }
  4. 处理关联关系:

    {
      ...
      {"field":"sourceid","value":"_findCollection find new_id from ... where code={src_order_no}"},
      {"field":"sourceautoid","value":"_mongoQuery ... findField=content.new_saleReturnDetailId where={...}"}
      ...
    }
  5. 构建请求体并发送请求:

    {
      ...
      "_status":"Insert"
    }

    通过上述步骤,我们可以成功地将源平台的数据转换为用友BIPAPI接口所需的格式,并写入目标平台,实现了高效的数据集成。 用友与WMS系统接口开发配置

更多系统对接方案