从轻易云数据集成到用友BIPAPI的技术实现详解

  • 轻易云集成顾问-蔡威
### 案例分享:旺店通·企业奇门数据集成到用友BIP 在本案例中,我们聚焦于如何通过轻易云数据集成平台,实现旺店通·企业奇门系统的数据无缝对接到用友BIP,具体方案命名为“销售出库单对接销售订单(线上)-v”。该方案的实施不仅提高了业务处理效率,还确保了数据的准确性和实时监控。 首先,考虑到如何确保集成过程中不漏单,是我们设计解决方案时的首要任务。通过调用`wdt.stockout.order.query.trade`接口,从旺店通系统定时、可靠地抓取出库单数据。为了快速写入大量数据,我们使用批量操作,将获取的数据迅速传输至用友BIP的API `/yonbip/sd/voucherorder/singleSave`。 此外,在实际操作中,必须应对分页和限流问题,以保证接口调用持续稳定。当涉及大批量数据时,每次调用接口都需要处理返回结果中的分页信息,同时还需设定合理的限流策略以避免因频繁访问而导致服务阻塞或拒绝。 其次,在两系统之间进行数据格式转换是另一个技术性挑战。从旺店通获取的数据往往与用友BIP所要求的数据结构不同,因此需要进行自定义映射。这一过程包括字段匹配、类型转换等多个步骤,以确保最终提交给用友BIP的数据能够被其正确识别和处理。 最后,为保障整个流程高效运行及问题排查,实时监控和日志记录非常关键。在每个步骤执行期间,通过轻易云提供的平台工具,可以生成详细日志并设置告警机制,一旦出现异常情况立即触发错误重试机制,从而最大程度减少故障影响,提高整体流程稳健性。 这样的配置与实现,不仅提升了业务自动化水平,还显著加快了订单处理速度,使得企业可以更加专注于核心业务的发展,而无需担心后台复杂的数据集成问题。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/D6.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口wdt.stockout.order.query.trade获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockout.order.query.trade`,获取销售出库单数据并进行初步加工。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。以下是关键配置项: - **API**: `wdt.stockout.order.query.trade` - **请求方法**: `POST` - **分页大小**: 每页返回的数据条数,范围为1~100,默认值为40。 - **页号**: 从0页开始。 #### 请求参数设置 为了实现增量数据获取,我们需要设置请求参数中的时间区间: ```json { "start_time": "{{LAST_SYNC_TIME|datetime}}", "end_time": "{{CURRENT_TIME|datetime}}" } ``` 其中,`start_time`和`end_time`分别表示上次同步时间和当前时间,用于限定查询的数据范围。 此外,还可以根据业务需求添加其他过滤条件,例如订单状态、系统订单编号、原始单号、出库单号、店铺编号和仓库编号等。 #### 数据清洗与转换 在获取到原始数据后,需要对其进行清洗和转换。以下是一些常见的处理步骤: 1. **字段重命名**:将原始字段名`consign_time`重命名为`consign_time_new`,并将其格式化为日期类型。 ```json { "old": "consign_time", "new": "consign_time_new", "format": "date" } ``` 2. **平铺嵌套结构**:对于嵌套的列表字段,例如`details_list`,可以通过平铺操作将其展开,以便后续处理。 3. **条件过滤**:根据业务规则过滤不需要的数据。例如,可以通过以下条件排除特定店铺编号的数据: ```json [ {"field":"shop_no","logic":"neq","value":"063"}, {"field":"shop_no","logic":"neq","value":"064"}, ... ] ``` #### 异常处理与补偿机制 在实际操作中,不可避免会遇到各种异常情况。为了确保数据完整性和一致性,可以设置定时任务(如每天凌晨)进行异常补偿: ```json { "crontab": "0 0 * * *", "takeOverRequest": [ { "id": "4623d86a-46bc-303d-8f30-30945add6e62", "field": "start_time", "label": "开始时间", "type": "datetime", "is_required": true, "describe": "增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{DAYS_AGO_1|datetime}}" }, { "id": "189afb22-1012-3a81-9c16-e5ac86c0382b", "field": "end_time", "label": "结束时间", "type": "datetime", "is_required": true, "describe": "增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss", "value": "{{CURRENT_TIME|datetime}}" } ] } ``` 通过上述配置,可以在指定时间段内重新拉取数据,以补偿前一天可能遗漏的数据。 #### 数据写入与验证 最后,将清洗和转换后的数据写入目标系统。在写入之前,可以启用ID检查机制,以确保每条记录的唯一性: ```json { "idCheck": true } ``` 这样可以避免重复写入相同的数据,提高数据质量。 综上所述,通过合理配置元数据和请求参数,并结合有效的清洗、转换和异常处理机制,可以高效地从旺店通·企业奇门接口获取并加工销售出库单数据,为后续的数据集成奠定坚实基础。 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/S14.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将销售出库单转换为用友BIPAPI接口格式并写入目标平台 在轻易云数据集成平台中,数据处理的第二步是将已集成的源平台数据进行ETL转换,使其符合目标平台(如用友BIPAPI接口)的格式,并最终写入目标平台。以下是详细的技术实现过程。 #### 1. 数据请求与清洗 首先,我们需要确保从源系统获取到的数据是干净且结构化的。这一步通常包括数据验证、去重和标准化等操作。在本文中,我们假设这些操作已经完成,直接进入数据转换和写入阶段。 #### 2. 数据转换与写入 为了将销售出库单的数据转化为用友BIPAPI接口所能接收的格式,我们需要根据提供的元数据配置进行字段映射和转换。以下是具体步骤: ##### 2.1 配置API请求参数 根据元数据配置,我们需要定义API请求的各个字段及其对应值。以下是一些关键字段及其配置示例: ```json { "api": "/yonbip/sd/voucherorder/singleSave", "method": "POST", "BIPAudit": "/yonbip/sd/voucherorder/batchaudit", "idCheck": true, "groupCalculate": { "headerGroup": ["consign_time_new", "shop_no", "warehouse_no"], "bodyGroup": ["details_list_spec_no", "details_list_unit_name", "details_list_tax_rate"], "bodyName": "details", "calculate": { "details_list_share_amount": "$sum", "details_list_goods_count": "$sum", "receivable": "$sum", "details_list_paid": "$sum", "details_list_total_amount": "$sum" } }, ... } ``` ##### 2.2 映射字段 我们需要将源系统中的字段映射到目标系统中对应的字段。例如: - `salesOrgId` 映射到销售组织: ```json { "field": "salesOrgId", "label": "销售组织", "type": "string", "value": "_findCollection find mapping_sale_org from 4769a428-14c4-33b8-91fd-e8da3b39d5cb where shop_no={shop_no}" } ``` - `transactionTypeId` 映射到交易类型: ```json { "field": "transactionTypeId", "label": "交易类型", "type": "string", "value": "SO021" } ``` ##### 2.3 子表处理 对于复杂的数据结构,如包含子表(例如销售订单子表),我们需要递归地进行字段映射。例如: ```json { ... { "field":"orderDetails", ... [ { ... { field: 'stockId', label: '仓库', type: 'string', value: '_findCollection find ysOutWarehouse from fa193860-6aa8-37a8-b996-a856e9a8a96f where omsOutWarehouse={warehouse_no} shopNo={shop_no} mappingType=2' }, ... { field: 'productId', label: '商品', type: 'string', value: '{{details.details_list_spec_no}}' }, ... } ] } } ``` ##### 2.4 数据计算与聚合 根据元数据配置中的`groupCalculate`部分,我们需要对某些字段进行聚合计算。例如,计算总金额、总数量等: ```json { ... { field: 'payMoney', label: '合计含税金额', type: 'string', value: '{{details.details_list_paid}}' }, ... } ``` ##### 2.5 构建最终请求体 将所有映射和计算后的字段组合成最终的请求体,并发送到用友BIPAPI接口: ```json { api: '/yonbip/sd/voucherorder/singleSave', method: 'POST', body: { salesOrgId: ..., transactionTypeId: ..., orderDetails: [...], payMoney: ..., ... } } ``` 通过上述步骤,我们可以成功地将源平台的数据转换为用友BIPAPI接口所能接收的格式,并写入目标平台。这一过程不仅确保了数据的一致性和完整性,还大大提高了数据处理的效率和准确性。 ![如何对接用友BIP接口](https://pic.qeasy.cloud/T2.png~tplv-syqr462i7n-qeasy.image)