从金蝶到聚水潭:实现无缝ETL转换的技术策略

  • 轻易云集成顾问-张妍琪
### 金蝶-采购入库-->聚水潭-采购入库: 高效、无缝的数据对接案例分享 在企业运营管理中,实现系统间的高效对接和数据集成至关重要。本文将介绍如何利用轻易云数据集成平台,将金蝶云星空的采购入库数据高效地导入到聚水潭系统中,通过实践案例解析关键技术要点和实现机制。 为了完成这项复杂的任务,我们首先需要使用金蝶云星空提供的`executeBillQuery`接口来抓取采购入库的数据。由于金蝶云星空API存在分页和限流问题,需特别处理这些细节,以确保所有数据均能及时、准确地获取。同时,还要保证批量集成操作中的数据质量,不产生漏单现象。 接下来,我们将通过聚水潭开放的`/open/jushuitan/purchasein/upload`接口实现大量数据快速写入。在此过程中,需要处理两者之间的数据格式差异,并进行必要的数据转换。同时,为了实时监控整个流程并迅速响应可能出现的问题,我们配备了集中监控与告警系统,实施有效监控和异常检测机制。 在实际应用中,自定义转换逻辑也是一大亮点,使我们能够灵活应对业务需求。另外,通过可视化的数据流设计工具,使得每一步操作都更加直观透明。这不仅提升了效率,也极大简化了管理难度,确保每一个环节清晰易懂并便于维护。 ![如何对接用友BIP接口](https://pic.qeasy.cloud/D32.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口,以获取采购入库数据并进行初步加工。 #### 接口配置与请求参数 首先,我们需要了解`executeBillQuery`接口的基本配置和请求参数。根据提供的元数据配置,接口的主要参数如下: - **API名称**: `executeBillQuery` - **请求方法**: `POST` - **业务对象表单ID**: `STK_InStock` - **查询字段集合**: 通过`FieldKeys`指定 - **过滤条件**: 通过`FilterString`指定 - **分页参数**: 包括`Limit`, `StartRow`, `TopRowCount` #### 请求参数详解 1. **FieldKeys** - 该参数用于指定需要查询的字段集合。根据元数据配置,我们可以选择所需的字段,例如: ```json "FieldKeys": [ "FBillNo", "FInStockEntry_FEntryId", "FDate", "FSupplierId.FNumber", "FMaterialId.FNumber", "FRealQty" ] ``` - 这些字段包括单据编号、入库日期、供应商编码、物料编码和实收数量等关键信息。 2. **FilterString** - 用于设置查询过滤条件。例如,我们可以根据单据状态和审核日期进行过滤: ```json "FilterString": "FDocumentStatus='C' AND FApproveDate>='2023-01-01'" ``` 3. **分页参数** - 为了处理大数据量,分页是必要的。我们可以设置每页返回的最大行数(Limit)和开始行索引(StartRow): ```json "Limit": 100, "StartRow": 0 ``` #### 请求示例 基于上述配置,一个完整的请求示例如下: ```json { "api": "executeBillQuery", "method": "POST", "FormId": "STK_InStock", "FieldKeys": [ "FBillNo", "FInStockEntry_FEntryId", "FDate", "FSupplierId.FNumber", "FMaterialId.FNumber", "FRealQty" ], "FilterString": "FDocumentStatus='C' AND FApproveDate>='2023-01-01'", "Limit": 100, "StartRow": 0 } ``` #### 数据清洗与转换 获取到原始数据后,需要对其进行清洗和转换,以便后续处理。以下是几个关键步骤: 1. **字段映射** - 将金蝶返回的数据字段映射到目标系统所需的字段。例如,将`FBillNo`映射为目标系统中的订单编号。 2. **数据格式转换** - 将日期格式从金蝶特定格式转换为目标系统所需格式。 - 将数值类型的数据进行单位转换或精度调整。 3. **数据校验** - 对关键字段进行校验,如确保单据编号唯一性、实收数量为正数等。 #### 示例代码 以下是一个简单的数据清洗与转换示例代码: ```python def clean_and_transform(data): cleaned_data = [] for entry in data: transformed_entry = { 'order_no': entry['FBillNo'], 'entry_id': entry['FInStockEntry_FEntryId'], 'date': transform_date(entry['FDate']), 'supplier_code': entry['FSupplierId.FNumber'], 'material_code': entry['FMaterialId.FNumber'], 'quantity': float(entry['FRealQty']) } if validate_entry(transformed_entry): cleaned_data.append(transformed_entry) return cleaned_data def transform_date(date_str): # 假设输入格式为 YYYY-MM-DD,输出格式为 DD/MM/YYYY return date_str.split('-')[2] + '/' + date_str.split('-')[1] + '/' + date_str.split('-')[0] def validate_entry(entry): return entry['quantity'] > 0 and len(entry['order_no']) > 0 ``` 通过上述步骤,我们能够有效地调用金蝶云星空接口获取采购入库数据,并对其进行初步加工,为后续的数据写入和进一步处理奠定基础。这种方法不仅提高了数据处理效率,还确保了数据质量和一致性。 ![用友与WMS系统接口开发配置](https://pic.qeasy.cloud/S4.png~tplv-syqr462i7n-qeasy.image) ### 轻易云数据集成平台生命周期的第二步:ETL转换与写入聚水潭API接口 在数据集成过程中,将源平台的数据转换为目标平台可接收的格式是关键步骤之一。本文将深入探讨如何利用轻易云数据集成平台,将金蝶的采购入库数据通过ETL转换,最终写入聚水潭的采购入库API接口。 #### API接口配置与元数据解析 首先,我们需要理解聚水潭采购入库API接口的元数据配置。以下是该接口的详细配置: ```json { "api": "/open/jushuitan/purchasein/upload", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field": "is_confirm", "label": "是否自动确认单据", "type": "bool", "value": "false"}, {"field": "excute_confirming", "label": "是否自动审核", "type": "string", "value": "false"}, {"field": "po_id", "label": "采购单编号", "type": "int", "value": "_findCollection find primaryWriteback.po_id from 7389e0ad-45f1-37e3-8887-5770febb696a where FBillNo={FSRCBillNo}"}, {"field": "wms_co_id", "label": "仓库", "type": "string", "value": "_findCollection find FJSTID from a4574865-558b-3258-8fe8-ae7e5bfeb538 where FNumber={FStockId_FNumber} F_PAEZ_Assistant=657fa9b5c75fe3"}, {"field": "supplier_id", "label": "供应商id", "type": "int", "value":"_findCollection find supplier_id from 28c9f45b-ce65-37f2-b5af-ee9ff8760e99 where supplier_code={FSupplierId_FNumber}"}, {"field":"external_id","label":"外部采购单号","type":"string","describe":"单据上传成功之后对应页面外部单号","value":"{FBillNo}"}, {"field":"tax_rate","label":"税率","type":"float","value":"_function round({{list.FEntryTaxRate}}/100,2)"}, {"field":"items","label":"明细列表","type":"array","value":"list", "children":[ {"field":"sku_id","label":"商品编码","type":"string","value":"{FMaterialId_FNumber}"}, {"field":"qty","label":"数量","type":"int","value":"{{list.FRealQty}}"}, {"field":"tax_rate","label":"税率","type":"float","value":"_function round({FEntryTaxRate}/100,2)"}, {"field":"remark","label":"单据体备注","type":"string","value":"{FBillNo}"} ] }, {"field":"remark","label":"单据头备注","type":"string","value":"{FBillNo}"} ], ... } ``` #### 数据请求与清洗 在进行ETL转换之前,首先要从源系统(金蝶)获取原始数据,并进行必要的数据清洗和准备。这一步通常包括以下几个步骤: 1. **数据提取**:从金蝶系统中提取采购入库相关的数据,如采购单编号、供应商信息、仓库信息等。 2. **数据清洗**:对提取的数据进行清洗,确保数据完整性和准确性。例如,去除重复记录、处理缺失值等。 3. **数据映射**:根据目标平台(聚水潭)的需求,将源系统字段映射到目标系统字段。 #### 数据转换与写入 接下来,我们重点讨论如何将清洗后的数据进行转换,并通过API接口写入聚水潭系统。 1. **字段映射与转换**: - `po_id`(采购单编号):通过 `_findCollection` 方法从金蝶系统中获取对应的 `po_id`。 - `wms_co_id`(仓库):同样使用 `_findCollection` 方法,根据仓库编号获取对应的 `wms_co_id`。 - `supplier_id`(供应商ID):根据供应商代码获取对应的 `supplier_id`。 - `tax_rate`(税率):使用 `_function round()` 方法将税率转换为小数形式。 - `items`(明细列表):包括商品编码、数量、税率和备注等字段。 2. **构建请求体**: 根据上述字段映射和转换结果,构建符合聚水潭API接口要求的请求体。示例如下: ```json { “is_confirm”: false, “excute_confirming”: false, “po_id”: 123456, “wms_co_id”: “WH001”, “supplier_id”: 78910, “external_id”: “PO20231001”, “tax_rate”: 0.13, “items”: [ { “sku_id”: “SKU001”, “qty”: 100, “tax_rate”: 0.13, “remark”: “PO20231001” } ], “remark”: “PO20231001” } ``` 3. **发送请求**: 使用POST方法,将构建好的请求体发送到 `/open/jushuitan/purchasein/upload` 接口,实现数据写入。确保在发送请求前进行必要的验证和错误处理,以提高系统稳定性和可靠性。 ```python import requests url = 'https://api.jushuitan.com/open/jushuitan/purchasein/upload' headers = {'Content-Type': 'application/json'} data = { # 构建好的请求体 } response = requests.post(url, headers=headers, json=data) if response.status_code == 200: print("Data uploaded successfully") else: print("Failed to upload data:", response.text) ``` 通过以上步骤,我们实现了从金蝶到聚水潭的数据ETL转换和写入。轻易云数据集成平台提供了强大的元数据配置功能,使得复杂的数据集成任务变得更加简便高效。在实际操作中,还需根据具体业务需求进行相应调整,以确保数据准确性和一致性。 ![企业微信与OA系统接口开发配置](https://pic.qeasy.cloud/T24.png~tplv-syqr462i7n-qeasy.image)