用友U8API数据转换与写入方案

  • 轻易云集成顾问-钟家寿

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

在企业信息化管理中,系统对接与数据集成是不可避免的重要环节。本文将聚焦于一个具体案例:如何成功实现从领星ERP系统的数据集成到用友U8平台,旨在通过实际操作和技术细节,为读者提供可参考的解决方案。本次案例实施方案为“领星-FBA盘点出库-->U8-其他出库【盘点出库】”。

在该项目中,我们主要面临几个核心挑战:

  1. 确保集成过程中数据不漏单: 使用轻易云平台的数据处理生命周期管理,通过其透明且可视化的操作界面,可以实时监控每个处理步骤,确保无一遗漏。同时,通过调用领星ERP接口 /cost/center/api/cost/stream 定时可靠地抓取 FBA 盘点出库数据,并进行批量处理。

  2. 大量数据快速写入到用友U8: 在实际运行期间,需要高效且稳定地将大规模的数据传输至用友U8。针对用户需求,通过优化调用 U8 接口 /apilink/u8api 实现高并发、大吞吐量的数据写入,同时利用轻易云的平台特性,实现多线程并发,提高整体效率。

  3. 分页和限流问题的处理: 对于从领星ERP获取的大量分页数据,我们采用了灵活的分片机制及限流策略,以防止过载请求造成系统性能衰减或崩溃。不仅保证了每次请求都能顺利完成,还维持了API响应速度与稳定性。

  4. API对接异常处理与错误重试机制: 在实际应用过程中,不可避免会遇到网络波动、接口超时等问题。为了提高系统鲁棒性,我们设计并实现了一套完善的异常捕获和重试机制,对失败任务进行自动重试,并记录日志以便后续分析。这不仅提升了接口调用成功率,也增强了整个流程的容错能力。

  5. 解决两系统间的数据格式差异: 为适配不同系统之间的数据结构差异,我们制定了一系列定制化映射规则。在向用友U8提交数据前,对从领星ERP获取的数据进行必要转换,以匹配目标系统所需格式,从而保证集成过程中的一致性和准确性。

上述措施共同构建起我们此次项目实施的重要基础。在后续部分,将详细探讨各项技术细节以及具体实操过程,包括如何使用轻易云平台更好地调度和管理这些关键任务,以及应对潜在的问题。 如何开发企业微信API接口

调用领星ERP接口/cost/center/api/cost/stream获取并加工数据的技术案例

在数据集成生命周期的第一步,我们需要调用领星ERP接口/cost/center/api/cost/stream来获取并加工数据。本文将详细介绍如何配置和调用该接口,以及如何处理返回的数据。

接口配置与调用

首先,我们需要根据元数据配置来构建请求参数。以下是元数据配置的详细信息:

{
  "api": "/cost/center/api/cost/stream",
  "effect": "QUERY",
  "method": "POST",
  "number": "business_number",
  "id": "unique_key",
  "name": "wo_number",
  "idCheck": true,
  "request": [
    {"field":"wh_names","label":"仓库名","type":"string","parser":{"name":"StringToArray","params":","}},
    {"field":"shop_names","label":"店铺名","type":"string","parser":{"name":"StringToArray","params":","}},
    {"field":"skus","label":"sku","type":"string","parser":{"name":"StringToArray","params":","}},
    {"field":"mskus","label":"msku","type":"string","parser":{"name":"StringToArray","params":","}},
    {"field":"disposition_types","label":"库存属性","type":"string","describe":"1 可用在途\n2 可用\n3 次品","parser":{"name":"StringToArray","params":","}},
    {"field":"business_types","label":"出入库类型","type":"string", "describe": "...", "value": "220", "parser":{"name":"StringToArray", "params": ","}},
    {"field":"query_type", "label": "...", "type": "...", "value": "..."},
    {"field":"start_date", "label": "...", "type": "...", "value": "..."},
    {"field":"end_date", "label": "...", "type": "...", "value": "..."},
    {"field":"business_numbers", "label": "...", "type": "..."},
    {"field":"origin_accounts", "label": "...", "type": "..."},
    {"field":"offset", "label": "...", "type": "...", "value" :"..."},
    {"field" :"..."}
  ],
  ...
}

根据上述元数据配置,我们可以构建如下的请求体:

{
  "wh_names":["仓库A"],
  ...
}

数据清洗与转换

在获取到原始数据后,下一步是进行数据清洗和转换。我们需要对返回的数据进行解析,并根据业务需求进行相应的处理。例如,将字符串类型的字段转换为数组,或者对日期格式进行标准化处理。

以下是一个简单的数据清洗示例:

import json

# 假设我们已经从API获取了响应数据
response_data = '''
{
  ...
}
'''

data = json.loads(response_data)

# 将字符串类型字段转换为数组
def string_to_array(field, delimiter=","):
    return field.split(delimiter) if field else []

