轻易云平台在旺店通和金蝶云星空采购数据集成中的应用

  • 轻易云集成顾问-吕修远
### 旺店通·企业奇门数据集成到金蝶云星空:采购入库单对接实例分享 在本次技术案例中,我们将详细探讨如何通过轻易云数据集成平台,实现旺店通·企业奇门的采购入库单(接口:wdt.stockin.order.query.purchase)与金蝶云星空系统(接口:batchSave)的高效对接。本文着重于API接口调用、高并发环境下的数据处理以及异常处理机制,帮助读者了解如何将复杂的业务流程简化为高效、透明且可监控的数据流。 首先,在实现这个系统对接的过程中,最关键的是确保从旺店通·企业奇门获取的数据不漏单。对此,可以利用定时可靠的抓取策略,通过定时任务周期性地调用`wdt.stockin.order.query.purchase`接口,从而保证及时读取最新的采购入库单数据,并避免由于网络或其他短暂故障导致的数据遗漏问题。此外,为了应对可能存在的大量数据,我们需要考虑分页和限流问题,这可以通过控制API请求参数中的分页大小来优化。 另外,在将采集到的大量数据批量写入到金蝶云星空时,需要特别关注两系统之间的数据格式差异。为此,规划了一系列映射规则及预处理逻辑,以便在导入前进行必要的数据转换。这部分工作既包括简单字段类型的转换,也涉及更复杂的自定义映射关系和业务逻辑匹配。 最后,由于集成过程中的任何环节都可能出现非预期状况,比如网络抖动、API限流等,因此必须设计一套健全的异常处理与错误重试机制。这不仅能确保每一个有效订单最终被成功传递至目标系统,而且能够提供详细日志记录以供实时监控和后续审计分析。在这方面,通过轻易云平台内置的一些工具,可以方便快捷地设置报警规则并自动触发相应恢复措施,大大提升了整体集成方案的稳定性与可靠性。 以上是关于此次技术案例开头部分的重要介绍,在随后的具体实施章节中,将进一步详解各个步骤及其代码实现细节。 ![用友与CRM系统接口开发配置](https://pic.qeasy.cloud/D28.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口wdt.stockin.order.query.purchase获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stockin.order.query.purchase`,以获取采购入库单数据并进行初步加工。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。以下是该接口的元数据配置: ```json { "api": "wdt.stockin.order.query.purchase", "effect": "QUERY", "method": "POST", "number": "order_no", "id": "stockin_id", "name": "order_no", "idCheck": true, "request": [ { "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": "status", "label": "状态", "type": "string", "describe": "入库单状态 10已取消20编辑中25待价格确认30待审核60待结算80已完成(默认80)", "value":"80" }, { "field":"src_order_no", ... } ], ... } ``` #### 请求参数详解 1. **start_time** 和 **end_time**: - `start_time`和`end_time`用于指定增量获取数据的时间范围。通过设置这两个参数,可以确保每次只获取自上次同步以来的新数据。 - `{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`分别代表上次同步时间和当前时间。 2. **status**: - 状态字段用于过滤不同状态的入库单。默认值为80,即只获取已完成的入库单。 3. **src_order_no** 和 **warehouse_no**: - `src_order_no`用于指定上层单据编号,如果传递该字段,可以不传递开始时间和结束时间。 - `warehouse_no`用于指定仓库编号,以便获取特定仓库的数据。 4. **order_no**: - 单号字段用于指定特定的入库单号。 5. **分页参数**: - `page_size`和`page_no`用于控制分页,每页返回的数据条数和页码。 #### 数据请求与清洗 在配置好请求参数后,我们可以通过轻易云平台发送POST请求到旺店通·企业奇门接口。以下是一个示例请求: ```json { ... { ... { ... } } } ``` 请求成功后,将返回包含采购入库单信息的数据集。接下来,我们需要对这些数据进行清洗和初步加工,以便后续的数据转换与写入。 #### 数据清洗步骤 1. **字段映射与转换**: - 将返回的数据字段映射到目标系统所需的字段。例如,将返回的`order_no`映射为目标系统中的订单编号字段。 2. **数据格式化**: - 确保日期、金额等字段符合目标系统要求的格式。例如,将日期格式从“yyyy-MM-dd HH:mm:ss”转换为目标系统所需的格式。 3. **异常处理**: - 对于缺失或异常的数据进行处理,例如填充默认值或记录日志以便后续排查。 #### 示例代码 以下是一个示例代码片段,用于展示如何通过Python脚本实现上述过程: ```python import requests import json from datetime import datetime # 设置请求URL和头部信息 url = 'https://api.wangdian.cn/openapi2/wdt.stockin.order.query.purchase' 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', '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() # 数据清洗与转换 cleaned_data = [] for item in data['orders']: cleaned_item = { '订单编号': item['order_no'], '仓库编号': item['warehouse_no'], # 更多字段映射... } cleaned_data.append(cleaned_item) # 输出清洗后的数据 print(json.dumps(cleaned_data, indent=4, ensure_ascii=False)) else: print(f"请求失败,状态码: {response.status_code}") ``` 通过上述步骤,我们成功地从旺店通·企业奇门接口获取了采购入库单数据,并进行了初步清洗和加工,为后续的数据转换与写入奠定了基础。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/S27.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台:将采购入库单数据转换并写入金蝶云星空API接口 在轻易云数据集成平台上,完成数据集成生命周期的第二步,即将已经集成的源平台数据进行ETL转换,并写入目标平台金蝶云星空API接口,是一个关键环节。本文将详细探讨如何通过元数据配置,将旺店通的采购入库单数据转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。 #### 数据请求与清洗 在进行ETL转换之前,首先需要从源系统(旺店通)获取采购入库单的数据。假设我们已经完成了数据请求与清洗阶段,获得了如下结构的数据: ```json { "order_no": "PO123456", "provider_no": "P001", "check_time": "2023-10-01", "operator_name": "张三", "warehouse_no": "WH001", "details_list": [ { "spec_no": "M001", "goods_count": 100, "price": 10.5, "tax_price": 11.5, "tax": 13, "remark": "" }, { "spec_no": "M002", "goods_count": 200, "price": 0, "tax_price": 0, "tax": 13, "remark": "" } ] } ``` #### 数据转换与写入 为了将上述数据转换为金蝶云星空API接口所能接收的格式,我们需要按照元数据配置进行映射和转换。以下是详细的元数据配置解析及其应用。 ##### 元数据配置解析 ```json { ... } ``` 1. **基本字段映射** - `FBillTypeID`: 单据类型,固定值`RKD01_SYS`。 - `FBillNo`: 单据编号,对应源数据中的`order_no`。 - `FSupplierId`: 供应商,对应源数据中的`provider_no`,使用`ConvertObjectParser`进行解析。 - `FDate`: 入库日期,对应源数据中的`check_time`。 - `FBZ`: 固定值“旺店通采购入库单”。 - `FZDR`: 制单人,对应源数据中的`operator_name`。 2. **明细信息映射** 明细信息包含多个字段,每个字段都需要对应到源数据中的具体值: - `FMaterialId`: 物料编码,对应源数据中明细列表的`spec_no`,使用`ConvertObjectParser`进行解析。 - `FRealQty`: 实收数量,对应源数据中明细列表的`goods_count`。 - `FPrice`: 单价,对应源数据中明细列表的`price`。 - `FStockId`: 仓库,对应源数据中的`warehouse_no`,使用`ConvertObjectParser`进行解析。 - `FGiveAway`: 是否赠品,通过判断价格是否为0来确定,使用CASE语句实现。 - `FTaxPrice`: 含税单价,对应源数据中明细列表的`tax_price`。 - `FSHUILV`: 旺店通税率,对应源数据中明细列表的`tax`。 - `FOWNERID`: 固定值“100”。 - `FNote`: 备注,对应源数据中明细列表的`remark`. 3. **其他请求参数** 除了上述字段外,还需要一些额外的请求参数来确保接口调用成功: - `FormId`: 固定值“STK_InStock”。 - `Operation`: 固定值“Save”。 - `IsAutoSubmitAndAudit`: 固定值“true”。 - `IsVerifyBaseDataField`: 固定值“false”。 - `SubSystemId`: 固定值“21”。 ##### 数据组装与写入 根据上述元数据配置,我们可以组装出符合金蝶云星空API接口要求的数据结构: ```json { "FormId":"STK_InStock", "Operation":"Save", ... } ``` 通过HTTP POST方法,将上述组装好的JSON对象发送到金蝶云星空API接口,实现最终的数据写入。 #### 总结 通过轻易云数据集成平台,我们能够高效地将旺店通的采购入库单数据转换为金蝶云星空API接口所能接收的格式,并成功写入目标平台。这不仅提高了系统间的数据流动性和一致性,还极大地提升了业务处理效率。 ![打通企业微信数据接口](https://pic.qeasy.cloud/T26.png~tplv-syqr462i7n-qeasy.image)