从销售订单抓取到最终写入:吉客云·奇门与用友BIP对接详解

  • 轻易云集成顾问-曹润

吉客云·奇门数据集成到用友BIP的技术案例分享

本篇文章将详细剖析一个实际运行的系统对接集成方案:2C线上-吉客云-销售单-YS-销售订单-合并-非京东。本次集成任务的主要目标是实现吉客云·奇门数据无缝对接到用友BIP,并确保整个数据处理过程高效、可靠和精准。

1. 接口调用与数据获取

首先,利用吉客云·奇门提供的数据接口 jackyun.tradenotsensitiveinfos.list.get 来获取所需的销售订单信息。为了保证及时、高效地抓取这些接口数据,我们需要设置定时任务,周期性地请求接口。考虑到吉客云·奇门API可能存在分页和限流问题,我们在设计过程中需要格外注意这两点,以确保不会遗漏任何一笔订单。这一步骤中的核心技术要点包括:

  1. 分页处理:通过分析返回结果中的分页参数,循环处理每一页的数据直到所有订单都被完整抓取。
  2. 限流控制:应用速率限制机制,如设置合理的请求间隔时间,以避免触发API访问频率限制或被封禁。

2. 数据转换与格式适配

由于吉客云·奇门和用友BIP之间的数据格式有所不同,在将数据写入用友BIP之前,需要进行必要的数据转换。这部分工作可以通过自定义数据转换逻辑来实现,并且对于复杂的数据结构变化,可以借助轻易云平台提供的可视化数据流设计工具进行直观配置,实现灵活而精准的数据映射。

在这个环节中, 我们关注以下几项关键技术细节:

  1. 字段匹配与映射:将从吉客云·奇门获取到的数据字段逐一对应至用友BIP要求的字段上。
  2. 自定义转化逻辑:针对特定业务需求编写适应性的脚本或逻辑规则,确保各类特殊情况也能正确处理,如日期格式转换、数值单位变换等。

3. 数据批量写入与监控优化

最后,将经过加工整理后的订单信息通过 yonbip/sd/voucherorder/singleSave API 写入到用友BIP系统。在这一过程中,为了提高大规模数据操作效率,我们采用批量写入策略,同时使用集中监控和告警系统实时跟踪任务状态及性能表现。如果遇到异常情况,则会启动错误重试机制以保障最终一致性。这些步骤包含:

  1. 批量写入优化:整合多条记录为一个大包裹传输以减少网络开 钉钉与MES系统接口开发配置

    调用吉客云·奇门接口jackyun.tradenotsensitiveinfos.list.get获取并加工数据

在数据集成的生命周期中,第一步是从源系统获取数据。本文将详细探讨如何通过轻易云数据集成平台调用吉客云·奇门接口jackyun.tradenotsensitiveinfos.list.get来获取销售订单数据,并进行初步加工。

接口配置与请求参数

为了实现对吉客云·奇门接口的调用,我们需要配置元数据,包括API名称、请求方法、分页信息以及具体的请求字段。以下是相关配置:

{
  "api": "jackyun.tradenotsensitiveinfos.list.get",
  "method": "POST",
  "number": "tradeNo",
  "id": "tradeId",
  "pagination": {
    "pageSize": 20
  },
  "idCheck": true,
  "request": [
    {"field":"modified_begin","label":"起始时间","type":"string","describe":"修改起始时间,和结束时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空"},
    {"field":"modified_end","label":"结束时间","type":"string","describe":"修改结束时间,和起始时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空"},
    {"field":"startModified","label":"最后修改时间(起始)","type":"string"},
    {"field":"endModified","label":"最后修改时间(截止)","type":"string"},
    {"field":"tradeNo","label":"销售单号,多个用半角逗号分隔","type":"string"},
    {"field":"pageSize","label":"每页记录数,默认50,最大1000","type":"string","value":"50"},
    {"field":"pageIndex","label":"页码,0为第1页","type":"string"},
    {"field":"hasTotal","label":"默认返回,首次调用时可以传1获取总记录数","type":"string","value":"1"},
    {"field":"startCreated","label":"创建时间(起始)","type":"string"},
    {"field":"endCreated","label":"创建时间(截止)","type":"string"},
    {"field":"startAuditTime","label":"审核时间(起始)","type":"string"},
    {"field":"endAuditTime","label":"审核时间(截止)","type":"string"},
    {"field":"startConsignTime","label":"发货时间(起始)","type":"string", "value": "{{LAST_SYNC_TIME|datetime}}"},
    {"field":"endConsignTime","label":"发货时间(截止)", "type": "string", "value": "{{CURRENT_TIME|datetime}}"},
    {"field": "tradeStatus", "label": "订单状态", "type": "string" },
    {"field": "tradeType", "label": "订单类型", "type": "string", "value": "1,7" },
    // ...其他字段省略
  ],
  // ...其他配置省略
}

数据请求与清洗

在实际操作中,我们需要根据业务需求设置具体的请求参数。例如,通过设置modified_beginmodified_end来限定查询的时间范围,并确保这两个字段同时存在且间隔不超过七天。

{
  "modified_begin": "2023-10-01T00:00:00Z",
  "modified_end": "2023-10-07T23:59:59Z",
  // ...其他参数
}

通过这种方式,我们可以获取指定时间段内的销售订单数据。在接收到响应后,需要对数据进行初步清洗。例如,将日期格式统一转换为标准格式:

{
  // 原始响应数据
  {
    ...
    "consignTime": "2023-10-05T14:30:00Z",
    ...
  }
}

// 转换后的数据
{
  ...
  "consigndate": "2023-10-05",
  ...
}

数据转换与写入