data['wh_names'] = string_to_array(data.get('wh_names'))
data['shop_names'] = string_to_array(data.get('shop_names'))
...

# 对日期格式进行标准化处理
from datetime import datetime

def standardize_date(date_str, format="%Y-%m-%d"):
    return datetime.strptime(date_str, format).date() if date_str else None

data['start_date'] = standardize_date(data.get('start_date'))
data['end_date'] = standardize_date(data.get('end_date'))
...

print(data)

数据写入与存储

在完成数据清洗和转换后,最后一步是将处理后的数据写入目标系统或存储到数据库中。这一步通常涉及到将数据映射到目标系统的相应字段,并确保数据的一致性和完整性。

例如,将清洗后的数据写入U8系统:

import requests

u8_api_url = 'http://u8-system/api/data/import'
headers = {'Content-Type': 'application/json'}

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

if response.status_code == 200:
    print("Data successfully written to U8 system.")
else:
    print(f"Failed to write data to U8 system. Status code: {response.status_code}")

通过以上步骤,我们实现了从领星ERP接口获取、清洗、转换并写入U8系统的全流程操作。这一过程不仅提高了数据集成的效率,还确保了数据的一致性和准确性。 如何对接用友BIP接口

用友U8API接口ETL转换与写入技术案例

在数据集成过程中,将源平台的数据转换为目标平台可接收的格式是关键步骤。本文将详细探讨如何使用轻易云数据集成平台,将领星-FBA盘点出库的数据通过ETL转换,最终写入用友U8系统的其他出库模块。

数据请求与清洗

首先,我们需要从源平台获取盘点出库的数据,并进行必要的清洗和预处理。假设我们已经完成了这一步,接下来重点介绍如何配置元数据,将清洗后的数据转换并写入用友U8。

配置元数据

根据提供的元数据配置,我们需要将数据映射到用友U8API接口所需的格式。以下是具体的配置步骤:

  1. API接口配置

    {
       "api": "/apilink/u8api",
       "effect": "EXECUTE",
       "method": "POST",
       "idCheck": true,
       "operation": {
           "method": "merge",
           "field": "wh_name",
           "bodySum": ["change_quantity"],
           "bodyName": "goods_list",
           "header": ["wh_name", "shop_name"],
           "body": ["sku", "change_quantity"]
       },
       ...
    }

    这里定义了API接口的基本信息,包括请求方法(POST)、是否进行ID检查(idCheck: true)等。

  2. 单据头配置

    {
       "field": "data",
       "label": "data参数",
       "type": "object",
       ...
       "children": [
           {
               "field": "单据头",
               ...
               "children": [
                   {"field": "出库日期", ...},
                   {"field": "仓库", ...},
                   {"field": "出库类别", ...},
                   {"field": "部门", ...},
                   {"field": "业务员", ...},
                   {"field": "客户", ...},
                   {"field":"备注", ...},
                   {"field":"制单人", ...}
               ]
           },
           ...
       ]
    }

    单据头部分包含了出库日期、仓库、出库类别、部门、业务员、客户、备注和制单人等字段。这些字段需要根据源数据进行映射。例如:

    • 出库日期:固定值 2024-07-31
    • 仓库:使用函数进行条件判断 _function CASE '{wh_name}' WHEN 'DTECH Multimedia-IN印度仓' THEN 'DT-IN印度仓' ELSE '{wh_name}' END
    • 业务员和客户:映射到 {shop_name}
  3. 单据体配置

    {
       ...
       {
           "field":"单据体",
           ...
           "children":[
               {
                   ...
                   {
                       "field":"行",
                       ...
                       "children":[
                           {"field":"存货编码", ...},
                           {"field":"数量", ...}
                       ]
                   }
               }
           ]
       }
    }

    单据体部分定义了每一行记录的存货编码和数量:

    • 存货编码:映射到 {sku}
    • 数量:使用函数取绝对值 _function ABS( {change_quantity} )
  4. 其他请求参数

    {
       ...
       {
           "field":"apiurl",
           ...
           {"value":"otherout/create"}
       }
    }

    最后,指定API接口路径为 otherout/create,表示创建其他出库单。

数据转换与写入

完成元数据配置后,通过轻易云平台执行ETL流程,将源平台的数据转换为目标格式,并调用用友U8API接口进行写入。具体流程如下:

  1. 数据读取:从领星-FBA盘点出库系统中读取原始数据。
  2. 数据清洗:对读取的数据进行必要的清洗,如去除无效记录、标准化字段格式等。
  3. 数据转换:根据上述元数据配置,将清洗后的数据映射到用友U8所需的格式。
  4. 数据写入:调用用友U8API接口,将转换后的数据写入目标系统。

通过以上步骤,可以实现不同系统间的数据无缝对接,确保业务流程顺畅运行。在实际应用中,根据具体需求调整元数据配置和ETL逻辑,以满足不同场景下的数据集成需求。 如何开发用友BIP接口

更多系统对接方案