用友U8API的数据转换与集成详解

  • 轻易云集成顾问-张妍琪

技术案例分享:领星ERP数据集成到用友U8

在复杂的企业业务场景中,数据的高效流通和精准管理至关重要。本文将详细解析如何利用轻易云数据集成平台,将领星ERP系统中的FBA退货订单无缝对接到用友U8系统,实现退货单的数据同步。

流程概述与技术难点

为了确保每一笔FBA退货订单准确、及时地传输到用友U8,我们面临以下几个关键技术挑战:

  1. API接口调用与分页处理: 从领星ERP获取FBA退货订单数据需要调用其提供的接口/cost/center/api/cost/stream。由于存在分页和限流问题,我们必须设计可靠的抓取策略,以防止遗漏任何一条记录。

  2. 自定义数据转换逻辑: 领星ERP与用友U8之间的数据格式存在差异,需要在传输过程中进行格式转换和映射。这就要求我们编写特定的转换规则,使得两套系统的数据能够顺利交互。

  3. 批量集成与高吞吐量支持: 为解决大量数据快速写入的问题,通过使用轻易云平台内置的大规模并行处理能力,把从领星ERP获取的大批量数据可靠地写入到用友U8的接口/apilink/u8api中。这一步骤不仅要考虑吞吐能力,还需保证事务的一致性和完整性。

  4. 实时监控与异常处理机制: 数据集成过程中,任何一个环节出现故障都有可能导致业务中断。因此,我们引入了集中式监控和告警系统,对每个任务节点进行实时跟踪。一旦发生异常,通过预先设定的重试机制进行自动恢复,以最大程度减少对业务产生的不良影响。

实现步骤简述

  • 步骤一:API连接配置 配置并测试接入领星ERP API /cost/center/api/cost/stream 和 用友U8 API /apilink/u8api,确保基础通信正常。

  • 步骤二:数据抓取策略设计 针对分页及限流,确定合理的数据提取频率,并实现可靠调度以保证所有页码均被成功读取。

  • 步骤三:自定义字段映射 编写必要代码逻辑,实现从源端(领星ERP)字段向目标端(用友U8)的正确转化,包括必需字段缺失值补充等操作。

  • 步骤四:大规模并行写入 基于高吞吐量支持功能,将清洗后的批量数据通过 金蝶与外部系统打通接口

    调用领星ERP接口获取并加工数据的技术案例

在数据集成生命周期的第一步,我们需要调用源系统领星ERP的接口/cost/center/api/cost/stream来获取并加工数据。本文将详细探讨如何配置和使用该接口,确保数据能够顺利从领星ERP传输到目标系统。

接口配置与调用

首先,我们需要了解接口的基本信息和请求参数。根据提供的元数据配置,接口采用POST方法进行调用,主要用于查询(effect: QUERY)。以下是请求参数的详细说明:

  • wh_names(仓库名): 类型为字符串,通过逗号分隔多个仓库名。
  • shop_names(店铺名): 类型为字符串,通过逗号分隔多个店铺名。
  • skus(SKU): 类型为字符串,通过逗号分隔多个SKU。
  • mskus(MSKU): 类型为字符串,通过逗号分隔多个MSKU。
  • disposition_types(库存属性): 类型为字符串,通过逗号分隔不同库存属性值,如1表示可用在途,2表示可用,3表示次品。
  • business_types(出入库类型): 类型为字符串,通过逗号分隔不同业务类型值,如30表示FBA无源单销售退货,31表示FBA有源单销售退货。
  • query_type(日期查询类型): 类型为字符串,用于指定查询日期类型,如01表示库存动作日期。
  • start_date(起始日期): 类型为字符串,格式为Y-m-d,不允许跨月。
  • end_date(结束日期): 类型为字符串,格式为Y-m-d,不允许跨月。
  • business_numbers(业务编号): 类型为字符串,用于指定业务编号。
  • origin_accounts(源头单据号): 类型为字符串,用于指定源头单据号。
  • offset(页码偏移量): 类型为字符串,默认值为1。
  • length(分页长度): 类型为字符串,默认值为200条。

