用友BIPAPI接口数据集成与转换实战

  • 轻易云集成顾问-曹润

系统对接集成案例分享:旺店通·企业奇门数据集成到用友BIP

在电子商务快速发展的背景下,如何高效、准确地处理退换货订单成为了各个企业关注的焦点。具体而言,将旺店通·企业奇门所生成的销售退货数据无缝集成到用友BIP系统中,是一个典型且复杂的技术挑战。本文聚焦于实际运行的方案“退换货生成销售退货(线下)-p”,详细探讨相关技术细节与实现方法。

首先,确保在从旺店通获取数据时不漏单至关重要。因此,我们通过定时抓取机制调用企业奇门接口wdt.refund.query,实时监控并记录每一次查询操作。同时,为保证大量数据能快速、高效地写入到用友BIP,我们采用批量提交策略,并灵活运用了分页和限流机制,有效避免了网络拥堵和服务器压力过大等问题。

为了应对不同系统间的数据格式差异,我们设计并实现了一套自适应的数据映射模型,使得从旺店通获取的原始退款信息能够自动转换为符合用友BIP API /yonbip/sd/vouchersalereturn/singleSave要求的数据格式。在此过程中,不可忽视的是异常处理与错误重试机制,它们保障了整个流程的可靠性,即便遇到意外情况也能迅速恢复正常。

总之,通过精巧设计和严格验证,这一解决方案不仅提高了业务效率,还大幅减少了手动干预,从而提升整体运营水平。接下来将深入探讨具体步骤及代码实现细节,希望能为类似需求提供参考路径。 打通金蝶云星空数据接口

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

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

接口调用配置

首先,我们需要配置接口调用的元数据。根据提供的元数据配置,wdt.refund.query接口使用POST方法,主要参数如下:

  • process_status: 退换单处理状态
  • time_type: 时间类型(0为最后更新时间,1为结算时间)
  • start_time: 开始时间
  • end_time: 结束时间
  • page_size: 分页大小(默认40)
  • shop_no: 店铺编号
  • page_no: 页号(默认从0页开始)
  • 其他可选参数包括:refund_no, src_refund_no, trade_no, tid

数据请求与清洗

在调用接口时,我们需要设置请求条件,以确保获取的数据符合业务需求。以下是具体的请求条件配置:

{
    "process_status": {"logic": "egt", "value": "70", "strictMode": true},
    "type": {"logic": "eq", "value": 2},
    "shop_no": {"logic": "eq", "value": "SJ002"}
}

上述条件表示我们希望获取处理状态大于等于70且类型为2,并且店铺编号为SJ002的退换货记录。类似的条件可以根据不同的店铺编号和类型进行组合。

数据转换与写入

在获取到原始数据后,需要对数据进行清洗和转换,以便后续处理和写入目标系统。以下是一个简单的数据清洗示例:

def clean_data(raw_data):
    cleaned_data = []
    for record in raw_data:
        cleaned_record = {
            "refund_id": record.get("refund_id"),
            "refund_no": record.get("refund_no"),
            "process_status": record.get("process_status"),
            "shop_no": record.get("shop_no"),
            # 添加其他需要的字段
        }
        cleaned_data.append(cleaned_record)
    return cleaned_data

在这个函数中,我们提取了原始记录中的refund_id, refund_no, process_status, 和shop_no字段,并将其存储到新的列表中。

分页处理

由于接口返回的数据可能会非常庞大,因此分页处理是必要的。在元数据配置中,分页大小已经设置为40。我们可以通过循环调用接口来处理分页数据:

def fetch_all_data():
    page_no = 0
    all_data = []
    while True:
        response = call_api(page_no=page_no, page_size=40)
        data = response.get("data")
        if not data:
            break
        all_data.extend(data)
        page_no += 1
    return all_data

在这个函数中,我们通过循环不断增加页号来获取所有分页数据,直到没有更多数据返回为止。

实际应用案例

假设我们需要获取某一时间段内所有符合条件的退换货记录,并将其写入到目标数据库中,可以按照以下步骤进行:

  1. 设置时间范围:确定开始时间和结束时间。
  2. 调用接口:使用上述分页处理函数获取所有符合条件的数据。
  3. 数据清洗:对原始数据进行清洗和转换。
  4. 写入数据库:将清洗后的数据写入目标数据库。