在完成初步清洗后,我们可以进一步对数据进行转换,以便后续处理和写入目标系统。例如,可以根据业务逻辑对某些字段进行计算或合并。

{
  // 原始数据
  {
    ...
    "goodsDetail.sellCount": 10,
    ...
  }

  // 转换后的数据
  {
    ...
    "totalSellCount": goodsDetail.reduce((acc, item) => acc + item.sellCount, 0),
    ...
}

异常处理与补偿机制

在实际的数据集成过程中,不可避免地会遇到各种异常情况。轻易云平台提供了自动补偿机制,通过定时任务(crontab)来确保遗漏的数据能够被及时补充。

{
   // 补偿机制配置
   {
     ...
     omissionRemedy: {
       crontab: '20 */2 * * *',
       takeOverRequest: [
         { field: 'startConsignTime', value: '{{HOURE_AGO_5|datetime}}', type: 'string' },
         { field: 'endConsignTime', value: '{{HOURE_AGO_2|datetime}}', type: 'string' }
       ]
     }
   }
}

通过上述配置,可以每两小时检查一次过去五小时到两小时之间的数据是否有遗漏,并进行补偿性的数据拉取。

条件过滤与响应格式化

为了确保最终写入的数据符合业务需求,可以在元数据中设置条件过滤和响应格式化规则。例如,仅保留订单状态大于等于6000且店铺代码不在特定列表中的记录:

{
   condition: [
     { field: 'tradeStatus', logic: 'egt', value: '6000' },
     { field: 'shopCode', logic: 'notin', value: 'NBKH,ZYDP,BJKH,TYKH,HWKH,HYKH,XSKH,XXKH,CTQD0001,BJKH0019' }
   ],
   formatResponse:[
     { old:'consignTime', new:'consigndate', format:'date' }
   ]
}

通过上述技术手段,可以高效地从吉客云·奇门接口获取并加工销售订单数据,为后续的数据处理和分析奠定坚实基础。 如何对接钉钉API接口

轻易云数据集成平台:将源数据转换并写入用友BIP

在数据集成的生命周期中,ETL(Extract, Transform, Load)转换是一个关键步骤。本文将详细探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,并最终通过用友BIP API接口写入目标平台。

数据请求与清洗

首先,从源系统获取销售订单数据,并进行必要的清洗和预处理。这一步骤确保数据的准确性和一致性,为后续的转换和写入打下基础。

数据转换与写入

接下来,我们进入数据转换阶段,将清洗后的数据转化为用友BIP API接口所能接受的格式,并通过API写入目标平台。以下是具体实现步骤:

  1. API配置

    根据元数据配置,目标API为/yonbip/sd/voucherorder/singleSave,请求方法为POST。我们需要确保请求的幂等性,通过字段resubmitCheckKey来保证每次请求都是唯一的。

  2. 头部信息映射

    • salesOrgId: 销售组织,映射到源数据中的shopCode
    • transactionTypeId: 交易类型,固定值为J01
    • bizFlow: 流程ID,固定值为35f60e0d-3ad8-459d-b3bb-52a997334a37
    • vouchdate: 单据日期,格式为yyyy-MM-dd HH:mm:ss,从源数据中的consigndate提取。
    • code: 单据编码,由系统规则生成,例如:XSDD{consigndate}{shopCode}-1
  3. 子表信息映射

    子表字段主要包括商品信息、仓库信息、数量、金额等。以下是一些关键字段及其映射关系:

    • stockId: 仓库ID,从源数据中的warehouseCode提取。
    • productId: 商品ID,从源数据中的goodsDetail_goodsNo提取。
    • qty: 数量,从源数据中的goodsDetail_sellCount提取。
    • oriSum: 含税金额,通过函数计算得到,例如: _function abs(round({{goodsDetail_shareFavourableAfterFee}},2))
  4. 计算字段

    对于需要计算的字段,例如本币无税金额、本币含税单价等,可以使用函数进行计算。例如:

    {
     "field": "orderDetailPrices!natUnitPrice",
     "label": "本币无税单价",
     "type": "string",
     "describe": "本币无税单价",
     "value": "_function case '{goodsDetail_goodsNo}' when 'X0001' then abs(round(({{goodsDetail_shareFavourableAfterFee}}/{goodsDetail_sellCount})/(1+0.06),2)) else abs(round(({{goodsDetail_shareFavourableAfterFee}}/{goodsDetail_sellCount})/(1+0.13),2)) end"
    }
  5. 请求体构建

    最终,将所有映射后的字段和计算结果组装成API请求体。例如:

    {
     "resubmitCheckKey": "{consigndate}{shopCode}3",
     "salesOrgId": "{shopCode}",
     "transactionTypeId": "J01",
     "bizFlow": "35f60e0d-3ad8-459d-b3bb-52a997334a37",
     ...
     "orderDetails": [
       {
         "stockId": "{warehouseCode}",
         "productId": "{goodsDetail_goodsNo}",
         ...
         "oriSum": "_function abs(round({{goodsDetail_shareFavourableAfterFee}},2))"
       }
     ]
    }
  6. 发送请求

    使用HTTP客户端(如Postman或编程语言内置库)发送POST请求,将构建好的JSON对象作为请求体传递给用友BIP API。

实时监控与日志记录

在整个过程中,通过轻易云平台提供的实时监控功能,可以随时查看数据流动和处理状态,确保每个环节都透明可控。同时,记录详细日志以便于问题排查和性能优化。

通过上述步骤,我们成功地将源平台的数据经过ETL转换后,通过用友BIP API接口写入目标平台,实现了不同系统间的数据无缝对接。 如何开发企业微信API接口

更多系统对接方案