数据请求与清洗

在调用接口之前,需要对请求参数进行适当的处理和清洗。例如,对于仓库名、店铺名、SKU等字段,需要将其转换成数组格式,以便后续处理。以下是一个示例代码片段,用于构建请求参数:

import requests
import json

# 构建请求参数
params = {
    "wh_names": "仓库A,仓库B",
    "shop_names": "店铺A,店铺B",
    "skus": "SKU1,SKU2",
    "mskus": "MSKU1,MSKU2",
    "disposition_types": "1,2,3",
    "business_types": "30,31",
    "query_type": "01",
    "start_date": "2024-01-01",
    "end_date": "2024-01-31",
    "offset": "1",
    "length": "200"
}

# 转换字段格式
def string_to_array(field_value):
    return field_value.split(',')

params['wh_names'] = string_to_array(params['wh_names'])
params['shop_names'] = string_to_array(params['shop_names'])
params['skus'] = string_to_array(params['skus'])
params['mskus'] = string_to_array(params['mskus'])
params['disposition_types'] = string_to_array(params['disposition_types'])
params['business_types'] = string_to_array(params['business_types'])

# 发送POST请求
response = requests.post("https://api.lingxing.com/cost/center/api/cost/stream", json=params)
data = response.json()

# 打印返回的数据
print(json.dumps(data, indent=4))

数据转换与写入

获取到数据后,需要对其进行必要的转换和写入操作。例如,将领星ERP返回的数据转换成目标系统U8所需的格式,并将其写入U8系统。以下是一个示例代码片段,用于处理返回的数据并写入目标系统:

def transform_data(data):
    transformed_data = []
    for item in data:
        transformed_item = {
            'unique_key': item.get('unique_key'),
            'wo_number': item.get('wo_number'),
            'business_number': item.get('business_number'),
            # 其他字段转换逻辑
        }
        transformed_data.append(transformed_item)
    return transformed_data

# 转换数据
transformed_data = transform_data(data)

# 写入目标系统U8
def write_to_u8(transformed_data):
    for item in transformed_data:
        # 构建U8 API请求参数
        u8_params = {
            'unique_key': item['unique_key'],
            'wo_number': item['wo_number'],
            'business_number': item['business_number'],
            # 其他字段映射
        }
        # 发送POST请求到U8 API
        u8_response = requests.post("https://api.u8.com/write", json=u8_params)
        print(u8_response.status_code)

write_to_u8(transformed_data)

通过上述步骤,我们实现了从领星ERP获取数据、清洗和转换数据,并将其写入目标系统U8的全过程。这一过程不仅确保了数据的一致性和准确性,还提高了业务流程的自动化程度。 用友与SCM系统接口开发配置

用友U8API接口的数据ETL转换与写入

在使用轻易云数据集成平台进行数据处理时,第二阶段的核心任务是将已经集成的源平台数据进行ETL转换,并转为目标平台用友U8API接口所能够接收的格式,最终写入目标平台。本文将详细探讨这一过程中的技术细节和关键步骤。

1. 数据请求与清洗

在数据集成生命周期的第一阶段,我们已经完成了数据请求与清洗。此时,源平台(如领星-FBA退货订单)的数据已经被提取并初步处理。接下来,我们需要将这些数据转换为用友U8系统能够理解和处理的格式。

2. 数据转换与写入

2.1 API接口配置

根据元数据配置,我们需要调用用友U8的API接口来创建和审核退货单。具体的API路径为/apilink/u8api,请求方法为POST,且需要进行ID校验。

2.2 单据头配置

单据头部分包含了退货单的一些基本信息,如退货单号、退货日期、销售类型等。这些字段需要根据源平台的数据进行映射和转换。

