旺店通数据快速写入用友U8的集成技术及优化措施

  • 轻易云集成顾问-曹润
### 案例分享:旺店通·企业奇门数据集成到用友U8 在技术系统对接中,如何高效地从一家ERP系统导入数据并精确地写入另一家ERP系统,是一个常见且关键的挑战。本文将详细探讨一个实际应用案例:通过轻易云平台实现旺店通·企业奇门的数据集成到用友U8。 具体来说,我们的案例方案——“A111 oms销售出库单 => u8发货单”,旨在确保从旺店通获取准确和完整的订单信息,并将这些信息快速、无误地写入到用友U8中,以满足业务需求中的数据同步要求。在这一过程中,我们重点关注以下几个技术细节: 1. **确保集成过程不漏单**: 使用定时任务可靠抓取`wdt.stockout.order.query.trade`接口的数据,从源头上保证每个销售出库订单都被实时捕捉,并进行日志记录和监控,确保没有任何遗漏。 2. **批量与快速写入**: 面对大规模数据处理需求,通过优化API调用频率和分页策略,使得大量订单能够被迅速且稳定地批量导入至用友U8。同时针对分页和限流问题进行专门处理,避免由于接口限制导致的数据传输失败。 3. **解决数据格式差异**: 由于旺店通·企业奇门与用友U8之间存在明显的数据结构差异,通过自定义映射规则,将不同字段间进行了精准对应,实现了无缝转换。例如,将销售出库单中的字段重构为发货单所需的信息格式,为后续操作铺平道路。 4. **异常处理与错误重试机制**: 在实际运行过程中,不可避免会遇到网络波动或接口响应超时等情况。我们设计并实施了专属的错误检测和自动重试机制,对所有可能出现的问题进行即时反馈及修复,提高整体流程的鲁棒性(Robustness)。 5. **实时监控与日志记录**: 实现全程透明化管理,从拉取交易订单开始,每一步操作均有详实的日志记录,为后期审计、排障提供依据,同时通过报警机制及时发现并纠正异常状况,有效保障了整个集成流程的一致性和正确性。 综上所述,本次分享主要聚焦于如何有效运用API完成两大系统之间的数据交互,以及面对海量多变数据时的一系列优化措施。这不仅加速业务流转,还极大提升了操作效率,为未来更多类似项目提供宝贵经验。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/D37.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口wdt.stockout.order.query.trade获取并加工数据 在数据集成生命周期的第一步,我们需要从源系统获取数据,并对其进行初步清洗和加工。本文将详细探讨如何使用轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockout.order.query.trade`,并对返回的数据进行处理。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。根据提供的元数据配置,我们可以看到接口的基本信息和请求参数: ```json { "api": "wdt.stockout.order.query.trade", "effect": "QUERY", "method": "POST", "number": "src_trade_no", "id": "order_no", "name": "order_type_name", "idCheck": true, "request": [ {"field":"status","label":"状态","type":"string","describe":"5已取消,55已审核,95已发货,105 部分打款,110已完成,113:异常发货"}, {"field":"start_time","label":"开始时间","type":"datetime","describe":"增量获取数据,start_time作为开始时间,格式:yyyy-MM-dd HH:mm:ss","value":"{{LAST_SYNC_TIME|datetime}}"}, {"field":"end_time","label":"结束时间","type":"datetime","describe":"增量获取数据,end_time作为结束时间,格式:yyyy-MM-dd HH:mm:ss","value":"{{CURRENT_TIME|datetime}}"}, {"field":"src_order_no","label":"系统订单编号","type":"string","describe":"可以单独按照系统单号查询,不传其他参数"}, {"field":"src_tid","label":"原始单号","type":"string","describe":"可以单独按照原始单号查询,不传其他参数"}, {"field":"stockout_no","label":"出库单号","type":"string","describe":"可以单独按照出库单号查询,不传其他参数"}, {"field":"is_by_modified","label":"时间查询条件","type":"string","describe":"定义是否用最后修改时间来查询,当指定状态status字段后,传0按照原销售出库单接口规则返回,传1按照出库单的最后修改时间进行返回,默认为0"}, {"field":"shop_nos","label":"店铺编号","type":"string","describe":"代表店铺所有属性的唯一编码,用于店铺区分,ERP内支持自定义(ERP店铺界面设置),用于获取指定店铺单据数据信息", "value": "111001,111002,111003,111010"}, {"field":"warehouse_no","label":"仓库编号","type":"string", "describe": "代表仓库所有属性的唯一编码,用于仓库区分,ERP内支持自定义(ERP仓库界面设置),用于获取指定仓库单据数据信息(不支持一次推送多个仓库编号)", "value": "111601,111701,111801,111803,111"} ], "otherRequest":[ {"field": "page_size", "label": "分页大小", "type": "string", "describe": "每页返回的数据条数,输入值范围1~100,不传本参数,输入值默认为40", "value": "100"}, {"field": "page_no", "label": "页号", "type": "string", "describe": "页号默认从0开始"} ], "autoFillResponse": true } ``` #### 请求参数详解 - **status**: 状态码,用于过滤订单状态。 - **start_time** 和 **end_time**: 用于增量获取数据的时间范围。 - **src_order_no**, **src_tid**, **stockout_no**: 用于按特定条件查询订单。 - **is_by_modified**: 定义是否按最后修改时间查询。 - **shop_nos** 和 **warehouse_no**: 用于指定店铺和仓库。 - **page_size** 和 **page_no**: 用于分页控制。 #### 数据请求与清洗 1. **构建请求报文** 根据元数据配置,我们需要构建一个包含必要参数的请求报文。例如: ```json { "status": "", "start_time": "{{LAST_SYNC_TIME|datetime}}", "end_time": "{{CURRENT_TIME|datetime}}", ... // 其他必要参数 } ``` 2. **发送请求** 使用POST方法将请求报文发送到`wdt.stockout.order.query.trade`接口,并接收响应。 3. **初步清洗** 对返回的数据进行初步清洗,包括但不限于: - 去除无效或重复的数据。 - 转换字段格式,例如日期格式转换。 - 根据业务需求筛选特定字段。 #### 数据转换与写入 在完成初步清洗后,需要将数据转换为目标系统所需的格式,并写入目标系统。在本案例中,我们将处理后的销售出库单数据写入U8发货单模块。 1. **字段映射** 将源系统中的字段映射到目标系统中。例如: ```json { // 源系统字段 : 目标系统字段 "src_trade_no" : "<U8对应字段>", ... } ``` 2. **转换逻辑** 根据业务规则,对某些字段进行转换。例如,将订单状态码转换为目标系统中的对应状态描述。 3. **写入操作** 使用轻易云平台提供的数据写入功能,将转换后的数据批量写入U8发货单模块。 通过上述步骤,我们实现了从旺店通·企业奇门接口获取销售出库单数据,并对其进行清洗、转换和写入U8发货单模块的完整流程。这一过程不仅提高了数据处理效率,还确保了不同系统间的数据一致性和准确性。 ![如何对接用友BIP接口](https://pic.qeasy.cloud/S5.png~tplv-syqr462i7n-qeasy.image) ### 用友U8API接口数据集成技术案例 在轻易云数据集成平台上,我们可以将源平台的数据进行ETL转换,转为目标平台用友U8API接口所能够接收的格式,并最终写入目标平台。以下是一个详细的技术案例,展示如何配置和实现这一过程。 #### 数据请求与清洗 首先,我们需要从源平台(例如OMS系统)获取销售出库单的数据。这些数据通常包括订单号、发货日期、客户信息、商品明细等。在轻易云数据集成平台上,可以通过定义API请求来获取这些数据。假设我们已经完成了这一阶段,接下来重点介绍数据转换与写入。 #### 数据转换与写入 在这个阶段,我们需要将已经获取的源数据按照用友U8API接口的要求进行转换,并通过POST方法将其写入目标平台。以下是具体的配置和实现步骤: 1. **定义API接口元数据** 根据提供的元数据配置,我们需要构建一个符合用友U8API接口要求的数据结构。以下是元数据配置的关键部分: ```json { "api": "/apilink/u8api", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "data", "label": "data参数", "type": "object", "describe": "data参数", "children": [ { "field": "单据信息", "label": "单据信息", ... }, { ... } ] } ], ... } ``` 2. **构建请求体** 根据元数据配置,我们需要构建一个包含单据信息、单据头和单据体的JSON对象。例如: ```json { "data": { "单据信息": { "单据模版": "单据模版", "红蓝标记": "蓝" }, ... "单据头": { ... "发货单号": "{order_no}", ... "客户简称": "{shop_name}", ... }, ... "单据体": [ { ... "行": { ... "仓库名称": "{warehouse_no}", ... "存货编码": "{{details_list.goods_no}}", ... } } ] } } ``` 3. **字段映射和处理** 在构建请求体时,需要特别注意字段映射和处理。例如: - `发货日期`:需要将`consign_time`字段转换为日期格式。 - `客户简称`:映射到`shop_name`字段。 - `含税单价`:通过计算得到,即 `_function {{details_list.share_amount}}/{{details_list.goods_count}}`。 4. **发送请求** 构建好请求体后,通过POST方法将其发送到用友U8API接口。示例代码如下: ```python import requests import json url = "/apilink/u8api" headers = {"Content-Type": "application/json"} payload = { # 构建好的请求体 # 省略具体内容,参考上文示例 } response = requests.post(url, headers=headers, data=json.dumps(payload)) if response.status_code == 200: print("Data successfully written to U8 platform.") else: print(f"Failed to write data: {response.text}") ``` 5. **审核操作** 如果需要审核操作,可以根据元数据中的审核接口配置,发送审核请求。例如: ```json { ..., otherRequest: [ {"field":"audit","label":"审核接口","type":"string","value":"consignment/audit"} ] } ``` 发送审核请求的示例代码如下: ```python audit_url = "/apilink/u8api/consignment/audit" audit_response = requests.post(audit_url, headers=headers, data=json.dumps(payload)) if audit_response.status_code == 200: print("Data successfully audited.") else: print(f"Failed to audit data: {audit_response.text}") ``` 通过上述步骤,我们可以实现从源平台到用友U8平台的数据ETL转换和写入过程。在实际应用中,还需根据具体业务需求对字段映射、数据处理逻辑进行调整,以确保数据准确无误地传输到目标系统。 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/T3.png~tplv-syqr462i7n-qeasy.image)