数据转换与集成:从旺店通到金蝶云

  • 轻易云集成顾问-吴伟
### 旺店通·旗舰奇门数据集成到金蝶云星空:系统对接实战案例 在企业管理中,如何高效、准确地实现不同系统间的无缝数据对接一直是技术团队的重要课题。本次我们将探讨一个实际运行的方案:“19 旺店通其他入库到金蝶云其他入库”。此项目旨在通过轻易云平台,实现旺店通·旗舰奇门的数据快速而精确地写入到金蝶云星空,从而提高业务效率。 #### 确保集成数据不漏单 使用API接口`wdt.wms.stockin.other.querywithdetail`从旺店通·旗舰奇门获取其他入库的数据时,我们采用定时可靠抓取机制,通过精确设定抓取频率,确保每一笔数据都能成功获取和处理。实时监控和日志记录功能为这一过程提供了双重保障,使得任何异常情况都能被及时发现并解决。 #### 处理分页与限流问题 由于旺店通·旗舰奇门接口可能存在分页和限流限制,在调用`wdt.wms.stockin.other.querywithdetail`接口时,我们设计了一套完善的分页处理策略,并结合限流控制机制,在保持高效数据拉取的同时避免触发API访问限制。这大大提升了系统稳定性和响应速度。 #### 数据格式转换与映射挑战 从旺店通提取的数据格式复杂多样,而金蝶云星空要求统一规范的数据输入格式。为此,我们引入了一套灵活且强大的自定义映射模块,能够根据不同字段类型和业务规则进行精准转化。同时,通过批量集成方式,将大量处理后的数据利用`batchSave` API 快速写入金蝶云星空,有效减少了传输时间,提高了整体效率。 #### 异常处理与错误重试机制 任何系统对接都会出现意外情况,为保证流程不中断,本次方案特别设计了针对各种异常情况的应急预案。当API调用失败或者返回错误信息时,自动启动错误重试机制,并记录详细日志供后续分析。这种稳健的异常处理策略,大幅度降低了因网络波动或临时故障带来的风险。 通过上述方法,我们成功实现了“19 旺店通其他入库到金蝶云其他入库”任务,不仅确保每笔数据完整无缺,还显著提升了整个业务链条上的操作透明度及执行效率。在下文中,我们将进一步深入剖析具体实施步骤及代码示例,让您更直观地了解这一集成过程。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/D25.png~tplv-syqr462i7n-qeasy.image) ### 调用旺店通·旗舰奇门接口获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用旺店通·旗舰奇门接口`wdt.wms.stockin.other.querywithdetail`,并对获取的数据进行初步加工。 #### 接口调用配置 首先,我们需要配置接口调用的元数据。根据提供的元数据配置,我们可以看到该接口使用`POST`方法,并且包含分页参数和业务参数两大类请求字段。 ```json { "api": "wdt.wms.stockin.other.querywithdetail", "method": "POST", "number": "order_no", "id": "stockin_id", "idCheck": true, "request": [ { "field": "pager", "label": "分页参数", "type": "object", "children": [ { "field": "page_size", "label": "分页大小", "type": "string", "value": "50", "parent": "pager" }, { "field": "page_no", "label": "页号", "type": "string", "value": "1", "parent": "pager" } ] }, { "field": "params", "label": "业务参数", "type": "object", ... } ], ... } ``` #### 分页参数设置 分页参数用于控制每次请求返回的数据量和当前请求的页码。这里我们设置了每页返回50条记录,并从第一页开始请求: ```json { field: 'pager', label: '分页参数', type: 'object', children: [ { field: 'page_size', label: '分页大小', type: 'string', value: '50', parent: 'pager' }, { field: 'page_no', label: '页号', type: 'string', value: '1', parent: 'pager' } ] } ``` #### 业务参数设置 业务参数主要包括时间范围、入库单状态和仓库编号等信息。这些参数用于过滤和查询特定条件下的入库单数据: ```json { field: 'params', label: '业务参数', type: 'object', children: [ { field: 'start_time', label: '开始时间', type: 'string', describe: '仓库编号', value: '{{LAST_SYNC_TIME|datetime}}', parent: 'params' }, { field: 'end_time', label: '结束时间', type: 'string', describe: '入库单号', value: '{{CURRENT_TIME|datetime}}', parent: 'params' }, { field: 'status', label: '入库单状态', type: 'string', describe: '', value: '80', parent:'params' }, { field:'warehouse_no','label':'仓库编号','type':'string','describe':'','parent':'params'}, ... ] } ``` #### 数据请求与清洗 在完成接口调用配置后,我们可以通过轻易云平台发起请求,获取原始数据。由于该平台支持全异步操作,可以有效提高数据处理效率。 获取到的数据通常是未经清洗的原始数据,需要进行初步加工。例如,我们可能需要过滤掉某些不符合条件的数据,或者对某些字段进行格式转换。 以下是一个简单的数据清洗示例: ```python def clean_data(raw_data): cleaned_data = [] for record in raw_data: if record['status'] == '80': # 筛选状态为80的记录 cleaned_record = { # 提取并重命名必要字段 'order_number': record['order_no'], ... } cleaned_data.append(cleaned_record) return cleaned_data ``` #### 数据转换与写入 在完成初步清洗后,下一步是将数据转换为目标系统所需的格式,并写入目标系统。这一步通常涉及字段映射、格式转换等操作。 例如,将清洗后的数据写入金蝶云其他入库模块: ```python def transform_and_write(cleaned_data): transformed_data = [] for record in cleaned_data: transformed_record = { # 转换为金蝶云所需格式 ... } transformed_data.append(transformed_record) # 调用金蝶云API写入数据 write_to_kingdee(transformed_data) ``` 通过以上步骤,我们完成了从调用源系统接口到初步加工数据的全过程。这一过程不仅确保了数据的准确性和完整性,也为后续的数据转换与写入奠定了基础。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/S26.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台将源平台数据转换并写入金蝶云星空API接口的技术案例 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL(提取、转换、加载)转换,最终写入目标平台——金蝶云星空API接口。以下是具体的技术实现过程。 #### 1. API接口配置 我们使用金蝶云星空的`batchSave` API接口,通过POST方法将数据写入目标系统。以下是该接口的基本配置: ```json { "api": "batchSave", "method": "POST", "idCheck": true, "operation": { "rowsKey": "array", "rows": 1, "method": "batchArraySave" }, "request": [ {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{order_no}"}, {"field":"FBillType","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"QTRKD01_SYS"}, {"field":"FStockOrgId","label":"库存组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"106"}, {"field":"F_KD_Assistant","label":"其他入库类型","type":"string","value":"QTRKLX012","parser":{"name":"ConvertObjectParser","params":"FNumber"}}, {"field":"FStockDirect","label":"库存方向","type":"string","value":"GENERAL"}, {"field":"FDate","label":"日期","type":"string","describe":"日期","value":"{{stockin_time|dateTime}}"}, {"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","describe":"多类别基础资料列表","value":"BD_OwnerOrg"}, {"field":"FOwnerIdHead","label":"货主","type":"","describe":"","parser":{"name":"","params":""},"value":""}, ... ], ... } ``` #### 2. 数据字段映射与转换 为了确保数据能够被金蝶云星空正确接收,我们需要对源平台的数据字段进行映射和转换。以下是关键字段的映射和转换逻辑: - **单据编号 (FBillNo)**: 从源平台获取订单号 `{order_no}`。 - **单据类型 (FBillType)**: 固定值 `QTRKD01_SYS`,通过 `ConvertObjectParser` 转换为目标系统所需格式。 - **库存组织 (FStockOrgId)**: 固定值 `106`,通过 `ConvertObjectParser` 转换。 - **其他入库类型 (F_KD_Assistant)**: 固定值 `QTRKLX012`,通过 `ConvertObjectParser` 转换。 - **日期 (FDate)**: 使用模板引擎将 `stockin_time` 字段格式化为目标系统所需的日期时间格式。 - **货主类型 (FOwnerTypeIdHead)**: 固定值 `BD_OwnerOrg`。 #### 3. 明细信息处理 明细信息部分需要特别注意,因为它包含了多个子字段,每个子字段都需要进行相应的映射和转换: ```json { "field": "FEntity", "label": "明细信息", "type": "array", "children": [ { "field": "FMATERIALID", "label": "物料编码", "type": "string", ... "value": "{{detail_list.spec_no}}" }, { ... ... ... } ] } ``` 在这个配置中,我们使用了模板引擎来动态生成每个明细项的数据。例如: - **物料编码 (FMATERIALID)**: 从 `detail_list.spec_no` 获取并转换为目标系统格式。 - **收货仓库 (FSTOCKID)**: 使用 `_findCollection` 方法从指定集合中查找对应仓库编号。 - **实收数量 (FQty)**: 从 `detail_list.goods_count` 获取实际收货数量。 - **备注 (FEntryNote)**: 动态生成备注信息,包括预入库转其他入库备注和日期时间。 #### 4. 提交与审核 在所有数据字段完成映射和转换后,我们需要将这些数据提交到金蝶云星空,并执行自动提交和审核操作: ```json { ... , { "field": "IsAutoSubmitAndAudit", ... , ... , ... } ``` 这个配置项确保了数据在提交后会自动进行审核,减少了人工干预,提高了效率。 #### 总结 通过以上步骤,我们成功地将源平台的数据进行了ETL转换,并通过轻易云数据集成平台写入到了金蝶云星空API接口中。整个过程涵盖了数据字段的映射、转换以及最终的数据提交与审核,确保了数据的一致性和准确性。 ![金蝶与WMS系统接口开发配置](https://pic.qeasy.cloud/T12.png~tplv-syqr462i7n-qeasy.image)