{
  "field": "data",
  "label": "data参数",
  "type": "object",
  "describe": "data参数",
  "children": [
    {
      "field": "单据头",
      "label": "单据头",
      "type": "object",
      "describe": "单据头",
      "children": [
        {"field": "退货单号", "label": "退货单号", "type": "string", "describe": "发货单号"},
        {"field": "退货日期", "label": "退货日期", "type": "date", "describe": "发货日期", "value":"2024-01-31"},
        {"field": "销售类型", "label": "销售类型", "type": "string", "describe":"销售类型","value":"跨境零售"},
        {"field":"客户简称","label":"客户简称","type":"string","describe":"客户简称","value":"{shop_name}"},
        {"field":"销售部门","label":"销售部门","type":"string","describe":"销售部门","value":"跨境电商"},
        {"field":"税率","label":"税率","type":"string","describe":"税率"},
        {"field":"制单人","label":"制单人","type":"string","value":"钟艳珍"},
        {"field":"备注","label":"备注","type":"string","describe":"备注"},
        {"field":"订单号","label":"订单号","type":"string"},
        {"field":"客户地址","label":"客户地址","type":"string"},
        {"field":"币种","label":"币种","type":"string","value":
          "_findCollection find name from 496859c4-a472-373d-849a-39dda60a2e62 where code={{币别}}"
        },
        {"field" : 业务员, label:业务员, type:string, value:{shop_name}, mapping:{target:65377d9e43cae608552f8d44,direction:positive}},
        {"field" : 发货地址, label:发货地址, type:string},
        {"field" : 审核人, label:审核人, type:string, value:袁忠平},
        {"field" : 汇率, label:汇率, type:string,value:
          "_findCollection find my_rate from 496859c4-a472-373d-849a-39dda60a2e62 where code={{币别}}"
        },
        {"field" : 制单时间,label:制单时间,type:string,value:"_function NOW()"},
        {"field" : 审核日期,label:审核日期,type:string,value:"2024-01-31"}
      ]
    }
  ]
}
2.3 单据体配置

单据体部分包含了具体的商品信息,如仓库名称、存货编码、数量等。这些字段同样需要根据源平台的数据进行映射和转换。

{
  field: 单据体,
  label: 单据体,
  type: array,
  describe: 单据体,
  value: goods_list,
  children:[
    {
      field: 行,
      label: 行,
      type: object,
      describe: 行,
      children:[
        {
          field: 仓库名称,
          label: 仓库名称,
          type: string,
          describe: 仓库名称,
          value:
            "_function CASE '{wh_name}' WHEN 'DTECH Multimedia-IN印度仓' THEN 'DT-IN印度仓' ELSE '{wh_name}' END",
          mapping:{target:"653b7cc955d9ff41c34d58a3",direction:"positive"}
        },
        { field:"存货编码", label:"存货编码", type:"string", describe:"存货编码", value:"{sku}" },
        { field:"数量", label:"数量", type:"string", describe:"数量", value:"-{change_quantity}" },
        { field:"税率", label:"税率", type:"string", describe:"税率" },
        { field:"含税单价", label:"含税单价", type:"string", describe:"含税单价",
          value:
            "_function {{单价}}/{{数量}}"
         },
         { field :"赠品" , label :"赠品" , type :" string ", value :
           "_function CASE '{{单价}}' WHEN ' ' THEN '是' WHEN 0 THEN '是' ELSE '否' END"
         }
       ]
     }
   ]
 }
2.4 数据写入

完成上述配置后,我们通过调用用友U8的API接口,将转换后的数据写入目标系统。具体操作包括:

  1. 创建退货单:调用returnorder/create接口,将构建好的JSON对象发送到用友U8系统。
  2. 审核退货单:调用returnorder/audit接口,对已创建的退货单进行审核。
{
   apiurl:returnorder/create,
   audit:returnorder/audit
}

总结

通过上述步骤,我们可以实现从源平台到目标平台的数据ETL转换,并成功将数据写入用友U8系统。这一过程不仅要求对各个字段进行精确映射,还需考虑不同系统间的数据格式差异,通过合理配置和调用API接口,实现无缝的数据集成。 数据集成平台可视化配置API接口

更多系统对接方案