ETL与API集成:通过轻易云实现旺店通到金蝶云的数据转换

  • 轻易云集成顾问-彭萍
### 调拨单旺店通到金蝶明细调拨和单品调拨的数据集成技术案例 在企业数字化背景下,系统对接与数据实时共享成为提升业务效率的关键需求。本篇文章将分享一个涉及将旺店通·企业奇门(以下简称 "旺店通")的数据集成到金蝶云星空的具体案例。我们主要探讨如何通过轻易云数据集成平台实现从抓取、处理到写入的全生命周期管理,以及应对大规模数据传输过程中遇到的问题和解决方案。 首先,我们来了解一下此次项目中使用的重要接口: - **旺店通获取数据API**:`wdt.stock.transfer.query` - **金蝶云星空写入数据API**:`batchSave` #### 一、确保集成过程中的不漏单问题 为了确保每一条记录都能准确无误地从旺店通转移至金蝶云星空,在设计上我们采用了定时任务机制,通过触发器定时可靠地调用`wdt.stock.transfer.query`接口,周期性抓取最新的调拨单信息。为避免在高并发情况下出现请求超时或失败导致的数据遗漏,还实施了一套完备的异常重试机制。据此,即便在网络波动或接口限流等情况下,也能够保障所有需要同步的数据全部成功提取。 #### 二、大量数据快速写入与批量处理策略 针对大规模的明细调拨和单品调拨信息,我们采用了分批次合并的方法进行处理。在拿到分页后的原始数据信息后,将其按一定规则批量整理,再通过调用金蝶云星空提供的 `batchSave` 接口进行集中式写入。这不仅提高了整个操作流程中的效率,同时也减少了频繁小批次操作可能带来的性能瓶颈。 #### 三、应对分页和限流问题 由于 API 调用过程中存在分页限制,以防止过大的请求给服务器造成压力,因此需特别注意分页参数的配置与合理控制。当一次性获取大量记录时,通过持续跟踪页码并动态调整页面大小,可有效减小每次获取的数据体积,从而缓冲网络负载,并降低接口返回错误率。此外,为应付可能出现的大量 API 请求限制情况,建立适当延迟以及重试机制也是必不可少的一环,这可以显著提高整体运行稳定性。 以上介绍仅是本技术案例的一部分概要内容,下文将进一步深入剖析更多详细步骤及配置策略,包括如何处理两端之间的数据格式差异,以及如何实现实时监控与日志记录等功能,为读者全面呈现一个完整、真正可行且高效的数据集成解决方案。 ![打通钉钉数据接口](https://pic.qeasy.cloud/D12.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·企业奇门接口wdt.stock.transfer.query获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·企业奇门接口`wdt.stock.transfer.query`,获取并加工调拨单数据,以实现与金蝶系统的无缝对接。 #### 接口调用配置 首先,我们需要配置元数据以正确调用`wdt.stock.transfer.query`接口。以下是关键的元数据配置项: ```json { "api": "wdt.stock.transfer.query", "method": "POST", "number": "transfer_no", "id": "transfer_id", "pagination": { "pageSize": 100 }, "idCheck": true, "condition": [ [ {"field":"type","logic":"eqv2","value":"1"}, {"field":"mode","logic":"eqv2","value":"0"}, {"field":"from_warehouse_no","logic":"notlike","value":"JS"}, {"field":"to_warehouse_no","logic":"notlike","value":"JS"} ], [ {"field":"type","logic":"eqv2","value":"1"}, {"field":"mode","logic":"eqv2","value":"2"}, {"field":"from_warehouse_no","logic":"notlike","value":"JS"}, {"field":"to_warehouse_no","logic":"notlike","value":"JS"} ] ], "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": "from_warehouse_no", "label": "源仓库", "type": "string", "describe": 用于获取指定仓库单据数据信息(不支持一次推送多个仓库编号)" }, { ... ``` #### 数据请求与清洗 在进行数据请求时,我们需要确保请求参数的准确性和完整性。以下是关键的请求参数: - `start_time` 和 `end_time`: 用于增量获取数据,分别表示开始时间和结束时间。 - `from_warehouse_no` 和 `to_warehouse_no`: 分别表示源仓库和目标仓库的唯一编码。 - `status`: 调拨单状态,这里我们默认只获取状态为90(调拨完成)的单据。 - `type` 和 `mode`: 分别表示调拨类型和调拨模式。 示例请求体如下: ```json { ... { ... { field: 'start_time', value: '2023-01-01 00:00:00' }, { field: 'end_time', value: '2023-01-31 23:59:59' }, ... } ``` #### 数据转换与写入 在成功获取到调拨单数据后,需要对其进行清洗和转换,以便写入目标系统(金蝶)。以下是一个简单的数据转换示例: ```python def transform_data(data): transformed_data = [] for record in data: transformed_record = { 'transfer_id': record['transfer_id'], 'transfer_no': record['transfer_no'], 'from_warehouse': record['from_warehouse_no'], 'to_warehouse': record['to_warehouse_no'], 'status': record['status'], 'items': [] } for item in record['items']: transformed_item = { 'item_code': item['item_code'], 'quantity': item['quantity'] } transformed_record['items'].append(transformed_item) transformed_data.append(transformed_record) return transformed_data ``` #### 分页处理 由于接口返回的数据量可能较大,我们需要进行分页处理。通过设置`page_size`和`page_no`参数,可以逐页获取数据: ```json { ... { field: 'page_size', value: '100' }, { field: 'page_no', value: '0' } } ``` 在处理分页时,需要循环调用接口直到所有页面的数据都被获取完毕。 #### 异常处理 在实际操作中,还需要考虑各种异常情况,如网络超时、接口返回错误等。以下是一个简单的异常处理示例: ```python try: response = requests.post(api_url, json=request_body) if response.status_code == 200: data = response.json() # 数据处理逻辑 except requests.exceptions.RequestException as e: print(f"Request failed: {e}") ``` 通过以上步骤,我们可以高效地调用旺店通·企业奇门接口`wdt.stock.transfer.query`,并对返回的数据进行清洗和转换,为后续的数据写入做好准备。这一过程不仅提高了数据集成的效率,也确保了数据的一致性和准确性。 ![如何对接企业微信API接口](https://pic.qeasy.cloud/S28.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台:ETL转换与金蝶云星空API接口集成案例 在数据集成过程中,将源平台的数据转换为目标平台所能接收的格式是关键步骤之一。本文将深入探讨如何利用轻易云数据集成平台,将旺店通调拨单的数据转换为金蝶云星空API接口所需的格式,并最终写入目标平台。 #### 元数据配置解析 首先,我们需要理解元数据配置中的各个字段及其作用。以下是对主要字段的详细解析: - **api**: "batchSave" - 指定调用的API名称。 - **method**: "POST" - 使用POST方法进行数据传输。 - **idCheck**: true - 启用ID检查,确保数据唯一性。 - **operation**: 定义批量操作的细节,如行键和方法。 #### 请求字段配置 请求字段配置定义了从源平台到目标平台的数据映射规则。以下是部分关键字段的解析: 1. **FBillNo(单据编号)** - **field**: "FBillNo" - **label**: "单据编号" - **type**: "string" - **describe**: "单据编号" - **value**: "{transfer_no}" 该字段将源平台中的`transfer_no`映射到目标平台中的`FBillNo`。 2. **FBillTypeID(单据类型)** - **field**: "FBillTypeID" - **label**: "单据类型" - **type**: "string" - **describe**: "单据类型" - **value**: "{mode}" - **mapping**: "635b7696f680c55dd60aad7f" - **mappingDirection**: "positive" - **parser**: {"name": "ConvertObjectParser", "params": "FNumber"} 该字段使用`ConvertObjectParser`将源平台中的`mode`转换为金蝶系统所需的格式,并进行正向映射。 3. **FDate(日期)** - **field**: "FDate" - **label**: "日期" - **type**: "string" - **describe**: "日期" - **value**: "{modified}" 将源平台中的修改日期`modified`映射到目标平台中的`FDate`。 #### 明细信息配置 明细信息(FBillEntry)包含多个子字段,每个子字段对应调拨单的具体明细项: 1. **FMaterialId(物料编码)** - **field**: "FMaterialId" - **label**: "物料编码" - **type**: "string" - **describe**: "基础资料" - **parser**: {"name": "ConvertObjectParser", "params": "FNumber"} - **value**: "{{details_list.spec_no}}" 2. **FQty(调拨数量)** - 同样地,将源平台中的数量字段`details_list.num`映射到目标平台中的调拨数量字段`FQty`。 3. 调出仓库和调入仓库分别通过以下配置实现: ```json { "field": "FSrcStockId", "label": "调出仓库", ... "value": "{from_warehouse_no}" }, { "field": "FDestStockId", ... "value": "{to_warehouse_no}" } ``` #### 其他请求参数 其他请求参数如表单ID、提交并审核等,通过以下配置进行设置: ```json { ... {"field":"FormId","label":"业务对象表单Id","type":"string","describe":"必须填写金蝶的表单ID如:PUR_PurchaseOrder","value":"STK_TransferDirect"}, {"field":"IsAutoSubmitAndAudit","label":"提交并审核","type":"bool","value":"true"}, ... } ``` #### 数据转换与写入流程 1. 数据请求与清洗:通过轻易云数据集成平台获取源系统旺店通的数据。 2. 数据转换:根据上述元数据配置,使用轻易云提供的可视化界面和内置解析器,将源数据转换为金蝶云星空API所需格式。 3. 数据写入:调用金蝶云星空API接口,将转换后的数据批量写入目标系统。 通过以上步骤,我们实现了从旺店通到金蝶云星空的数据无缝对接,确保了业务流程的顺畅运行。 ![电商OMS与ERP系统接口开发配置](https://pic.qeasy.cloud/T8.png~tplv-syqr462i7n-qeasy.image)