ETL技术在金蝶云星空和旺店通WMS数据对接中的应用

  • 轻易云集成顾问-孙传友
### 案例分享:金蝶云星空数据集成到旺店通WMS 在本次技术案例中,我们聚焦于如何通过轻易云数据集成平台,实现金蝶云星空的库存管理系统和旺店通WMS仓储管理系统之间的数据无缝对接。本案具体实施方案为“取消接口-旺店通组装拆卸入库”,主要任务是确保订单的高效、准确地同步,解决分页与限流问题以及处理不同系统间的数据格式差异。 首先,通过调用金蝶云星空提供的`executeBillQuery`接口,定时抓取最新订单数据。为了确保不漏单,我们配置了可靠性较高的调度器,以固定频率拉取并验证数据完整性。在处理过程中,我们特别关注了分页返回的数据包,采用合理限流策略避免接口超载。同时,在日常运行中,全程监控每个请求状态,并记录详细日志便于后续排查。 其次,为了满足批量及快速写入需求,大量抓取的订单数据需要经过规范化处理,即将其转换为旺店通WMS所需格式,再通过`WDT_WMS_ORDER_CANCEL`进行批量提交。在这个过程中,自定义映射关系至关重要,它不仅决定了字段匹配,更影响着业务逻辑的一致性和正确性。 此外,对于任何因网络或服务器异常导致的数据传输失败,本方案实现了一套完善的错误重试机制。每当检测到插入失败,会自动反复尝试直至成功,如多次重试依旧失败,则触发告警提醒运维人员介入调查,保证整个过程中的稳健可靠。此外,还会针对异常情况生成详细报告并存档以供参考。 最后,所有这些操作都在一个高度可视化的平台上完成,使得各环节都能够实时监控,从而提高透明度与效率。以下章节我们将深入介绍上述技术细节及代码实现方法,包括如何使用API、应对限流与分页问题及各种实际操作注意事项等。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/D19.png~tplv-syqr462i7n-qeasy.image) ### 调用源系统金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,并对获取的数据进行加工处理。 #### 接口调用配置 首先,我们需要配置元数据以便正确调用金蝶云星空的`executeBillQuery`接口。以下是元数据配置的关键部分: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FBillNo", "pagination": { "pageSize": 500 }, "idCheck": true, "operation": { "method": "merge", "field": "FBillNo", "bodyName": "items", "bodySum": ["FQty"], "header": ["FBillNo"], "body": ["FMaterialID_FNumber", "FQty", "FLOT_FNumber", "FProduceDate", "FEXPIRYDATE"] }, ... } ``` #### 请求参数解析 请求参数部分定义了需要从金蝶云星空接口获取的数据字段及其类型。以下是一些关键字段的解释: - `FID`: 实体主键 - `FBillNo`: 单据编号 - `FDocumentStatus`: 单据状态 - `FStockOrgId_FNumber`: 库存组织编号 - `FDate`: 日期 - `FBillTypeID`: 单据类型 - `FOwnerTypeIdHead`: 成品货主类型 - `FOwnerIdHead_FNumber`: 成品货主编号 这些字段将用于构建查询请求,以确保我们能够获取到所需的数据。 ```json { ... "request": [ {"field":"FID","label":"实体主键","type":"string","value":"FID"}, {"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"}, {"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"}, {"field":"FStockOrgId_FNumber","label":"库存组织","type":"string","value":"FStockOrgId.FNumber"}, {"field":"FDate","label":"日期","type":"string","value":"FDate"}, ... ], ... } ``` #### 分页与过滤条件 为了高效地处理大批量数据,分页和过滤条件是必不可少的。在本例中,我们设置了分页参数和过滤条件: ```json { ... "otherRequest":[ {"field":"Limit","label":"最大行数","type":"string","describe":"金蝶的查询分页参数","value":"{PAGINATION_PAGE_SIZE}"}, {"field":"StartRow","label":"开始行索引","type":"string","describe":"金蝶的查询分页参数","value":"{PAGINATION_START_ROW}"}, {"field":"FilterString","label":"过滤条件","type":"string","describe":"示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=","value": "FCANCELDATE>='{{MINUTE_AGO_30|datetime}}' AND FStockID.F_JZJ_CheckBox=1 AND FAFFAIRTYPE = 'Assembly'" }, ... ] } ``` 上述配置确保了我们只获取最近30分钟内取消状态为“Assembly”的相关记录,并且每次请求最多返回500条记录。 #### 数据加工与合并 在获取到原始数据后,需要对其进行加工和合并操作。这里我们使用了`merge`方法,通过单据编号(`FBillNo`)来合并相同单据的数据项,并对数量(`FQty`)进行汇总: ```json { ... "operation":{ "method": "merge", "field": "FBillNo", "bodyName": "items", "bodySum":["FQty"], ... } } ``` #### 实际应用案例 假设我们需要从金蝶云星空中获取某一特定时间段内所有已取消的组装拆卸入库单,并将这些数据整合到我们的系统中。通过上述配置,我们可以实现以下步骤: 1. **构建请求**:根据元数据配置构建HTTP POST请求,包含必要的字段和分页、过滤条件。 2. **发送请求**:向金蝶云星空API发送请求,获取响应数据。 3. **处理响应**:解析响应中的JSON数据,根据配置进行字段映射和合并操作。 4. **存储结果**:将处理后的数据写入目标系统或数据库。 通过这种方式,我们能够高效地从异构系统中获取并整合所需的数据,确保业务流程的顺畅运行。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/S8.png~tplv-syqr462i7n-qeasy.image) ### 数据集成与ETL转换:将源平台数据转化为旺店通WMSAPI接口格式 在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,转为目标平台所能够接收的格式,并最终写入目标平台。在本文中,我们将深入探讨如何利用轻易云数据集成平台,将源平台的数据转换为旺店通WMSAPI接口所能接收的格式,并通过实际案例展示这一过程。 #### API接口配置与元数据解析 在本案例中,我们需要将源平台的数据通过ETL转换后,写入到旺店通WMS系统。具体的API接口配置如下: ```json { "api": "WDT_WMS_ORDER_CANCEL", "method": "POST", "idCheck": true, "request": [ {"field": "warehouseCode", "label": "仓库编码", "type": "string", "value": "{FStockID_FNumber}"}, {"field": "orderCode", "label": "单据编码", "type": "string", "value": "{FBillNo}"}, {"field": "orderType", "label": "单据类型", "type": "string", "value": "SCRK"}, {"field": "cancelReason", "label": "取消原因", "type": "string"}, {"field": "extendProps", "label": "扩展属性", "type": "string"} ] } ``` #### 数据请求与清洗 首先,我们从源平台获取原始数据。假设我们已经完成了数据请求和清洗步骤,获得了如下结构的原始数据: ```json { "FStockID_FNumber": "WH001", "FBillNo": "ORD12345", // 其他字段... } ``` #### 数据转换 接下来,我们需要将这些原始数据按照API接口要求进行转换。根据元数据配置,每个字段都需要映射到对应的API请求字段。 - `warehouseCode` 映射到 `{FStockID_FNumber}` - `orderCode` 映射到 `{FBillNo}` - `orderType` 固定值为 `"SCRK"` - `cancelReason` 和 `extendProps` 可以根据业务需求添加相应内容 转换后的请求体结构如下: ```json { "warehouseCode": "{FStockID_FNumber}", "orderCode": "{FBillNo}", // 固定值 "orderType": "{SCRK}", // 动态生成或固定值 // 示例: 用户取消订单 // 示例: 扩展属性为空或包含其他信息 } ``` #### 数据写入目标平台 最后一步是将转换后的数据通过POST方法发送到旺店通WMSAPI接口。假设我们使用某种HTTP客户端库来实现这一操作,示例代码如下: ```python import requests # 转换后的数据 data = { 'warehouseCode': 'WH001', 'orderCode': 'ORD12345', 'orderType': 'SCRK', 'cancelReason': '用户取消订单', 'extendProps': '' } # API地址 url = 'https://api.wangdiantong.com/wdt_wms_order_cancel' # 发起POST请求 response = requests.post(url, json=data) # 检查响应状态码及内容 if response.status_code == 200: print('Data successfully written to WMS.') else: print('Failed to write data:', response.text) ``` #### 技术要点总结 1. **元数据配置解析**:通过解析元数据配置文件,明确每个字段的映射关系。 2. **ETL转换**:根据映射关系,将源平台的数据进行相应的字段转换。 3. **API请求**:使用HTTP客户端库(如requests)发起POST请求,将转换后的数据写入目标平台。 在整个过程中,轻易云数据集成平台提供了全生命周期管理和可视化操作界面,使得每一步骤都透明可见,从而大大提升了业务效率和透明度。 ![钉钉与ERP系统接口开发配置](https://pic.qeasy.cloud/T4.png~tplv-syqr462i7n-qeasy.image)