轻易云实现采购入库单自动化数据转换与写入用友BIP

  • 轻易云集成顾问-姚缘
### 案例分享:旺店通·企业奇门数据集成到用友BIP 在本文中,我们将探讨如何通过轻易云数据集成平台,实现旺店通·企业奇门系统中的采购入库单(API: wdt.stockin.order.query.purchase)高效、可靠地写入到用友BIP系统(API: /yonbip/scm/purinrecord/mergeSourceData/save)。本次集成的具体方案是“采购入库单=>采购入库单(下推)-p”。 一个成功的数据集成案例不仅需要解决接口调用和数据格式转换的问题,更重要的是确保在高并发环境下的数据不漏单,以及处理分页和限流等实际运行过程中可能遇到的挑战。 为了实现这一目标,以下几个技术要点需要特别关注: 1. **定时可靠的抓取机制**: 为了确保从旺店通·企业奇门获取数据不漏单,需要设计一个定时任务,周期性地调用`wdt.stockin.order.query.purchase`接口。可以设定固定时间间隔,并记录上一次抓取的位置,以便于实现增量更新。 2. **大批量、高效写入**: 当从旺店通·企业奇门获取大量采购入库单后,这些数据必须迅速且无误地写入到用友BIP。使用批量处理技术,可以有效减少网络请求次数,提高整体效率。同时,通过合适的方法进行分页控制,保证每次请求的数据量适中,不超出接口限流限制。 3. **异常处理与错误重试机制**: 在对接过程中不可避免会遇到一些异常情况,如网络波动或临时服务器不可达。这就要求我们在设计流程时加入错误重试机制,对于失败的请求进行重新尝试,以确保最终所有数据都能正确传输并存储在用友BIP中。 4. **实时监控与日志记录**: 任何复杂系统都需要具备良好的监控能力。通过轻易云平台自带的透明可视化界面,可以实时监控整个集成过程,包括每个环节的数据状态。此外,还应配置详细的日志记录功能,一旦发生问题,可以快速定位并解决。 5. **格式差异处理及映射规则**: 旺店通·企业奇门与用友BIP之间存在一定的数据格式差异。在实施对接前,需要详细研究两者之间字段的对应关系,并定义好映射规则。例如,对日期格式、数值精度等特殊字段进行必要转换,将其调整为目标系统所需样式,以保证无缝融合。 上述几个关键步骤构成了此次“采购入库单=>采购入库单(下推)-p”方案实施的重要组成 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/D11.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台调用旺店通·企业奇门接口获取采购入库单数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将深入探讨如何使用轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockin.order.query.purchase`,并对获取的数据进行加工处理。 #### 接口概述 接口`wdt.stockin.order.query.purchase`用于查询采购入库单信息。通过该接口,我们可以获取到指定时间范围内的采购入库单数据。以下是该接口的主要参数配置: - **api**: `wdt.stockin.order.query.purchase` - **method**: `POST` - **number**: `order_no` - **id**: `order_no` - **pagination**: 支持分页,每页返回的数据条数由`page_size`参数控制,页号由`page_no`参数控制。 - **idCheck**: `true` #### 请求参数配置 请求参数主要包括时间范围、状态、仓库编号等信息。以下是具体的请求参数配置: 1. **开始时间(start_time)** - 类型:datetime - 描述:增量获取数据的开始时间,格式为`yyyy-MM-dd HH:mm:ss` - 示例值:`{{LAST_SYNC_TIME|datetime}}` 2. **结束时间(end_time)** - 类型:datetime - 描述:增量获取数据的结束时间,格式为`yyyy-MM-dd HH:mm:ss` - 示例值:`{{CURRENT_TIME|datetime}}` 3. **状态(status)** - 类型:string - 描述:入库单状态,支持多个状态值,用逗号分隔 - 示例值:`60,80` 4. **上层单据编号(src_order_no)** - 类型:string - 描述:上层单据编号,默认为采购单号,可以不传开始时间和结束时间 5. **仓库编号(warehouse_no)** - 类型:string - 描述:代表仓库所有属性的唯一编码,用于区分不同仓库的数据 6. **分页大小(page_size)** - 类型:string - 描述:每页返回的数据条数,默认值为40 - 示例值:`{PAGINATION_PAGE_SIZE}` 7. **页号(page_no)** - 类型:string - 描述:分页页号,不传值默认从0页开始 - 示例值:`{PAGINATION_START_PAGE}` #### 数据请求与清洗 在实际操作中,我们首先需要构建请求体,并通过POST方法发送请求以获取原始数据。以下是一个示例请求体: ```json { "start_time": "2023-01-01 00:00:00", "end_time": "2023-01-31 23:59:59", "status": "60,80", "warehouse_no": "WH001", "page_size": 50, "page_no": 0 } ``` 接收到响应后,需要对数据进行清洗和预处理。例如,可以过滤掉无效记录、标准化字段格式等。以下是一个简单的数据清洗示例: ```python def clean_data(raw_data): cleaned_data = [] for record in raw_data: if record['status'] in ['60', '80']: cleaned_record = { 'order_no': record['order_no'], 'warehouse_no': record['warehouse_no'], 'status': record['status'], 'created_at': record['created_at'] } cleaned_data.append(cleaned_record) return cleaned_data ``` #### 数据转换与写入 在清洗完毕后,需要将数据转换为目标系统所需的格式,并写入目标数据库或系统。这一步通常涉及字段映射、类型转换等操作。例如: ```python def transform_and_write(cleaned_data, target_db): for record in cleaned_data: transformed_record = { '订单编号': record['order_no'], '仓库编号': record['warehouse_no'], '状态': record['status'], '创建时间': datetime.strptime(record['created_at'], '%Y-%m-%d %H:%M:%S') } target_db.insert(transformed_record) ``` 通过上述步骤,我们可以高效地完成从源系统到目标系统的数据集成过程。在实际应用中,还需要考虑异常处理、日志记录等细节,以确保整个流程的稳定性和可靠性。 综上所述,通过轻易云数据集成平台调用旺店通·企业奇门接口获取采购入库单数据,并进行清洗和转换,可以实现不同系统间的数据无缝对接,提高业务透明度和效率。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/S15.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行采购入库单数据转换与写入用友BIP 在数据集成过程中,数据转换与写入是至关重要的步骤。本文将详细介绍如何使用轻易云数据集成平台将采购入库单数据转换为用友BIP API接口所能接收的格式,并最终写入目标平台。 #### 数据请求与清洗 首先,我们需要从源系统获取采购入库单的数据。假设这些数据已经通过轻易云数据集成平台的第一步处理完毕,接下来我们将重点放在如何将这些数据进行ETL转换并写入用友BIP。 #### 数据转换与写入 为了实现这一目标,我们需要配置元数据(metadata),以确保转换后的数据符合用友BIP API接口的要求。以下是具体的元数据配置: ```json { "api": "/yonbip/scm/purinrecord/mergeSourceData/save", "method": "POST", "idCheck": true, "BIPAudit": "/yonbip/scm/purinrecord/batchaudit", "request": [ { "field": "resubmitCheckKey", "label": "保证请求的幂等性", "type": "string", "describe": "该值由客户端生成,并且必须是全局唯一的长度不能超过32位。", "value": "{order_no}" }, { "field": "mergeSourceData", "label": "合并上游数据", "type": "string", "describe": "固定值传入true。", "value": "true" }, { "field": "needCalcLines", "label": "表体行计算标识", "type": "string", "describe": "固定值传入true。", "value": "true" }, { "field": "calcLinesKey", "label": "表体行计算依据", "type": "string", "describe": "固定值传入true。", "value": "oriTaxUnitPrice" }, { ... } ] } ``` #### 配置解析 1. **幂等性检查**: - `resubmitCheckKey`:用于保证请求的幂等性,确保每次请求唯一。 - `mergeSourceData`:固定传值为`true`,表示合并上游数据。 - `needCalcLines`和`calcLinesKey`:用于表体行计算,确保计算依据正确。 2. **单据基本信息**: - `code`:单据编号,根据系统配置规则决定是否必填。 - `vouchdate`:单据日期,格式为YYYYMMDD。 - `bustype`和`warehouse`:交易类型和仓库ID或code,这些字段在业务流中未配置时必填。 - `memo`:备注信息。 3. **子表信息**: 子表信息通过字段`purInRecords`进行配置,其中包含了多个字段,如: - `makeRuleCode`:生单规则编码,固定值为`st_purchaseorder`。 - `sourceid`和`sourceautoid`:上游单据主表和子表ID,通过MongoDB查询获取。 - `qty`、`oriTaxUnitPrice`、以及子表备注信息等。 以下是子表信息部分的详细配置示例: ```json { ... { "_status":"Insert", ... { ... {"field":"makeRuleCode","value":"st_purchaseorder"}, {"field":"sourceid","value":"_mongoQuery ..."}, {"field":"sourceautoid","value":"_mongoQuery ..."}, {"field":"qty","value":"{{details_list.right_num}}"}, {"field":"oriTaxUnitPrice","value":"_mongoQuery ..."}, {"field":"memo","value":"{{details_list.remark}}"} ... } } } ``` #### 数据写入 完成上述配置后,通过轻易云平台发起POST请求,将处理后的采购入库单数据写入到用友BIP系统中。API路径为 `/yonbip/scm/purinrecord/mergeSourceData/save`, 并且可以通过 `/yonbip/scm/purinrecord/batchaudit` 接口进行批量审核。 通过以上步骤,我们实现了从源系统到目标系统的数据无缝对接,并确保了每个环节的数据准确性和一致性。这不仅提高了业务效率,也增强了系统间的数据透明度。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/T12.png~tplv-syqr462i7n-qeasy.image)