稳健的数据ETL转换:将旺店通退换货数据写入用友BIP

  • 轻易云集成顾问-李国敏
### 退换货生成销售退货(线上)-v:旺店通·企业奇门数据集成用友BIP技术案例 在本案例中,我们将详细探讨如何通过系统对接,实现旺店通·企业奇门平台的退换货数据无缝集成到用友BIP。本文聚焦于“退换货生成销售退货(线上)-v”方案,该方案旨在利用API接口及定制化的数据处理逻辑,确保数据不漏单,高效且准确地完成集成任务。 #### 数据抓取与接口调用 首先,我们使用wl.refund.query API从旺店通·企业奇门抓取最新的退换货信息。为了保证数据的准确性和时效性,我们实现了定时可靠的数据抓取机制,每隔一定时间周期自动调用API,并正确处理分页和限流问题。这不仅提高了数据获取效率,也减少了对源系统的压力。 ```json { "api":"wdt.refund.query", "data":{ ... } } ``` #### 数据格式转换与映射 由于旺店通·企业奇门和用友BIP之间存在较大的数据格式差异,通过轻易云的平台进行灵活的元数据信息配置,我们能够有效地解决这一问题。在提取到原始JSON数据后,会进行一系列标准化操作,包括字段重命名、类型转换以及复杂嵌套结构解析,确保能与用友BIP所需的数据模型完美匹配。 #### 批量写入与性能优化 接下来,将经过处理后的批量记录发送至用友BIP中的/sd/vouchersalereturn/singleSave API,此过程尤其注重大量数据快速写入及其性能优化。通过并行请求机制和错误重试策略,即便遇到网络故障或异常情况,也能最大程度上提升整体处理成功率。 ```json { "url": "/yonbip/sd/vouchersalereturn/singleSave", "method": "POST", "data": { ... } } ``` #### 异常处理与监控日志 为了增强稳定性,当出现API调用失败等异常情况时,实施了一套完整的错误捕获与告警机制,不仅可以即时报错,还会触发多次重试。此外,实时监控日志记录功能贯穿整个流程,为开发运维人员提供详尽透明的信息反馈,以便迅速排查和解决潜在问题。 以上是此次系统对接项目核心技术点简介,在随后的章节中将进一步分解每一步骤涉及的具体实现细节。 ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/D28.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口wdt.refund.query获取并加工数据的技术实现 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细介绍如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.refund.query`,并对获取的数据进行初步加工。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。根据提供的元数据配置,接口调用采用POST方法,分页大小设置为40,并且需要对特定字段进行条件过滤。 ```json { "api": "wdt.refund.query", "method": "POST", "number": "refund_no", "id": "refund_id", "pagination": { "pageSize": 40 }, "idCheck": true, "beatFlat": ["refund_order_list"], "condition": [ [ {"field":"process_status","logic":"egt","value":"70","strictMode":true}, {"field":"shop_no","logic":"neq","value":"063"}, ... {"field":"shop_no","logic":"neqv2","value":"171"} ], [ {"field":"process_status","logic":"egt","value":"70","strictMode":true}, {"field":"shop_no","logic":"neq","value":"063"}, ... {"field":"shop_no","logic":"neqv2","value":"171"} ] ], "request": [ {"field":"process_status","label":"退换单处理状态","type":"string"}, {"field":"time_type","label":"时间类型","type":"string"}, {"field":"start_time","label":"开始时间","type":"string", "value": "{{LAST_SYNC_TIME|datetime}}"}, {"field":"end_time","label":"结束时间","type":"string", "value": "{{CURRENT_TIME|datetime}}"}, {"field":"page_size","label":"分页大小","type":"string", "value": "{PAGINATION_PAGE_SIZE}"}, ... ] } ``` #### 数据请求与清洗 在实际操作中,我们需要按照上述配置发送HTTP请求以获取退换货数据。以下是一个示例请求体: ```json { "process_status": "70", "time_type": "0", "start_time": "{{LAST_SYNC_TIME|datetime}}", "end_time": "{{CURRENT_TIME|datetime}}", "page_size": 40, ... } ``` 通过这种方式,我们可以获取到符合条件的退换货订单列表。为了确保数据的准确性和完整性,需要对返回的数据进行初步清洗和验证。例如,可以检查每条记录的`refund_id`是否唯一,并且过滤掉不符合业务逻辑的数据。 #### 数据转换与写入 在完成数据清洗后,下一步是将数据转换为目标系统所需的格式,并写入目标数据库或系统。在这个过程中,可以利用轻易云平台提供的数据转换工具,将原始数据字段映射到目标字段。例如: ```json { "source_field_1": "target_field_1", ... } ``` 通过这种映射关系,可以确保数据在不同系统之间无缝对接。 #### 条件过滤与分页处理 为了提高查询效率和减少不必要的数据传输,可以利用元数据中的条件过滤功能。例如,通过设置`process_status`大于等于70,并排除特定店铺编号的数据,可以有效地缩小查询范围。此外,分页处理也是必不可少的一部分,通过设置每页返回的数据条数为40,可以分批次获取大规模数据,从而避免一次性传输过多数据导致的性能问题。 ```json { "pagination": { "pageSize": 40 } } ``` #### 实时监控与日志记录 为了确保整个过程的透明度和可追溯性,需要对每次接口调用进行实时监控和日志记录。通过轻易云平台提供的监控工具,可以实时查看每个环节的数据流动和处理状态,并在出现异常时及时报警。 总结来说,通过合理配置元数据、有效利用条件过滤和分页处理,以及实时监控和日志记录,可以高效地实现旺店通·企业奇门接口`wdt.refund.query`的数据请求与清洗,为后续的数据转换与写入打下坚实基础。 ![电商OMS与ERP系统接口开发配置](https://pic.qeasy.cloud/S26.png~tplv-syqr462i7n-qeasy.image) ### 数据集成与ETL转换:将源平台数据写入用友BIP 在数据集成生命周期的第二阶段,我们需要将已经集成的源平台数据进行ETL转换,并转为目标平台用友BIP API接口所能够接收的格式,最终写入目标平台。以下是具体的技术实现步骤。 #### 1. 数据请求与清洗 首先,我们需要从源平台获取数据并进行初步清洗,以确保数据的完整性和一致性。假设我们已经完成了这一阶段,接下来进入数据转换与写入阶段。 #### 2. 数据转换与写入 在这一阶段,我们需要将清洗后的数据按照用友BIP API接口要求的格式进行转换,并通过POST请求将其写入目标平台。以下是具体步骤: ##### 2.1 配置API接口 根据元数据配置,我们需要调用`/yonbip/sd/vouchersalereturn/singleSave`接口,使用POST方法提交数据。为了保证请求的幂等性,我们需要生成一个全局唯一的`resubmitCheckKey`。 ```json { "api": "/yonbip/sd/vouchersalereturn/singleSave", "method": "POST", "idCheck": true, "BIPAudit": "/yonbip/sd/vouchersalereturn/approve" } ``` ##### 2.2 构建请求头和请求体 根据元数据配置中的字段映射关系,我们需要构建请求头和请求体。这里我们重点关注几个关键字段: - `refund_no`: 退货单号 - `shop_no`: 店铺编号 - `remark`: 备注 - `modified`: 修改时间 - `actual_refund_amount`: 实际退款金额 - `warehouse_no`: 仓库编号 - `tid`: 原始单号 ```json { "resubmitCheckKey": "{refund_no}", "code": "{refund_no}", "salesOrgId": "_findCollection find mapping_sale_org from 4769a428-14c4-33b8-91fd-e8da3b39d5cb where shop_no={shop_no}", "transactionTypeId": "1480261131563434158", "agentId": "_findCollection find mapping_customer from 4769a428-14c4-33b8-91fd-e8da3b39d5cb where shop_no={shop_no}", "retailInvestors": false, "headFreeItem!define2": "{remark}", "saleDepartmentId": "", "vouchdate": "{modified}", "corpContact": "", ... } ``` ##### 2.3 构建表体详情 表体详情部分涉及到退货商品的具体信息,如商品规格、退货数量、含税金额等。我们需要根据元数据配置中的字段映射关系,将源平台的数据转换为目标平台所需的格式。 ```json { "saleReturnDetails": [ { "productId": "{{refund_order_list.refund_order_list_spec_no}}", "skuId": "{{refund_order_list.refund_order_list_spec_no}}", ... "subQty": "{{refund_order_list.refund_order_list_refund_num}}", ... "_status": "Insert" } ... ] } ``` ##### 2.4 调用API接口 构建好请求头和请求体后,通过HTTP POST方法调用用友BIP API接口,将转换后的数据写入目标平台。 ```python import requests url = 'https://api.yonyouup.com/yonbip/sd/vouchersalereturn/singleSave' headers = {'Content-Type': 'application/json'} data = { # 请求头和请求体内容 } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print("Data successfully written to Yonyou BIP.") else: print(f"Failed to write data: {response.status_code}, {response.text}") ``` ##### 2.5 审核流程 如果需要对提交的数据进行审核,可以调用`/yonbip/sd/vouchersalereturn/approve`接口进行审核操作。 ```python audit_url = 'https://api.yonyouup.com/yonbip/sd/vouchersalereturn/approve' audit_data = { # 审核所需参数 } audit_response = requests.post(audit_url, headers=headers, json=audit_data) if audit_response.status_code == 200: print("Data successfully approved in Yonyou BIP.") else: print(f"Failed to approve data: {audit_response.status_code}, {audit_response.text}") ``` 通过上述步骤,我们可以实现从源平台到用友BIP平台的数据ETL转换与写入操作,确保每个环节的数据准确性和一致性。 ![打通企业微信数据接口](https://pic.qeasy.cloud/T28.png~tplv-syqr462i7n-qeasy.image)