从旺店通提取销售退货数据并写入金蝶云星辰V2

  • 轻易云集成顾问-黄宏棵
### PACKAGE--旺店通销售退货单对接金蝶云星辰销售退货单技术案例分享 在本案例中,我们将聚焦如何通过轻易云数据集成平台实现旺店通·企业奇门的数据无缝对接到金蝶云星辰V2,重点探讨"PACKAGE--旺店通销售退货单对接金蝶云星辰销售退货单"的技术细节。 首先,我们需要调用旺店通·企业奇门提供的`wdt.stockin.order.query.refund` API接口,从中抓取具体的销售退货数据。这个过程需特别注意处理分页和限流问题,以确保不会因请求过多而触发系统保护机制。在获取数据后,利用轻易云的平台能力完成必要的数据清洗、转换,并根据业务需求自定义转换逻辑解决两边系统之间的数据格式差异。 为保证这些批量化的数据能够快速、安全地写入金蝶云星辰V2,需要配置其API接口(`/jdy/v2/scm/sal_in_bound`)来接受并处理输入的数据。这一步包含多个关键技术点:高吞吐量支持、实时监控以及异常检测和告警。集中监控和日志记录功能可以让我们及时发现潜在的问题,并通过自动化重试机制提高整体流程的可靠性。 此外,为保障整个集成过程中不漏单,设置定时任务以定期从旺店通·企业奇门接口抓取更新的数据,同时要考虑实现批量操作,以减少频繁请求所带来的负载压力。在实际实施过程中,也会结合具体使用场景进行优化,例如缓存策略和动态调整批次大小等。 以上便是本项目所涉及的一些核心技术点。在下文中,我们将详细拆解各个开发步骤及其对应的代码实现,包括如何准确调用相关API、配置数据映射规则以及处理异常情况等内容。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/D9.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口获取并加工数据 在数据集成生命周期的第一步,我们需要调用源系统的API接口以获取初始数据。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockin.order.query.refund`来获取销售退货单数据,并进行初步加工。 #### 接口概述 接口`wdt.stockin.order.query.refund`用于查询销售退货单信息,支持增量获取和分页查询。该接口采用POST请求方式,返回的数据包括订单号、入库单ID等关键字段。 #### 元数据配置解析 根据提供的元数据配置,我们可以看到以下几个关键点: - **API名称**: `wdt.stockin.order.query.refund` - **请求方法**: POST - **主要字段**: - `order_no`: 订单号 - `stockin_id`: 入库单ID - **请求参数**: - `start_time`: 开始时间,用于增量获取数据,格式为`yyyy-MM-dd HH:mm:ss` - `end_time`: 结束时间,用于增量获取数据,格式为`yyyy-MM-dd HH:mm:ss` - `status`: 入库单状态,默认查询已完成的单据(状态码80) - `shop_no`: 店铺编号,用于区分不同店铺的数据 - 分页参数:`page_size`和`page_no` #### 请求参数设置 在实际操作中,我们需要设置好请求参数,以确保能够正确地调用接口并获取所需的数据。以下是一个典型的请求参数设置示例: ```json { "start_time": "{{LAST_SYNC_TIME|datetime}}", "end_time": "{{CURRENT_TIME|datetime}}", "status": "80", "shop_no": "SHOP123", "page_size": "40", "page_no": "0" } ``` - `start_time`和`end_time`分别表示上次同步时间和当前时间,用于实现增量数据获取。 - `status`设置为80,表示只查询已完成的退货单。 - `shop_no`指定了特定店铺编号。 - 分页参数设置为每页40条记录,从第0页开始。 #### 数据处理与清洗 在成功调用API并获取到原始数据后,需要对数据进行初步清洗和处理,以便后续的数据转换与写入步骤。以下是一些常见的数据处理操作: 1. **字段映射**: 将API返回的字段映射到目标系统所需的字段。例如,将返回的`order_no`映射到目标系统中的订单号字段。 2. **数据类型转换**: 确保所有字段的数据类型符合目标系统要求。例如,将日期字符串转换为日期对象。 3. **去重与过滤**: 移除重复记录,并根据业务规则过滤不需要的数据。 #### 示例代码 以下是一个示例代码片段,展示如何通过轻易云平台调用接口并处理返回的数据: ```python import requests import json from datetime import datetime # 设置请求URL和头信息 url = 'https://api.wangdian.cn/openapi2/wdt.stockin.order.query.refund' headers = {'Content-Type': 'application/json'} # 构建请求参数 params = { "start_time": datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "end_time": datetime.now().strftime('%Y-%m-%d %H:%M:%S'), "status": "80", "shop_no": "SHOP123", "page_size": "40", "page_no": "0" } # 发起POST请求 response = requests.post(url, headers=headers, data=json.dumps(params)) # 检查响应状态码 if response.status_code == 200: data = response.json() # 数据处理与清洗 processed_data = [] for record in data['orders']: processed_record = { 'order_number': record['order_no'], 'stockin_id': record['stockin_id'], # 添加更多字段映射和处理逻辑... } processed_data.append(processed_record) # 输出处理后的数据 print(processed_data) else: print(f"Error: {response.status_code}, {response.text}") ``` 通过上述步骤,我们可以高效地从旺店通·企业奇门接口获取销售退货单数据,并进行必要的清洗和处理,为后续的数据转换与写入打下坚实基础。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/S16.png~tplv-syqr462i7n-qeasy.image) ### 将源平台数据转换为金蝶云星辰V2API接口格式并写入目标平台 在数据集成的生命周期中,ETL(提取、转换、加载)过程是关键的一环。本文将详细探讨如何使用轻易云数据集成平台,将源平台的数据转换为金蝶云星辰V2API接口所能接收的格式,并最终写入目标平台。 #### 数据请求与清洗 在ETL流程中,首先要从源系统中提取数据并进行清洗。假设我们已经完成了这一步,接下来需要将清洗后的数据进行格式转换,以符合金蝶云星辰V2API接口的要求。 #### 数据转换与写入 根据元数据配置,我们需要将源平台的数据字段映射到金蝶云星辰V2API接口的相应字段。以下是具体的字段映射和转换逻辑: 1. **出库日期(bill_date)** - 类型:date - 描述:格式为`YYYY-MM-DD` - 源字段:`check_time` - 转换逻辑:直接映射源字段值。 2. **客户编码(customer_number)** - 类型:string - 描述:客户编码 - 源字段:`shop_no` - 转换逻辑:直接映射源字段值。 3. **单据编码(bill_no)** - 类型:string - 描述:单据编码 - 源字段:`order_no` - 转换逻辑:直接映射源字段值。 4. **分录明细行(material_entity)** - 类型:array - 描述:包含多个子字段 1. **商品编码(material_number)** - 类型:string - 描述:商品编码 - 源字段:`details_list.spec_no` - 转换逻辑:直接映射源字段值。 2. **价税合计(all_amount)** - 类型:string - 描述:价税合计 - 源字段:`details_list.right_cost` - 转换逻辑:直接映射源字段值。 3. **仓库编码(stock_number)** - 类型:string - 描述:仓库编码 - 源字段:`warehouse_no` - 转换逻辑:直接映射源字段值。 4. **数量(qty)** - 类型:float - 描述:数量 - 源字段:`details_list.goods_count` - 转换逻辑:直接映射源字段值。 5. **是否赠品(is_free)** - 类型:string - 描述:“true”或“false” - 源字段:`details_list.right_cost` - 转换逻辑: ```sql case '{{details_list.right_cost}}' when "0.0000" then 'true' else 'false' end ``` 6. **生产日期(kf_date)** - 类型: string - 描述: 生产日期 7. **单位id(unit_id)** - 类型: string - 描述: 单位id,通过MongoDB查询获取: ```sql _mongoQuery b88a7889-af5d-3efd-aac4-d4960eae6748 findField=content.base_unit_id where={"content.number":{"$eq":"{{details_list.spec_no}}"}} ``` #### 实际操作示例 假设我们有如下JSON格式的数据从源平台提取: ```json { "check_time": "2023-10-01", "shop_no": "CUST001", "order_no": "ORD12345", "warehouse_no": "WH001", "details_list": [ { "spec_no": "PROD001", "right_cost": "100.00", "goods_count": 10, "production_date": "2023-09-01" }, { "spec_no": "PROD002", "right_cost": "0.0000", "goods_count": 5, "production_date": "2023-09-05" } ] } ``` 通过上述元数据配置和转换逻辑,生成的目标平台数据格式如下: ```json { "bill_date": "2023-10-01", "customer_number": "CUST001", "bill_no": "ORD12345", "material_entity": [ { "material_number": "PROD001", "all_amount": "100.00", "stock_number": "WH001", "qty": 10, "is_free": false, // MongoDB查询结果填充unit_id,例如: // "_mongoQuery result for PROD001" // 此处假设查询结果为"UNIT001" // 实际操作中需替换为真实查询结果: // "_mongoQuery b88a7889-af5d-3efd-aac4-d4960eae6748 findField=content.base_unit_id where={\"content.number\":{\"$eq\":\"PROD001\"}}" // 查询结果示例: // {"content.base_unit_id":"UNIT001"} // 则unit_id填充为"UNIT001" // 单位id: // 此处假设查询结果为"UNIT001" // 实际操作中需替换为真实查询结果: "_mongoQuery result for PROD001" ![用友与WMS系统接口开发配置](https://pic.qeasy.cloud/T23.png~tplv-syqr462i7n-qeasy.image)