旺店通数据快速写入用友U8的集成技术及优化措施

  • 轻易云集成顾问-曹润

案例分享:旺店通·企业奇门数据集成到用友U8

在技术系统对接中,如何高效地从一家ERP系统导入数据并精确地写入另一家ERP系统,是一个常见且关键的挑战。本文将详细探讨一个实际应用案例:通过轻易云平台实现旺店通·企业奇门的数据集成到用友U8。

具体来说,我们的案例方案——“A111 oms销售出库单 => u8发货单”,旨在确保从旺店通获取准确和完整的订单信息,并将这些信息快速、无误地写入到用友U8中,以满足业务需求中的数据同步要求。在这一过程中,我们重点关注以下几个技术细节:

  1. 确保集成过程不漏单: 使用定时任务可靠抓取wdt.stockout.order.query.trade接口的数据,从源头上保证每个销售出库订单都被实时捕捉,并进行日志记录和监控,确保没有任何遗漏。

  2. 批量与快速写入: 面对大规模数据处理需求,通过优化API调用频率和分页策略,使得大量订单能够被迅速且稳定地批量导入至用友U8。同时针对分页和限流问题进行专门处理,避免由于接口限制导致的数据传输失败。

  3. 解决数据格式差异: 由于旺店通·企业奇门与用友U8之间存在明显的数据结构差异,通过自定义映射规则,将不同字段间进行了精准对应,实现了无缝转换。例如,将销售出库单中的字段重构为发货单所需的信息格式,为后续操作铺平道路。

  4. 异常处理与错误重试机制: 在实际运行过程中,不可避免会遇到网络波动或接口响应超时等情况。我们设计并实施了专属的错误检测和自动重试机制,对所有可能出现的问题进行即时反馈及修复,提高整体流程的鲁棒性(Robustness)。

  5. 实时监控与日志记录: 实现全程透明化管理,从拉取交易订单开始,每一步操作均有详实的日志记录,为后期审计、排障提供依据,同时通过报警机制及时发现并纠正异常状况,有效保障了整个集成流程的一致性和正确性。

综上所述,本次分享主要聚焦于如何有效运用API完成两大系统之间的数据交互,以及面对海量多变数据时的一系列优化措施。这不仅加速业务流转,还极大提升了操作效率,为未来更多类似项目提供宝贵经验。 轻易云数据集成平台金蝶集成接口配置

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

在数据集成生命周期的第一步,我们需要从源系统获取数据,并对其进行初步清洗和加工。本文将详细探讨如何使用轻易云数据集成平台调用旺店通·企业奇门接口wdt.stockout.order.query.trade,并对返回的数据进行处理。

接口调用配置

首先,我们需要配置接口调用的元数据。根据提供的元数据配置,我们可以看到接口的基本信息和请求参数:

{
  "api": "wdt.stockout.order.query.trade",
  "effect": "QUERY",
  "method": "POST",
  "number": "src_trade_no",
  "id": "order_no",
  "name": "order_type_name",
  "idCheck": true,
  "request": [
    {"field":"status","label":"状态","type":"string","describe":"5已取消,55已审核,95已发货,105 部分打款,110已完成,113:异常发货"},
    {"field":"start_time","label":"开始时间","type":"datetime","describe":"增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss","value":"{{LAST_SYNC_TIME|datetime}}"},
    {"field":"end_time","label":"结束时间","type":"datetime","describe":"增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss","value":"{{CURRENT_TIME|datetime}}"},
    {"field":"src_order_no","label":"系统订单编号","type":"string","describe":"可以单独按照系统单号查询,不传其他参数"},
    {"field":"src_tid","label":"原始单号","type":"string","describe":"可以单独按照原始单号查询,不传其他参数"},
    {"field":"stockout_no","label":"出库单号","type":"string","describe":"可以单独按照出库单号查询,不传其他参数"},
    {"field":"is_by_modified","label":"时间查询条件","type":"string","describe":"定义是否用最后修改时间来查询,当指定状态status字段后,传0按照原销售出库单接口规则返回,传1按照出库单的最后修改时间进行返回,默认为0"},
    {"field":"shop_nos","label":"店铺编号","type":"string","describe":"代表店铺所有属性的唯一编码,用于店铺区分,ERP内支持自定义(ERP店铺界面设置),用于获取指定店铺单据数据信息", "value": "111001,111002,111003,111010"},
    {"field":"warehouse_no","label":"仓库编号","type":"string", "describe": "代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置),用于获取指定仓库单据数据信息(不支持一次推送多个仓库编号)", "value": "111601,111701,111801,111803,111"}
  ],
  "otherRequest":[
    {"field": "page_size", "label": "分页大小", "type": "string", "describe": "每页返回的数据条数,输入值范围1~100,不传本参数,输入值默认为40", "value": "100"},
    {"field": "page_no", "label": "页号", "type": "string", "describe": "页号默认从0开始"}
  ],
  "autoFillResponse": true
}

请求参数详解

  • status: 状态码,用于过滤订单状态。
  • start_timeend_time: 用于增量获取数据的时间范围。
  • src_order_no, src_tid, stockout_no: 用于按特定条件查询订单。
  • is_by_modified: 定义是否按最后修改时间查询。
  • shop_noswarehouse_no: 用于指定店铺和仓库。
  • page_sizepage_no: 用于分页控制。

