自动化ETL实现:从OMS销售退货单到用友U8系统

  • 轻易云集成顾问-彭亮
### A111 oms销售退货单 => u8退货单:旺店通·企业奇门数据集成到用友U8的实践 在本案例中,我们将详细探讨如何通过轻易云数据集成平台,实现旺店通·企业奇门的数据无缝对接至用友U8系统。具体方案代码命名为“A111 oms销售退货单 => u8退货单”。此次集成任务不仅要确保从旺店通获取的每一条退款订单不漏单,还需实现快速、大批量地写入用友U8。以下是我们在这个过程中遇到的一些技术难点及解决方法。 **接口调用与数据抓取** 首先,我们采用了定时任务的方式,可靠地抓取旺店通·企业奇门API `wdt.stockin.order.query.refund` 的数据。从这一API接口可以获取全部需要处理的销售退货订单信息,为后续的数据加工和转发奠定基础。在抓取过程中,通过分页机制和限流设置,避免一次性请求量过大导致的数据丢失或接口压力过高问题。 **格式转换与映射处理** 由于(Data Format)两套系统对同类业务对象的数据格式存在差异,因此必须进行严格的数据格式转换。例如,旺店通返回的JSON结构和字段名称,需要根据需求映射为用友U8可接受的XML或者其他指定数据格式。同时,由于不同字段含义可能存在差异,此部分也涉及了较多自定义映射规则,以保证所有关键信息准确传递。 **快速与批量写入** 面对大量退款订单写入需求,用友U8提供灵活且稳定的公共API `/apilink/u8api` 供开发者使用。通过优化SQL语句和合并多个小请求为大块提交,我们极大提升了数据吞吐率,同时降低负载。在这一环节中的批量操作,不仅减少网络延迟,也有效规避了频繁调用带来的潜在风险。 **异常处理与重试机制** 集成过程中的任何异常,如网络波动、权限不足等都会记录日志并触发错误重试机制。这一设计能确保即便出现中断或失败,也不会造成关键业务信息丢失,并能够在问题修复后自动恢复正常工作流程。 ![如何对接金蝶云星空API接口](https://pic.qeasy.cloud/D25.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockin.order.query.refund`来获取并加工数据,以实现A111 oms销售退货单到u8退货单的集成。 #### 接口概述 接口`wdt.stockin.order.query.refund`用于查询销售退货单的相关信息。该接口采用POST请求方式,主要参数包括订单状态、时间范围、分页信息和店铺编号等。以下是元数据配置的详细说明: ```json { "api": "wdt.stockin.order.query.refund", "effect": "QUERY", "method": "POST", "number": "order_no", "id": "stockin_id", "name": "order_no", "idCheck": true, "request": [ {"field": "status", "label": "状态", "type": "int", "describe": "入库单状态 10已取消20编辑中30待审核60待结算80已完成(默认查询80已完成单据)"}, {"field": "start_time", "label": "开始时间", "type": "datetime", "describe": "开始时间", "value":"{{LAST_SYNC_TIME|datetime}}"}, {"field": "end_time", "label": "结束时间", "type": "datetime", "describe":"结束时间","value":"{{CURRENT_TIME|datetime}}"}, {"field":"page_size","label":"分页大小","type":"string","describe":"分页大小","value":"100"}, {"field":"page_no","label":"页号","type":"string","describe":"页号"}, {"field":"shop_nos","label":"店铺编号","type":"string","value":"111001,111002,111003,111010"} ], "autoFillResponse": true } ``` #### 请求参数解析 1. **状态(status)**:表示入库单的状态,默认查询已完成的单据(状态码80)。 2. **开始时间(start_time)**:查询的起始时间,使用变量`{{LAST_SYNC_TIME|datetime}}`自动填充。 3. **结束时间(end_time)**:查询的结束时间,使用变量`{{CURRENT_TIME|datetime}}`自动填充。 4. **分页大小(page_size)**:每次请求返回的数据条数,默认设置为100。 5. **页号(page_no)**:当前请求的页码,用于分页处理。 6. **店铺编号(shop_nos)**:指定需要查询的店铺编号列表。 #### 数据请求与清洗 在实际操作中,通过轻易云平台配置上述元数据后,可以自动生成相应的API请求。以下是一个典型的数据请求示例: ```json { "status": 80, "start_time": "{{LAST_SYNC_TIME|datetime}}", "end_time": "{{CURRENT_TIME|datetime}}", "page_size": 100, "page_no": 1, "shop_nos": ["111001", "111002", "111003", "111010"] } ``` 该请求将返回符合条件的销售退货单数据。在接收到响应后,需要对数据进行清洗和转换,以便后续处理和写入目标系统。 #### 数据转换与写入 在清洗过程中,需要确保数据格式的一致性。例如,将日期格式统一转换为目标系统所需的格式,对数值字段进行必要的单位转换等。以下是一个简单的数据清洗示例: ```python def clean_data(raw_data): cleaned_data = [] for item in raw_data: cleaned_item = { 'order_no': item['order_no'], 'stockin_id': item['stockin_id'], 'status': item['status'], 'created_at': convert_datetime_format(item['created_at']), # 更多字段处理... } cleaned_data.append(cleaned_item) return cleaned_data ``` 在完成数据清洗后,可以通过轻易云平台将处理后的数据写入目标系统u8退货单,实现完整的数据集成流程。 #### 总结 通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockin.order.query.refund`,可以高效地获取销售退货单数据,并通过清洗和转换步骤,实现A111 oms销售退货单到u8退货单的数据集成。这一过程充分利用了平台提供的全生命周期管理功能,使得整个数据处理过程透明、高效。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/S26.png~tplv-syqr462i7n-qeasy.image) ### 数据集成与ETL转换:将OMS销售退货单转为用友U8退货单 在数据集成生命周期的第二步,我们需要将已经从源平台(如OMS系统)获取的数据进行ETL转换,确保其符合目标平台(如用友U8)的API接口要求,并最终写入目标平台。本文将详细介绍如何利用轻易云数据集成平台配置元数据,将OMS销售退货单转换为用友U8退货单。 #### 1. 配置元数据 首先,我们需要配置元数据以适配用友U8的API接口。以下是具体的元数据配置示例: ```json { "api": "/apilink/u8api", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "data", "label": "data参数", "type": "object", "describe": "data参数", "children": [ { "field": "单据头", "label": "单据头", "type": "object", "describe": "单据头", "children": [ {"field":"退货单号","label":"退货单号","type":"string","value":"{order_no}"}, {"field":"销售类型","label":"销售类型","type":"string","describe":"销售类型","value":"国内零售"}, {"field":"客户简称","label":"客户简称","type":"string","describe":"客户简称","value":"{shop_name}"}, {"field":"销售部门","label":"销售部门","type":"string","describe":"销售部门","value":"{shop_name}"}, {"field":"业务员","label":"业务员","type":"string","describe":"业务员"}, {"field":"备注","label":"备注","type":"string","describe":"备注","value":"{remark}"}, {"field":"退货日期","label":"退货日期","type":"string","value":"{created_time}"}, {"field":"制单人","label":"制单人","type":"string","value":"{refund_operator_name}"}, {"field":"订单号","label":"订单号","type":"string","value":"{tid}"} ] }, { "field": "单据体", "label": "单据体", "type": "array", "describe": "单据体", "value": "details_list", "children": [ { "field": "行", "label": "行", "type": "object", "describe": "行", "children":[ {"field": “仓库名称”, “label”: “仓库名称”, “type”: “string”, “describe”: “仓库名称”, “value”: “{warehouse_no}”}, {"field”: “货物编码”, “label”: “货物编码”, “type”: “string”, “describe”: “存货名称”, “value”: "{{details_list.goods_no}}"}, {"field”: “数量”, “label”: “数量”, “type”: “string”, “describe”:“数量”,“value”:"_function {{details_list.goods_count}} * (-1)"}, {"field”:“含税单价”,“label”:“含税单价”,“type”:“string”,“value”:"{{details_list.src_price}}"} ] } ] } ] } ], ... } ``` #### 2. 数据转换与映射 在上述配置中,`request`字段定义了发送到用友U8 API的数据结构。我们需要特别注意以下几个关键字段的映射和转换: - **退货单号** (`order_no`):直接映射为`{order_no}`。 - **客户简称** (`shop_name`):映射为`{shop_name}`,并且通过`mapping`属性指向特定的目标字段。 - **数量** (`goods_count`):由于是退货,需要将数量乘以-1,即通过函数 `_function {{details_list.goods_count}} * (-1)`实现。 - **含税单价** (`src_price`):直接映射为`{{details_list.src_price}}`。 #### 3. 接口调用与数据写入 配置完成后,我们通过POST方法调用用友U8的API接口,将转换后的数据写入目标平台。以下是具体的API调用示例: ```json { ... { field: 'apiurl', label: '接口', type: 'string', describe: '创建退货单', value: 'returnorder/create' }, { field: 'audit', label: '审核接口', type: 'string', value: 'consignment/audit' } } ``` 在实际操作中,我们需要确保每个字段的数据格式和内容都符合用友U8 API的要求,以保证数据能够成功写入并被正确处理。 #### 总结 通过上述步骤,我们可以高效地将OMS系统中的销售退货单数据转换为用友U8所需的格式,并成功写入目标平台。这一过程不仅提高了数据处理的效率,还保证了不同系统间的数据一致性和准确性。 ![打通用友BIP数据接口](https://pic.qeasy.cloud/T23.png~tplv-syqr462i7n-qeasy.image)