ETL转换与金蝶云星空API接口集成技术详解

  • 轻易云集成顾问-李国敏
### 调拨单旺店通到金蝶直接调拨入库——系统对接集成案例分享 在本次技术案例中,我们聚焦于如何成功实现旺店通·企业奇门的数据集成到金蝶云星空,以实现高效的调拨单数据管理。特别是,通过API接口`wdt.stock.transfer.query` 从旺店通·企业奇门获取数据,并利用金蝶云星空提供的批量写入API `batchSave` 快速完成从调拨到入库的全流程自动化。 #### 确保集成过程中的关键点: - **防漏单机制**:为了应对大规模数据处理过程中可能出现的数据丢失问题,我们设计了一套严密的防漏单机制,确保每一条调拨记录都能被准确无误地传递和处理。 - **快速、大规模写入**:通过优化网络请求及并发处理策略,实现了大量数据向金蝶云星空高效写入。这一部分特别依赖于轻易云平台强大的批量处理能力以及事务性操作控制。 - **定时可靠抓取**:采用定时任务自动抓取旺店通·企业奇门接口中的新订单数据,通过多线程分页抓取,解决分页及限流问题,保证高吞吐情况下的数据完整性与一致性。 #### 具体API调用和注意事项: 1. **调用`wdt.stock.transfer.query` 接口**: - 使用此接口,我们按预设时间间隔定期请求最新的调拨数据。 - 需特别关注该接口在返回结果分页方面的限制,与轻易云平台自带的分布式任务协同,使得即使面对大量数据,也能做到稳定与高效。 2. **将获取的数据映射至金蝶云星空格式**: - 旺店通·企业奇门原始返回的数据结构需要经过清洗、转换后才能匹配金蝶云星空要求,在这一过程中我们进行了详细且适配度极高的数据映射,为后一环节打下坚实基础。 3. **使用`batchSave` API进行批量写入**: - 数据准备好后,通过调用金蝶云星空提供的`batchSave` API,可一次性将整批转换后的库存信息推送进入系统,大幅提升工作效率并减少潜在风险。此外,还设置了完善异常捕捉与重试机制来保障整个流程更加健壮。 通过以上几项关键技术手段,本次系统对接方案不但实现了对于复杂业务场景需求的大力支持,更以其高度灵活、高性能、安全稳定等特性体现出了优秀的信息化服务水平。 ![数据集成平台可视化配置API接口](https://pic.qeasy.cloud/D38.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口wdt.stock.transfer.query获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stock.transfer.query`来获取调拨单数据,并对其进行初步加工。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。根据提供的元数据配置,可以看到该接口使用POST方法,主要参数包括调拨单编号(transfer_no)、调拨单ID(transfer_id)等。分页参数也被明确指定,每页返回的数据条数为100。 ```json { "api": "wdt.stock.transfer.query", "method": "POST", "number": "transfer_no", "id": "transfer_id", "pagination": { "pageSize": 100 }, "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}}" }, { ... } ], ... } ``` #### 参数详解与配置 1. **时间参数**: - `start_time` 和 `end_time` 用于指定查询的时间范围。这两个参数采用动态值,通过模板变量`{{LAST_SYNC_TIME|datetime}}`和`{{CURRENT_TIME|datetime}}`来设置。 2. **仓库参数**: - `from_warehouse_no` 和 `to_warehouse_no` 用于区分源仓库和目标仓库。这些字段是字符串类型,用于获取指定仓库的单据数据信息。 3. **状态参数**: - `status` 用于过滤不同状态的调拨单,如已取消、待审核、已审核等。默认情况下返回所有状态的单据,但在此配置中,我们仅关注部分出库、全部出库等状态。 4. **分页参数**: - `page_size` 和 `page_no` 用于控制分页,每页返回的数据条数设置为100。 #### 数据请求与清洗 在完成接口调用配置后,我们需要处理返回的数据。以下是一个典型的数据请求与清洗过程: 1. **发送请求**: 使用配置好的元数据,通过POST方法发送请求到旺店通·企业奇门接口。 2. **接收响应**: 接收并解析响应数据,确保数据格式正确无误。例如,检查返回的数据是否包含预期的字段,如调拨单编号、仓库编号、状态等。 3. **增量更新**: 利用时间参数实现增量更新,仅获取自上次同步以来的新数据。这可以通过比较当前时间和上次同步时间来实现。 4. **数据清洗**: 对接收到的数据进行初步清洗,包括去除无效记录、标准化字段格式等。例如,将日期格式统一为`yyyy-MM-dd HH:mm:ss`,确保所有记录的字段一致性。 #### 示例代码 以下是一个简单的Python示例代码,用于演示如何调用该接口并处理返回的数据: ```python import requests import json from datetime import datetime # 配置API请求参数 url = 'https://api.wangdian.cn/openapi2/wdt.stock.transfer.query' headers = {'Content-Type': 'application/json'} payload = { 'start_time': datetime.now().strftime('%Y-%m-%d %H:%M:%S'), 'end_time': datetime.now().strftime('%Y-%m-%d %H:%M:%S'), 'from_warehouse_no': 'WH001', 'to_warehouse_no': 'WH002', 'status': '50,60,70,90,42,46', 'page_size': 100, 'page_no': 0 } # 发送请求 response = requests.post(url, headers=headers, data=json.dumps(payload)) # 检查响应状态码 if response.status_code == 200: data = response.json() # 数据清洗与处理 for record in data['data']: # 示例:打印调拨单编号和状态 print(f"Transfer No: {record['transfer_no']}, Status: {record['status']}") else: print(f"Failed to fetch data: {response.status_code}") ``` 通过上述步骤,我们可以高效地从旺店通·企业奇门接口获取并加工调拨单数据,为后续的数据转换与写入奠定基础。 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/S28.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台:ETL转换与金蝶云星空API接口集成技术案例 在数据集成生命周期的第二步,我们将已经集成的源平台数据进行ETL(提取、转换、加载)转换,转为目标平台金蝶云星空API接口所能够接收的格式,并最终写入目标平台。本文将详细探讨这一过程中的技术细节和实现方法。 #### API接口配置与元数据解析 在本案例中,我们使用金蝶云星空的`batchSave` API接口,通过POST方法提交数据。以下是具体的元数据配置: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 20, "method": "batchArraySave" }, ... } ``` 该配置表明我们将以批量保存方式提交数据,并且每次操作最多包含20行记录。 #### 请求字段映射与转换 为了确保源平台的数据能够正确映射到金蝶云星空API所需的格式,我们需要对每个字段进行详细配置和转换。以下是几个关键字段的配置示例: 1. **单据编号(FBillNo)**: ```json { "field": "FBillNo", "label": "单据编号", "type": "string", "describe": "单据编号", "value": "_findCollection find order_no from 44277bf7-1e62-3604-ae02-aff72629a60c where src_order_no={transfer_no}" } ``` 此字段通过查找源平台中的`order_no`来获取对应的单据编号。 2. **单据类型(FBillTypeID)**: ```json { "field": "FBillTypeID", "label": "单据类型", "type": "string", "describe": "单据类型", ... } ``` 单据类型固定为`ZJDB11_SYS`,并通过`ConvertObjectParser`解析器进行对象转换。 3. **业务类型(FBizType)**: ```json { "field": "FBizType", ... "value": "NORMAL" } ``` 固定值为`NORMAL`,表示普通业务类型。 4. **调拨方向(FTransferDirect)**: ```json { ... "value": "GENERAL" } ``` 固定值为`GENERAL`,表示一般调拨方向。 #### 明细信息处理 对于复杂的数据结构,如明细信息,我们需要使用嵌套数组来表示: ```json { ... { "field":"FBillEntry", ... { ... {"field":"FMaterialId", ...}, {"field":"FCMKBarCode", ...}, {"field":"FQty", ...}, {"field":"FSrcStockId", ...}, {"field":"FDestStockId", ...}, {"field":"FNoteEntry", ...} } ... } } ``` 每个子字段都需要进行相应的解析和转换,例如物料编码(FMaterialId)通过解析器将源平台的物料编码转换为目标平台所需格式: ```json { ... { ... {"field":"FMaterialId", ... {"parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{{details_list.spec_no}}"} } ... } } ``` #### 提交与审核设置 在请求体中,我们还需要设置一些全局参数,例如业务对象表单ID和自动提交审核选项: ```json { ... { ... {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"STK_TransferDirect"}, {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"true"} ... } } ``` 这些参数确保了数据在提交后自动进入审核流程,提高了业务处理效率。 #### 数据验证与错误处理 为了确保数据的准确性和完整性,我们可以启用基础资料验证选项: ```json { ... { ... {"field":"IsVerifyBaseDataField","label":"验证基础资料","type":"bool","describe":"是否验证所有的基础资料有效性,布尔类,默认false(非必录)","value":"false"} ... } } ``` 此选项默认关闭,但在需要时可以启用,以确保所有基础资料都经过验证。 通过以上配置和技术实现,我们能够高效地将源平台的数据转换并写入到金蝶云星空,实现不同系统间的数据无缝对接。 ![金蝶与外部系统打通接口](https://pic.qeasy.cloud/T15.png~tplv-syqr462i7n-qeasy.image)