数据请求与清洗

  1. 构建请求报文

    根据元数据配置,我们需要构建一个包含必要参数的请求报文。例如:

    {
     "status": "",
     "start_time": "{{LAST_SYNC_TIME|datetime}}",
     "end_time": "{{CURRENT_TIME|datetime}}",
     ...
     // 其他必要参数
    }
  2. 发送请求

    使用POST方法将请求报文发送到wdt.stockout.order.query.trade接口,并接收响应。

  3. 初步清洗

    对返回的数据进行初步清洗,包括但不限于:

    • 去除无效或重复的数据。
    • 转换字段格式,例如日期格式转换。
    • 根据业务需求筛选特定字段。

数据转换与写入

在完成初步清洗后,需要将数据转换为目标系统所需的格式,并写入目标系统。在本案例中,我们将处理后的销售出库单数据写入U8发货单模块。

  1. 字段映射

    将源系统中的字段映射到目标系统中。例如:

    {
     // 源系统字段 : 目标系统字段
     "src_trade_no" : "<U8对应字段>",
     ...
    }
  2. 转换逻辑

    根据业务规则,对某些字段进行转换。例如,将订单状态码转换为目标系统中的对应状态描述。

  3. 写入操作

    使用轻易云平台提供的数据写入功能,将转换后的数据批量写入U8发货单模块。

通过上述步骤,我们实现了从旺店通·企业奇门接口获取销售出库单数据,并对其进行清洗、转换和写入U8发货单模块的完整流程。这一过程不仅提高了数据处理效率,还确保了不同系统间的数据一致性和准确性。 如何对接用友BIP接口

用友U8API接口数据集成技术案例

在轻易云数据集成平台上,我们可以将源平台的数据进行ETL转换,转为目标平台用友U8API接口所能够接收的格式,并最终写入目标平台。以下是一个详细的技术案例,展示如何配置和实现这一过程。

数据请求与清洗

首先,我们需要从源平台(例如OMS系统)获取销售出库单的数据。这些数据通常包括订单号、发货日期、客户信息、商品明细等。在轻易云数据集成平台上,可以通过定义API请求来获取这些数据。假设我们已经完成了这一阶段,接下来重点介绍数据转换与写入。

数据转换与写入

在这个阶段,我们需要将已经获取的源数据按照用友U8API接口的要求进行转换,并通过POST方法将其写入目标平台。以下是具体的配置和实现步骤:

  1. 定义API接口元数据

    根据提供的元数据配置,我们需要构建一个符合用友U8API接口要求的数据结构。以下是元数据配置的关键部分:

    {
       "api": "/apilink/u8api",
       "effect": "EXECUTE",
       "method": "POST",
       "idCheck": true,
       "request": [
           {
               "field": "data",
               "label": "data参数",
               "type": "object",
               "describe": "data参数",
               "children": [
                   {
                       "field": "单据信息",
                       "label": "单据信息",
                       ...
                   },
                   {
                       ...
                   }
               ]
           }
       ],
       ...
    }
  2. 构建请求体

    根据元数据配置,我们需要构建一个包含单据信息、单据头和单据体的JSON对象。例如:

    {
       "data": {
           "单据信息": {
               "单据模版": "单据模版",
               "红蓝标记": "蓝"
           },
           ...
           "单据头": {
               ...
               "发货单号": "{order_no}",
               ...
               "客户简称": "{shop_name}",
               ...
           },
           ...
           "单据体": [
               {
                   ...
                   "行": {
                       ...
                       "仓库名称": "{warehouse_no}",
                       ...
                       "存货编码": "{{details_list.goods_no}}",
                       ...
                   }
               }
           ]
       }
    }
  3. 字段映射和处理

    在构建请求体时,需要特别注意字段映射和处理。例如:

    • 发货日期:需要将consign_time字段转换为日期格式。
    • 客户简称:映射到shop_name字段。
    • 含税单价:通过计算得到,即 _function {{details_list.share_amount}}/{{details_list.goods_count}}
  4. 发送请求

    构建好请求体后,通过POST方法将其发送到用友U8API接口。示例代码如下:

    import requests
    import json
    
    url = "/apilink/u8api"
    headers = {"Content-Type": "application/json"}
    
    payload = {
       # 构建好的请求体
       # 省略具体内容,参考上文示例
    }
    
    response = requests.post(url, headers=headers, data=json.dumps(payload))
    
    if response.status_code == 200:
       print("Data successfully written to U8 platform.")
    else:
       print(f"Failed to write data: {response.text}")
  5. 审核操作

    如果需要审核操作,可以根据元数据中的审核接口配置,发送审核请求。例如:

    {
        ...,
        otherRequest: [
            {"field":"audit","label":"审核接口","type":"string","value":"consignment/audit"}
        ]
    }

    发送审核请求的示例代码如下:

    audit_url = "/apilink/u8api/consignment/audit"
    
    audit_response = requests.post(audit_url, headers=headers, data=json.dumps(payload))
    
    if audit_response.status_code == 200:
        print("Data successfully audited.")
    else:
        print(f"Failed to audit data: {audit_response.text}")

通过上述步骤,我们可以实现从源平台到用友U8平台的数据ETL转换和写入过程。在实际应用中,还需根据具体业务需求对字段映射、数据处理逻辑进行调整,以确保数据准确无误地传输到目标系统。 金蝶云星空API接口配置

更多系统对接方案