用友BIP与旺店通数据对接实战:API调用与数据清洗

  • 轻易云集成顾问-黄宏棵
### 销售出库单对接销售订单——旺店通·企业奇门数据集成到用友BIP 在企业的日常运营中,销售出库单与销售订单的数据准确对接至关重要。本篇案例揭示了如何利用轻易云数据集成平台,实现旺店通·企业奇门与用友BIP两大系统之间的无缝数据交互。项目作为《销售出库单对接销售订单(线下)-v》,其核心在于确保高效、稳定和可监控的数据流动。 首先,我们需要解决的是从旺店通·企业奇门获取数据的问题。通过调用`wdt.stockout.order.query.trade`接口,我们能够实时抓取相关的销售出库单信息。这一步骤不仅要求我们处理接口分页和限流问题,还要确保每次请求都能可靠地捕捉到最新的数据,从而避免漏单现象。 得到这些数据后,下一步是将其批量写入到用友BIP系统。这过程中,我们需要使用`/yonbip/sd/voucherorder/singleSave`接口来进行操作。为了适应不同业务需求和数据结构,在这个环节,我们会自定义数据转换逻辑,将原始数据格式转化为符合用友BIP标准的数据格式。此外,考虑到大量数据快速写入可能产生的性能压力,通过支持高吞吐量的数据写入能力,有效提升了整体处理时效性。 此外,为了保证整个过程顺利进行,集中监控体系不可或缺。实时跟踪集成任务状态、检测异常并提供告警,使得运维人员可以迅速采取措施修复问题。同时,通过可视化工具设计和管理我们的集成流程,使一切变得更加直观明了。 这仅是本文技术分享的一部分。在随后的段落中,将深入探讨具体实施步骤及碰撞出的亮点经验,包括如何应对API资产管理、错误重试机制等实际挑战,以期为类似场景提供参考和借鉴。 ![数据集成平台API接口配置](https://pic.qeasy.cloud/D33.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口获取并加工数据 在数据集成生命周期的第一步中,调用源系统的API接口获取数据是至关重要的一环。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockout.order.query.trade`来获取销售出库单数据,并对其进行初步加工。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。根据提供的元数据配置,以下是关键参数和配置项: - **API名称**: `wdt.stockout.order.query.trade` - **请求方法**: `POST` - **分页大小**: 每页返回100条记录 - **ID字段**: `stockout_id` - **请求条件**: 主要基于`shop_no`字段进行过滤 #### 请求参数 为了实现增量获取,我们需要设置开始时间和结束时间,这两个参数可以动态生成: ```json { "start_time": "{{LAST_SYNC_TIME|datetime}}", "end_time": "{{CURRENT_TIME|datetime}}" } ``` 此外,还可以根据业务需求添加其他过滤条件,如订单状态、系统订单编号、原始单号等。以下是一个完整的请求示例: ```json { "start_time": "2023-01-01 00:00:00", "end_time": "2023-01-31 23:59:59", "status": "95", "shop_no": "063", "page_size": 100, "page_no": 0 } ``` #### 数据清洗与格式化 在获取到原始数据后,需要对部分字段进行格式化处理。例如,将`consign_time`字段重新命名为`consign_time_new`并转换为日期格式: ```json { "formatResponse": [ { "old": "consign_time", "new": "consign_time_new", "format": "date" } ] } ``` 这种格式化处理可以通过轻易云平台内置的转换功能轻松实现,确保数据在进入下一个处理阶段前已经过初步清洗和标准化。 #### 分页处理 由于接口返回的数据量可能较大,需要进行分页处理。每次请求时,通过调整`page_no`参数来获取不同页的数据: ```json { "page_size": "{PAGINATION_PAGE_SIZE}", "page_no": "{PAGINATION_START_PAGE}" } ``` 在实际操作中,可以使用循环或递归方式逐页请求,直到所有数据都被成功获取。 #### ID检查 为了确保数据的一致性和完整性,可以启用ID检查功能,即在每次请求时检查返回的数据是否包含唯一标识符`stockout_id`,避免重复或遗漏: ```json { "idCheck": true } ``` #### 请求条件 根据业务需求,可以设置多个店铺编号作为过滤条件。以下是一个示例配置: ```json { "condition": [ {"field":"shop_no","logic":"like","value":"063"}, {"field":"shop_no","logic":"like","value":"064"}, // 更多店铺编号... ] } ``` 这种灵活的条件设置可以确保我们只获取特定店铺的数据,提高了数据处理的效率和准确性。 ### 实践案例 假设我们需要从2023年1月1日至2023年1月31日期间,获取状态为已发货(95)的销售出库单,并且只关注店铺编号为063的数据。以下是具体的请求配置: ```json { "api": "wdt.stockout.order.query.trade", "method": "POST", "request": [ {"field":"start_time","value":"2023-01-01 00:00:00"}, {"field":"end_time","value":"2023-01-31 23:59:59"}, {"field":"status","value":"95"}, {"field":"shop_no","value":"063"}, {"field":"page_size","value":"100"}, {"field":"page_no","value":"0"} ], "formatResponse":[{"old":"consign_time","new":"consign_time_new","format":"date"}], "idCheck": true, } ``` 通过上述配置,我们可以高效地从旺店通·企业奇门接口中获取所需的数据,并对其进行初步清洗和格式化,为后续的数据转换与写入做好准备。这种灵活且高效的集成方式极大提升了业务流程的自动化程度和透明度。 ![泛微OA与ERP系统接口开发配置](https://pic.qeasy.cloud/S27.png~tplv-syqr462i7n-qeasy.image) ### 将销售出库单数据转换并写入用友BIP平台 在数据集成过程中,将源平台的销售出库单数据转换为目标平台用友BIPAPI接口所能接收的格式,并最终写入目标平台,是一个至关重要的步骤。本文将详细介绍如何通过轻易云数据集成平台实现这一过程。 #### 1. API接口配置 首先,我们需要配置API接口,以便将转换后的数据发送到用友BIP平台。根据提供的元数据配置,API接口如下: ```json { "api": "/yonbip/sd/voucherorder/singleSave", "method": "POST", "BIPAudit": "/yonbip/sd/voucherorder/batchaudit", "idCheck": true, "request": [ { "field": "resubmitCheckKey", "label": "保证请求的幂等性", "type": "string", "describe": "保证请求的幂等性,该值由客户端生成,并且必须是全局唯一的,长度不能超过32位。", "value": "{src_order_no}-8" }, { "field": "salesOrgId", "label": "销售组织", "type": "string", "describe": "销售组织,传id或者code。", "value": "_findCollection find mapping_sale_org from 4769a428-14c4-33b8-91fd-e8da3b39d5cb where shop_no={shop_no}" }, { // 其他字段省略 } ] } ``` #### 2. 数据转换 在数据转换阶段,我们需要将源平台的数据按照目标平台要求进行ETL(Extract, Transform, Load)处理。以下是几个关键字段的处理示例: - **resubmitCheckKey**:用于保证请求的幂等性,确保每个请求唯一。 ```json { "field": "resubmitCheckKey", "value": "{src_order_no}-8" } ``` - **salesOrgId**:根据`shop_no`映射到对应的销售组织ID或代码。 ```json { "field": "salesOrgId", "value": "_findCollection find mapping_sale_org from ... where shop_no={shop_no}" } ``` - **transactionTypeId**:直接指定交易类型ID或代码。 ```json { "field": "transactionTypeId", "value": "SO021" } ``` - **vouchdate**:单据日期需要按照`yyyy-MM-dd HH:mm:ss`格式进行转换。 ```json { "field": "vouchdate", "value": "{consign_time_new}" } ``` #### 3. 子表数据处理 子表数据(orderDetails)需要特别处理,因为它包含了多个商品明细。每个商品明细都需要按照目标平台的要求进行字段映射和转换。例如: - **stockId**:仓库ID或代码,通过`warehouse_no`和`shop_no`进行映射。 ```json { "field": "stockId", // 映射逻辑省略 ... ,"parent":"orderDetails" } ``` - **productId**:商品ID或代码,直接从源数据中提取。 ```json { ... ,"field":"productId","value":"{{details_list.spec_no}}","parent":"orderDetails" } ``` - **taxId**:税目税率,通过`tax_rate`进行映射。 ```json { ... ,"field":"taxId","value":"{{details_list.tax_rate}}","parent":"orderDetails" } ``` #### 4. 数据写入 完成所有字段的数据转换后,即可通过配置好的API接口将数据发送到用友BIP平台。这里我们使用POST方法,将转换后的JSON对象发送到指定URL: ```json { // 完整请求体省略... } ``` 通过轻易云数据集成平台,我们可以方便地实现从源系统到目标系统的数据无缝对接,并确保每个环节都透明可视、易于监控。这不仅提高了业务效率,还大大减少了人工干预和错误率。 ![数据集成平台可视化配置API接口](https://pic.qeasy.cloud/T15.png~tplv-syqr462i7n-qeasy.image)