start_time = "2023-01-01 00:00:00"
end_time = "2023-01-31 23:59:59"

raw_data = fetch_all_data(start_time=start_time, end_time=end_time)
cleaned_data = clean_data(raw_data)

# 假设有一个函数write_to_db用于写入数据库
write_to_db(cleaned_data)

通过以上步骤,我们可以高效地从旺店通·企业奇门接口获取所需的退换货记录,并进行相应的数据处理和存储。这不仅提高了数据集成的效率,也确保了数据的一致性和准确性。 打通用友BIP数据接口

用友BIPAPI接口数据集成技术案例:退换货生成销售退货

在轻易云数据集成平台的生命周期中,数据转换与写入是关键步骤之一。本文将详细探讨如何将已经集成的源平台数据进行ETL转换,并转为用友BIPAPI接口所能够接收的格式,最终写入目标平台。

数据转换与写入配置

  1. API接口配置

    目标平台用友BIP的API接口配置如下:

    {
       "api": "/yonbip/sd/vouchersalereturn/singleSave",
       "method": "POST",
       "idCheck": true,
       "BIPAudit": "/yonbip/sd/vouchersalereturn/approve"
    }
  2. 请求头配置

    请求头部分主要包含单据编码、销售组织、交易类型等信息。以下是具体字段及其值的配置:

    [
       {"field":"resubmitCheckKey","label":"保证请求的幂等性","type":"string","value":"{refund_no}"},
       {"field":"code","label":"单据编码","type":"string","value":"{refund_no}"},
       {"field":"salesOrgId","label":"销售组织","type":"string","value":"_findCollection find mapping_sale_org from 4769a428-14c4-33b8-91fd-e8da3b39d5cb where shop_no={shop_no}"},
       {"field":"transactionTypeId","label":"交易类型","type":"string","value":"1480261131563434158"},
       {"field":"agentId","label":"客户","type":"string","value":"_findCollection find mapping_customer from 4769a428-14c4-33b8-91fd-e8da3b39d5cb where shop_no={shop_no}"}
       // 其他字段略...
    ]
  3. 请求体配置

    请求体部分包括表头和表体信息,表头信息主要包括退货单的基本信息,如退货金额、仓库编号等;表体信息则包括每个退货商品的详细信息。以下是具体字段及其值的配置:

    {
       "header": ["refund_no", "shop_no", "remark", "modified", "actual_refund_amount", "warehouse_no", "tid"],
       "body": [
           {"field": "refund_order_list_spec_no", "value": "{{refund_order_list.refund_order_list_spec_no}}"},
           {"field": "refund_order_list_refund_num", "value": "{{refund_order_list.refund_order_list_refund_num}}"},
           {"field": "refund_order_list_refund_order_amount", "value": "{{refund_order_list.refund_order_list_refund_order_amount}}"},
           // 其他字段略...
       ]
    }
  4. 数据转换逻辑

    在数据转换过程中,需要进行一些计算和格式化处理。例如,含税成交价、无税单价、含税金额等字段需要根据原始数据进行计算:

    {
       "oriTaxUnitPrice": "_function round((round({{refund_order_list.refund_order_list_refund_order_amount}},2)/{{refund_order_list.refund_order_list_refund_num}}),2)",
       "oriUnitPrice": "_function round((round({{refund_order_list.refund_order_list_refund_order_amount}},2)/{{refund_order_list.refund_order_list_refund_num}})/1.13,2)",
       // 其他计算字段略...
    }
  5. 幂等性保证

    为了确保请求的幂等性,需要设置resubmitCheckKey,该值由客户端生成,并且必须是全局唯一的,长度不能超过32位:

    {
       "resubmitCheckKey": "{refund_no}"
    }
  6. 提交与审核

    最后,将转换后的数据通过POST方法提交到用友BIPAPI接口,并调用审核接口进行审核:

    {
        "method": "POST",
        "url": "/yonbip/sd/vouchersalereturn/singleSave",
        // 提交的数据内容略...
    }
    
    {
        "method": "POST",
        "url": "/yonbip/sd/vouchersalereturn/approve",
        // 审核的数据内容略...
    }

通过以上步骤,我们实现了从源平台到用友BIP目标平台的数据ETL转换与写入。每个环节都需要严格按照元数据配置进行,以确保数据准确无误地传输和处理。 电商OMS与WMS系统接口开发配置

更多系统对接方案