数据转换与写入:将旺店通销售退货单数据集成到金蝶云

  • 轻易云集成顾问-潘裕
### 旺店通·旗舰奇门数据集成到金蝶云星空的实践案例 在如今竞争激烈的市场环境中,企业对于高效处理销售退货单的数据需求日益增加。本文将聚焦于一个实际操作中显著提升了工作效率的技术案例——通过轻易云数据集成平台,将旺店通·旗舰奇门系统中的销售退货单数据无缝对接至金蝶云星空,实现快速、精准的数据交换与处理。 #### 案例背景与挑战 该项目旨在解决由于不同系统之间缺乏直接接口导致的数据流动不畅问题,并确保从旺店通·旗舰奇门获取销售退货单数据后,无遗漏地写入到金蝶云星空中。同时,要满足业务场景下对高吞吐量和实时监控的严格要求。 #### 技术解决方案概述 为了实现这一目标,我们需要调用旺店通·旗舰奇门API `wdt.wms.stockin.refund.querywithdetail` 获取销售退货单详细信息,并利用金蝶云星空API `batchSave` 进行批量数据写入。整个过程采用轻易云提供的可视化数据流设计工具来构建和管理,以减少人工错误并提高整体效率。 ##### API接口调用及分页处理 使用`wdt.wms.stockin.refund.querywithdetail`接口时,需要特别注意其分页机制和限流策略。我们设置定时任务可靠抓取所需数据,通过合理规划每次请求的数据大小以及频率,避免触发限制。同时,在出现异常情况时,增强错误重试机制确保不会漏单。 ##### 数据格式转换与映射 由于两套系统间可能存在字段差异性,我们自定义了适配转换逻辑,对从旺店通获取的数据进行预处理,使其符合金蝶云星空接受标准。此外,通过集中化监控告警功能,可以实时检测并纠正任何潜在的问题,保障了全过程顺利进行。 通过这种预先配置好的流程,不仅提高了集成操作的一致性,还利用轻易云的平台特性,大幅度简化了复杂性的同时,也达到了扩展灵活应变能力,从而真正赋能企业高效运作。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/D8.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·旗舰奇门接口获取并加工数据 在轻易云数据集成平台的生命周期中,调用源系统接口是关键的第一步。本文将详细探讨如何通过调用旺店通·旗舰奇门接口 `wdt.wms.stockin.refund.querywithdetail` 获取销售退货单数据,并进行初步的数据加工。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。以下是 `wdt.wms.stockin.refund.querywithdetail` 接口的元数据配置: ```json { "api": "wdt.wms.stockin.refund.querywithdetail", "method": "POST", "number": "order_no", "id": "stockin_id", "idCheck": true, "request": [ { "field": "pager", "label": "分页参数", "type": "object", "children": [ { "field": "page_size", "label": "分页大小", "type": "string", "value": "50", "parent": "pager" }, { "field": "page_no", "label": "页号", "type": "string", "value": "1", "parent": "pager" } ] }, { "field": "params", "label": "业务参数", "type": "object", "children": [ { "field": "start_time", ... ``` #### 参数解析与配置 1. **分页参数**: - `page_size`: 每页返回的数据条数,设置为50。 - `page_no`: 当前页号,初始值为1。 2. **业务参数**: - `start_time` 和 `end_time`: 查询时间范围,分别使用上次同步时间和当前时间。 - `status`: 入库单状态,设置为80表示已完成。 - `time_type`: 时间条件类型,设置为1表示按入库时间查询。 - `warehouse_no`: 仓库编码,可根据实际需求填写。 - `shop_nos`: 店铺编号,多个店铺编号使用英文逗号分隔,此处示例值为`bf796c6`。 - `stockin_no`: 入库单号,可选参数。 #### 数据请求与清洗 在完成接口配置后,我们通过POST请求获取数据。以下是一个简化的请求示例: ```json { "_api_":"wdt.wms.stockin.refund.querywithdetail", "_method_":"POST", "_request_":{ ... "_params_":{ ... "_start_time_":"{{LAST_SYNC_TIME|datetime}}", "_end_time_":"{{CURRENT_TIME|datetime}}" } } } ``` 成功获取数据后,需要对原始数据进行清洗和初步加工。常见的数据清洗步骤包括: - **去除无效字段**:删除不必要的字段,仅保留业务需要的信息。 - **格式转换**:将日期、金额等字段转换为标准格式。 - **数据过滤**:根据特定条件过滤掉不符合要求的数据,例如状态不为80的数据。 #### 数据转换与写入 清洗后的数据需要进一步转换,以符合目标系统(如金蝶)的要求。转换规则可能包括: - 字段映射:将源系统字段映射到目标系统对应字段。 - 数据合并:将多个相关记录合并成一条记录,以便于写入目标系统。 最终,通过轻易云平台,将处理后的数据写入目标系统,实现销售退货单的无缝对接。 #### 示例代码 以下是一个Python示例代码,用于调用接口并处理返回的数据: ```python import requests import json # 配置请求头和URL url = 'https://api.example.com/wdt.wms.stockin.refund.querywithdetail' headers = {'Content-Type': 'application/json'} # 构建请求体 payload = { 'pager': {'page_size': '50', 'page_no': '1'}, 'params': { 'start_time': '{{LAST_SYNC_TIME|datetime}}', 'end_time': '{{CURRENT_TIME|datetime}}', 'status': '80', 'time_type': '1', 'shop_nos': 'bf796c6' } } # 发起POST请求 response = requests.post(url, headers=headers, data=json.dumps(payload)) # 检查响应状态码 if response.status_code == 200: data = response.json() # 数据清洗和转换逻辑 cleaned_data = clean_data(data) transformed_data = transform_data(cleaned_data) # 写入目标系统逻辑 write_to_target_system(transformed_data) else: print(f"Error: {response.status_code}") def clean_data(data): # 清洗逻辑实现 pass def transform_data(data): # 转换逻辑实现 pass def write_to_target_system(data): # 写入目标系统实现 pass ``` 通过上述步骤,我们可以高效地从旺店通·旗舰奇门接口获取销售退货单数据,并进行必要的清洗和转换,为后续的数据写入做好准备。这不仅提升了数据处理效率,也确保了业务流程的顺畅运行。 ![企业微信与ERP系统接口开发配置](https://pic.qeasy.cloud/S29.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将销售退货单数据转换并写入金蝶云星空API接口 在轻易云数据集成平台中,将源平台的数据转换为目标平台所需格式并写入是数据处理生命周期中的关键步骤。本文将详细探讨如何将旺店通的销售退货单数据通过ETL(提取、转换、加载)过程,转换为金蝶云星空API接口能够接收的格式,并最终写入目标平台。 #### 数据请求与清洗 在进行ETL转换之前,我们首先需要从源系统(旺店通)中提取销售退货单数据。假设我们已经完成了这一阶段,并获得了如下结构的数据: ```json { "order_no": "123456", "shop_no": "A001", "modified": "2023-10-01", "fenxiao_nick": "Distributor001", "remark": "客户退货", "details_list": [ { "goods_no": "P001", "num": 10, "refund_order_detail_list": [ { "price": 100 } ], "warehouse_no": "W001", "created_time": "2023-10-01T12:00:00Z", "remark": "无损坏" } ], "actual_refund_amount": 1000, "customer_no": "C001", "logistics_no": "L1234567890", "logistics_name": "顺丰速运", "refund_no": "R123456", "tid_list": ["T123456"] } ``` #### 数据转换与写入 接下来,我们需要将上述数据转换为金蝶云星空API接口所能接收的格式。根据提供的元数据配置,具体操作如下: 1. **配置基本信息** 根据元数据配置,我们首先设置基本信息字段,包括单据类型、单据编号、库存组织等。这些字段大部分是直接映射或者通过简单的值替换完成。 ```json { "FBillTypeID": {"FNumber":"XSTHD01_SYS"}, "FBillNo": "{order_no}", ... } ``` 2. **处理日期和组织信息** 日期和组织信息需要进行适当的格式化和解析。例如,`FDate`字段直接使用`{modified}`,而`FSaleOrgId`和`FRetcustId`等字段则需要通过`ConvertObjectParser`进行解析。 ```json { ... "FDate": "{modified}", ... "FSaleOrgId": {"FNumber":"{shop_no}"}, ... "FRetcustId":{"FNumber":"{fenxiao_nick}"}, ... } ``` 3. **明细信息处理** 明细信息是一个数组,需要逐项处理每个商品的详细信息。根据元数据配置,每个商品的信息包括物料编码、实退数量、含税单价等字段。 ```json { ... "FEntity":[ { ... {"FMaterialId":{"FNumber":"{{details_list.goods_no}}"}}, {"FRealQty":"{{details_list.num}}"}, {"FTaxPrice":"{{details_list.refund_order_detail_list.0.price}}"}, {"FOwnerTypeId":"BD_OwnerOrg"}, {"FOwnerId":{"FNumber":"100.01"}}, {"FStockId":{"FNumber":"{warehouse_no}"}}, {"FDeliveryDate":"{{created_time|datetime}}"}, {"FNote":"{{details_list.remark}}"} } ] ... } ``` 4. **财务信息** 财务信息包括结算组织等字段,同样需要进行解析和映射。 ```json { ... {"SubHeadEntity":{ ... {"FSettleOrgId":{"FNumber":"{shop_no}"}}, ... }}, ... } ``` 5. **其他必要字段** 最后,我们补充其他必要的字段,如退货金额、客户编码、物流单号等。 ```json { ... {"Freamount":"{actual_refund_amount}"}, {"FBuyerNo":"{customer_no}"}, {"FLogisticsNos":"{logistics_no}"}, {"FLogComName":"{logistics_name}"}, {"Ffenxiao_nick":"{fenxiao_nick}"}, {"F_PAUF_ptdh":"{refund_no}"}, {"F_PAUF_ZPTDH":"{tid_list}"} } ``` #### 最终请求结构 整合上述所有配置,我们最终生成的请求结构如下: ```json { ... { api: 'batchSave', method: 'POST', idCheck: true, operation: { rowsKey: 'array', rows: 1, method: 'batchArraySave' }, request: [ { field: 'FBillTypeID', value: { FNumber: 'XSTHD01_SYS' } }, { field: 'FBillNo', value: '{order_no}' }, { field: 'FSaleOrgId', value: { FNumber: '{shop_no}' } }, { field: 'FRetcustId', value: { FNumber: '{fenxiao_nick}' } }, // ...其他字段... { field: 'SubHeadEntity', value: [ { field: 'FSettleOrgId', value:{ FNumber:'{shop_no}' } } ] }, // ...其他字段... ], otherRequest:[ { field:'FormId',value:'SAL_RETURNSTOCK' }, { field:'Operation',value:'Save' }, // ...其他字段... ] } } ``` 通过以上步骤,我们成功地将旺店通的销售退货单数据转换为金蝶云星空API接口能够接收的格式,并准备好发送至目标平台进行写入。 ![如何开发企业微信API接口](https://pic.qeasy.cloud/T1.png~tplv-syqr462i7n-qeasy.image)