从销售订单抓取到最终写入:吉客云·奇门与用友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系统接口开发配置](https://pic.qeasy.cloud/D38.png~tplv-syqr462i7n-qeasy.image) ### 调用吉客云·奇门接口jackyun.tradenotsensitiveinfos.list.get获取并加工数据 在数据集成的生命周期中,第一步是从源系统获取数据。本文将详细探讨如何通过轻易云数据集成平台调用吉客云·奇门接口`jackyun.tradenotsensitiveinfos.list.get`来获取销售订单数据,并进行初步加工。 #### 接口配置与请求参数 为了实现对吉客云·奇门接口的调用,我们需要配置元数据,包括API名称、请求方法、分页信息以及具体的请求字段。以下是相关配置: ```json { "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_begin`和`modified_end`来限定查询的时间范围,并确保这两个字段同时存在且间隔不超过七天。 ```json { "modified_begin": "2023-10-01T00:00:00Z", "modified_end": "2023-10-07T23:59:59Z", // ...其他参数 } ``` 通过这种方式,我们可以获取指定时间段内的销售订单数据。在接收到响应后,需要对数据进行初步清洗。例如,将日期格式统一转换为标准格式: ```json { // 原始响应数据 { ... "consignTime": "2023-10-05T14:30:00Z", ... } } // 转换后的数据 { ... "consigndate": "2023-10-05", ... } ``` #### 数据转换与写入 在完成初步清洗后,我们可以进一步对数据进行转换,以便后续处理和写入目标系统。例如,可以根据业务逻辑对某些字段进行计算或合并。 ```json { // 原始数据 { ... "goodsDetail.sellCount": 10, ... } // 转换后的数据 { ... "totalSellCount": goodsDetail.reduce((acc, item) => acc + item.sellCount, 0), ... } ``` #### 异常处理与补偿机制 在实际的数据集成过程中,不可避免地会遇到各种异常情况。轻易云平台提供了自动补偿机制,通过定时任务(crontab)来确保遗漏的数据能够被及时补充。 ```json { // 补偿机制配置 { ... omissionRemedy: { crontab: '20 */2 * * *', takeOverRequest: [ { field: 'startConsignTime', value: '{{HOURE_AGO_5|datetime}}', type: 'string' }, { field: 'endConsignTime', value: '{{HOURE_AGO_2|datetime}}', type: 'string' } ] } } } ``` 通过上述配置,可以每两小时检查一次过去五小时到两小时之间的数据是否有遗漏,并进行补偿性的数据拉取。 #### 条件过滤与响应格式化 为了确保最终写入的数据符合业务需求,可以在元数据中设置条件过滤和响应格式化规则。例如,仅保留订单状态大于等于6000且店铺代码不在特定列表中的记录: ```json { 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接口](https://pic.qeasy.cloud/S9.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台:将源数据转换并写入用友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. **计算字段** 对于需要计算的字段,例如本币无税金额、本币含税单价等,可以使用函数进行计算。例如: ```json { "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请求体。例如: ```json { "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接口](https://pic.qeasy.cloud/T4.png~tplv-syqr462i7n-qeasy.image)