将聚水潭盘点单转换为金蝶云星辰V2盘亏单的ETL案例

  • 轻易云集成顾问-冯潇
### 聚水潭到金蝶云星辰V2的系统对接集成方案分享 在本文中,我们将深入探讨通过轻易云数据集成平台实现聚水潭数据高效、可靠地对接至金蝶云星辰V2的具体方法。在实际运行案例中,通过聚水潭-盘点单到星辰-盘亏单的数据集成,解决了多种技术挑战,确保业务流程顺畅无阻。 首先,为了确保从聚水潭获取的数据不漏单,我们需要定时可靠地抓取聚水潭接口数据。我们调用的是聚水潭提供的API接口`/open/inventory/count/query`,通过设置周密的调度计划,实现自动化批量抓取,并处理分页和限流问题。这一过程极大提升了数据采集的效率和完成度。 其次,在大量数据快速写入金蝶云星辰V2方面,我们使用了其特定API `/jdy/v2/scm/inv_check_loss_bill`。为了应对两者间存在的数据格式差异和增强兼容性,我们设计了一套定制化的数据映射规则,从而保证每条记录都能准确传输并存储于目标系统。此外,还引入异常处理与错误重试机制,以预防不可控因素导致的不一致性和丢失风险,这使得整体流程更加稳健。 同时,为确保整个过程透明可视并留有痕迹,实施过程中结合实时监控与详细日志记录,不仅可以快速定位问题,还能为后续优化积累宝贵经验。 最终,通过这些技术手段,实现了两个平台之间高效、安全且灵活的数据交互,对公司内部管理系统进行了重要升级。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/D32.png~tplv-syqr462i7n-qeasy.image) ### 调用聚水潭接口获取并加工数据 在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用聚水潭的`/open/inventory/count/query`接口,并对返回的数据进行加工处理。 #### 接口配置与请求参数 首先,我们需要配置聚水潭接口的元数据。以下是该接口的元数据配置: ```json { "api": "/open/inventory/count/query", "effect": "QUERY", "method": "POST", "number": "io_id", "id": "io_id", "idCheck": true, "request": [ {"field": "page_index", "label": "第几页", "type": "string", "describe": "第几页,从第一页开始,默认1", "value": "1"}, {"field": "page_size", "label": "每页多少条", "type": "string", "describe": "每页多少条,默认30,最大50", "value": "10"}, {"field": "modified_begin", "label": "修改起始时间", "type": "string", "describe": "修改起始时间,和结束时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空", "value":"{{DAYS_AGO_1|datetime}}"}, {"field": "modified_end", "label":"修改结束时间","type":"string","describe":"修改结束时间,和起始时间必须同时存在,时间间隔不能超过七天,与线上单号不能同时为空","value":"{{CURRENT_TIME|datetime}}"}, {"field":"status","label":"单据状态","type":"string","describe":"单据状态,Confirmed=生效,WaitConfirm待审核,Creating=草拟,Archive=归档,Cancelled=作废","value":"Confirmed"}, {"field":"wms_co_id","label":"仓库编号","type":"string","value":"13599842"} ], ... } ``` 在这个配置中,我们定义了多个请求参数,包括分页信息、修改时间范围、单据状态以及仓库编号。这些参数确保我们能够准确地从聚水潭系统中获取所需的盘点单数据。 #### 数据请求与清洗 通过上述配置,我们可以发送POST请求到聚水潭的`/open/inventory/count/query`接口。假设我们已经成功获取到响应数据,接下来需要对这些数据进行清洗和过滤。 根据元数据中的条件配置,我们需要筛选出满足以下条件的数据: - `items.qty < 0` - `warehouse`字段值在指定仓库列表中 具体的条件如下: ```json { ... "condition_bk":[[{"field":"items.qty","logic":"lt","value":"0"}]], ... “condition”:[[{"field":"items.qty","logic":"lt","value":"0"},{"field":"warehouse","logic":"in","value":"恩比仓主仓,恩比仓销退仓,恩比仓次品仓,恩比仓报废仓,恩比仓返修仓,恩比仓进货仓"}]] } ``` 这些条件确保我们只处理库存数量小于零且位于特定仓库中的盘点单。 #### 数据转换与写入 在清洗完成后,我们需要将符合条件的数据转换为目标系统所需的格式,并写入目标系统。在本案例中,我们将盘点单转换为星辰系统中的盘亏单。 假设目标系统星辰要求的数据格式如下: ```json { “loss_order_id”: “123456”, “warehouse_code”: “13599842”, “items”: [ { “item_code”: “ITEM001”, “loss_qty”: -10 }, ... ] } ``` 我们需要将聚水潭返回的数据映射到上述格式,并通过轻易云平台提供的API写入星辰系统。 #### 实际操作示例 以下是一个实际操作示例,通过轻易云平台调用聚水潭接口并处理返回的数据: 1. **发送请求**: ```python import requests import datetime url = 'https://api.jushuitan.com/open/inventory/count/query' headers = {'Content-Type': 'application/json'} payload = { 'page_index': '1', 'page_size': '10', 'modified_begin': (datetime.datetime.now() - datetime.timedelta(days=1)).strftime('%Y-%m-%d %H:%M:%S'), 'modified_end': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'), 'status': 'Confirmed', 'wms_co_id': '13599842' } response = requests.post(url, json=payload, headers=headers) data = response.json() ``` 2. **清洗与过滤**: ```python filtered_data = [] for record in data['records']: if record['items']['qty'] < 0 and record['warehouse'] in ['恩比仓主仓', '恩比仓销退仓', ...]: filtered_data.append(record) ``` 3. **转换与写入**: ```python loss_orders = [] for record in filtered_data: loss_order = { 'loss_order_id': record['io_id'], 'warehouse_code': record['wms_co_id'], 'items': [{'item_code': item['item_code'], 'loss_qty': item['qty']} for item in record['items']] } loss_orders.append(loss_order) # 假设有一个函数write_to_xingchen_system用于写入星辰系统 for order in loss_orders: write_to_xingchen_system(order) ``` 通过以上步骤,我们实现了从聚水潭获取盘点单数据、进行清洗过滤、转换为目标格式并写入星辰系统的全过程。这一过程充分利用了轻易云平台提供的强大功能,使得异构系统间的数据集成变得高效且透明。 ![金蝶与MES系统接口开发配置](https://pic.qeasy.cloud/S19.png~tplv-syqr462i7n-qeasy.image) ### 数据集成案例:将聚水潭盘点单转换为金蝶云星辰V2盘亏单 在数据集成过程中,ETL(Extract, Transform, Load)是关键步骤之一。本文将深入探讨如何使用轻易云数据集成平台,将聚水潭的盘点单数据进行ETL转换,并通过金蝶云星辰V2 API接口写入目标平台。 #### 元数据配置解析 在进行ETL转换之前,首先需要理解元数据配置。以下是用于将聚水潭盘点单转换为金蝶云星辰V2盘亏单的元数据配置: ```json { "api": "/jdy/v2/scm/inv_check_loss_bill", "effect": "EXECUTE", "method": "POST", "number": "id", "id": "id", "name": "id", "idCheck": true, "request": [ { "field": "bill_date", "label": "单据日期", "type": "string", "describe": "单据日期", "value": "{io_date}" }, { "field": "bill_no", "label": "单据编码", "type": "string", "describe": "单据编码", "value": "{io_id}" }, { "field": "operation_key", "label": "操作类型", "type": "string", "describe": "操作类型,审核audit、提交submit", "value": "audit" }, { "field": "remark", ... } ], ... } ``` #### 数据请求与清洗 在ETL流程中,首先从源平台(聚水潭)请求数据,并对数据进行清洗和初步处理。这一步骤确保我们获取的数据是准确且一致的,为后续的数据转换打下基础。 #### 数据转换与写入 1. **API接口定义**: - `api`字段定义了目标API的路径:`/jdy/v2/scm/inv_check_loss_bill`。 - `method`字段指定了HTTP方法为POST。 - `effect`字段表示操作类型为EXECUTE。 2. **请求参数映射**: - `bill_date`(单据日期):映射到聚水潭的`io_date`字段。 - `bill_no`(单据编码):映射到聚水潭的`io_id`字段。 - `operation_key`(操作类型):固定值为`audit`,表示审核操作。 3. **商品分录处理**: - `material_entity`字段是一个数组,包含多个商品分录信息。 - `material_id`:通过 `_findCollection find id from a481458e-26be-330f-a8ab-69c01d1837e1 where number={{list.items_sku_id}}` 查询商品ID。 - `qty`:使用函数 `_function ABS( {items_qty} )` 获取绝对值。 - `unit_id`:固定值为4。 - `stock_id`:通过 `_findCollection find id from 6346526e-1f90-33cf-8c77-05d1fc7d9134 where name={warehouse}` 查询仓库ID。 4. **组装请求体**: 根据元数据配置,将清洗后的数据组装成符合目标API接口要求的JSON格式。例如: ```json { ... { ... { ... { ... { ... { ... { ... [ { ... [ { ... [ { ... [ { ... [ { ... [ { ... [ { ... [ { ... [ { ... [ { ... [ { bill_date: '2023-10-01', bill_no: 'PD123456', operation_key: 'audit', remark: '', material_entity: [ { material_id: '12345', qty: '10', unit_id: '4', stock_id: '67890' } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } ] } } ``` 5. **发送请求**: 使用轻易云平台提供的HTTP客户端,将组装好的JSON请求体发送到金蝶云星辰V2 API接口,并处理返回结果。 #### 实时监控与错误处理 在整个ETL过程中,通过轻易云平台实时监控数据流动和处理状态。如果出现错误,可以根据日志信息快速定位并修复问题,确保数据集成过程顺利完成。 通过上述步骤,我们成功实现了从聚水潭到金蝶云星辰V2的盘点单到盘亏单的数据集成。这不仅提高了业务效率,还确保了数据的一致性和准确性。 ![轻易云数据集成平台金蝶集成接口配置](https://pic.qeasy.cloud/T6.png~tplv-syqr462i7n-qeasy.image)