ETL转换:将金蝶采购入库单数据成功写入聚水潭

  • 轻易云集成顾问-谢楷斌
### 金蝶云星空数据集成到聚水潭的技术案例分享 在本次系统对接项目中,我们将金蝶云星空的采购入库单数据通过轻易云数据集成平台无缝传输到聚水潭中的其他入库单模块。这个集成案例不仅突出了高吞吐量的数据写入能力,而且确保了整个过程的实时监控与异常处理机制,显著提升了业务运行效率和透明度。 首先,为了从金蝶云星空获取采购入库单的数据,我们调用了其提供的`executeBillQuery`接口,通过定时任务批量抓取符合条件的数据。在此过程中,特别注意分页和限流问题,以避免接口请求过载并保证稳定性。同时,针对API使用情况进行实时监控和日志记录,有效掌握每一次数据抓取操作。 其次,在将获取到的数据写入聚水潭之前,需要解决两者之间的数据格式差异。我们利用自定义数据转换逻辑,对原始数据结构进行了必要调整,使得它们能够通过聚水潭开放API `/open/jushuitan/otherinout/upload` 顺利写入目标系统。此外,还为这些操作设置了重试机制以应对网络波动或短暂故障导致的异常情况,提高整体流程的可靠性。 最后,由于此次集成涉及大量数据,我们特别注重高吞吐量下的数据快速处理能力。轻易云平台提供的大规模并行处理特性能确保海量数据在极短时间内完成转换和传输,并且平台自带集中监控与告警系统,实现了对所有任务状态及性能指标的即时追踪,让团队能及时发现并解决潜在问题。此外,对于已成功执行但偶尔出现错误条目的场景,我们还新增了一套精细化管理模式,根据不同类型错误进行分类处置,从而保障总流程的不间断运作。 以上是关于金蝶--采购入库单向聚水潭--其他入库单集成方案开头部分内容。在后续章节中,将详细阐述具体实现步骤、代码示例及相关配置参数设置等内容。 ![钉钉与WMS系统接口开发配置](https://pic.qeasy.cloud/D20.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成过程中,调用源系统的API接口是关键的一步。本文将详细介绍如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取采购入库单数据,并进行初步的数据加工。 #### API接口配置 首先,我们需要根据元数据配置来设置API接口的请求参数。以下是元数据配置中的关键字段: ```json { "api": "executeBillQuery", "method": "POST", "number": "FBillNo", "id": "FInStockEntry_FEntryId", "pagination": { "pageSize": 500 }, "idCheck": true, "request": [ {"field":"FInStockEntry_FEntryId","label":"id","type":"string","value":"FInStockEntry_FEntryId"}, {"field":"FID","label":"实体主键","type":"string","value":"FID"}, {"field":"FBillNo","label":"单据编号","type":"string","value":"FBillNo"}, {"field":"FDocumentStatus","label":"单据状态","type":"string","value":"FDocumentStatus"}, {"field":"FStockOrgId_FNumber","label":"收料组织","type":"string","value":"FStockOrgId.FNumber"}, {"field":"FDate","label":"入库日期","type":"string","value":"FDate"}, {"field":"FBillTypeID_FNumber","label":"单据类型","type":"string","value":"FBillTypeID.FNumber"}, {"field":"FOwnerTypeIdHead","label":"货主类型","type":"string","value":"FOwnerTypeIdHead"}, {"field":"FOwnerIdHead_FNumber","label":"货主","type":"string","value":"FOwnerIdHead.FNumber"}, {"field":"FDemandOrgId_FNumber","label":"需求组织","type":"string","value":"FDemandOrgId.FNumber"}, {"field":"FPurchaseOrgId_FNumber","label":"采购组织","type":"string","value":"FPurchaseOrgId.FNumber"}, {"field":...} ], ... } ``` #### 请求参数构建 根据元数据配置,我们需要构建请求参数。以下是一个示例请求体: ```json { "FormId": "STK_InStock", "FieldKeys": [ "FID", "FBillNo", "FDocumentStatus", ... ], "FilterString": "FApproveDate>='2023-01-01'", "Limit": 500, "StartRow": 0 } ``` #### 调用API接口 使用轻易云平台提供的可视化操作界面,我们可以方便地配置和调用API接口。以下是调用`executeBillQuery`接口的步骤: 1. **选择API接口**:在轻易云平台中选择`executeBillQuery`接口。 2. **配置请求参数**:根据元数据配置填写请求参数,包括表单ID、字段集合、过滤条件、分页参数等。 3. **发送请求**:点击发送请求按钮,平台会自动处理并返回结果。 #### 数据加工 获取到原始数据后,需要对其进行初步加工,以便后续的数据转换与写入。以下是一些常见的数据加工操作: 1. **字段映射**:将源系统的字段映射到目标系统的字段。例如,将金蝶云星空的`FBillNo`映射到聚水潭的订单编号。 2. **数据清洗**:去除无效或重复的数据,确保数据质量。例如,过滤掉作废状态的单据。 3. **格式转换**:将日期、金额等字段转换为目标系统所需的格式。 #### 示例代码 以下是一个示例代码片段,用于调用`executeBillQuery`接口并进行初步的数据加工: ```python import requests import json # 配置请求URL和头信息 url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} # 构建请求体 payload = { 'FormId': 'STK_InStock', 'FieldKeys': 'FID,FBillNo,FDocumentStatus,...', 'FilterString': 'FApproveDate>=\'2023-01-01\'', 'Limit': 500, 'StartRow': 0 } # 发起POST请求 response = requests.post(url, headers=headers, data=json.dumps(payload)) # 检查响应状态码 if response.status_code == 200: data = response.json() # 数据清洗和格式转换 processed_data = [] for entry in data: if entry['FDocumentStatus'] != '作废': processed_entry = { '订单编号': entry['FBillNo'], '入库日期': entry['FDate'], ... } processed_data.append(processed_entry) else: print(f"Error: {response.status_code}") # 输出处理后的数据 print(json.dumps(processed_data, indent=4, ensure_ascii=False)) ``` 通过上述步骤,我们成功地调用了金蝶云星空的`executeBillQuery`接口,并对获取到的数据进行了初步加工,为后续的数据转换与写入打下了坚实基础。 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/S4.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台实现金蝶采购入库单到聚水潭其他入库单的ETL转换 在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL转换,转为目标平台聚水潭API接口所能够接收的格式,并最终写入目标平台。本文将详细介绍如何使用轻易云数据集成平台完成这一过程。 #### 元数据配置解析 我们首先来看一下元数据配置,它定义了如何将金蝶采购入库单的数据转换并写入聚水潭其他入库单的API接口。 ```json { "api": "/open/jushuitan/otherinout/upload", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ {"field": "is_confirm", "label": "是否确认单据", "type": "string", "value": "_function IF('{F_POKM_JSTSTOCKNUMBER}' = 10816570 , 1 , 0 )"}, {"field": "excute_confirming", "label": "是否审核单据", "type": "string", "value": "false"}, {"field": "wms_co_id", "label": "仓库编号", "type": "int", "value": "{F_POKM_JSTSTOCKNUMBER}"}, {"field": "type", "label": "出入库类型", "type": "string", "value": "in"}, {"field": "external_id", "label": "外部单号", "type": "string", "value": "{FBillNo}{F_POKM_JSTSTOCKNUMBER}{F_POKM_JSTSTOCKNUMBER2}"}, {"field": "remark", "label": "备注", "type": "string", "value":"金蝶采购入库单据推送,单号:{FBillNo}"}, {"field":"items","label":"items","type":"array","value":"list","children":[ {"field":"sku_id","label":"商品编码","type":"string","value":"{{list.FMaterialId_FNumber}}"}, {"field":"qty","label":"入库数量","type":"string","value":"{{list.FRealQty}}"} ]}, {"field":"drp_co_name","label":"出库类型","type":"string","value":"采购入库"}, {"field":"warehouse","label":"分仓","type":"int","value":"{F_POKM_JSTSTOCKNUMBER2}"} ], ... } ``` #### 数据请求与清洗 在ETL过程中,首先需要从金蝶系统中获取采购入库单的数据。这一步通常通过API请求来完成。假设我们已经成功获取到这些数据,接下来我们需要对这些数据进行清洗和转换。 #### 数据转换与写入 根据元数据配置,我们需要将金蝶系统中的字段映射到聚水潭API接口所需的字段。以下是具体的字段映射和转换规则: 1. **是否确认单据 (`is_confirm`)**: - 使用条件判断函数 `_function IF`,当 `{F_POKM_JSTSTOCKNUMBER}` 等于 `10816570` 时,值为 `1`,否则为 `0`。 2. **是否审核单据 (`excute_confirming`)**: - 固定值 `false`。 3. **仓库编号 (`wms_co_id`)**: - 直接映射 `{F_POKM_JSTSTOCKNUMBER}`。 4. **出入库类型 (`type`)**: - 固定值 `in` 表示入库。 5. **外部单号 (`external_id`)**: - 组合 `{FBillNo}{F_POKM_JSTSTOCKNUMBER}{F_POKM_JSTSTOCKNUMBER2}`。 6. **备注 (`remark`)**: - 固定格式字符串 `"金蝶采购入库单据推送,单号:{FBillNo}"`。 7. **商品明细 (`items`)**: - 数组类型,其中每个子项包含两个字段: - 商品编码 (`sku_id`):映射 `{{list.FMaterialId_FNumber}}` - 入库数量 (`qty`):映射 `{{list.FRealQty}}` 8. **出库类型 (`drp_co_name`)**: - 固定值 `采购入库`。 9. **分仓 (`warehouse`)**: - 映射 `{F_POKM_JSTSTOCKNUMBER2}`。 #### API调用示例 在完成上述字段映射和转换后,我们可以构造一个POST请求,将数据发送到聚水潭API接口: ```json { ... { is_confirm: 1, excute_confirming: false, wms_co_id: 10816570, type: 'in', external_id: '12345678901081657010816571', remark: '金蝶采购入库单据推送,单号:1234567890', items: [ { sku_id: 'SKU123', qty: '100' }, { sku_id: 'SKU124', qty: '200' } ], drp_co_name: '采购入库', warehouse: 10816571 } } ``` 通过以上步骤,我们成功地将金蝶系统中的采购入库单数据转换为聚水潭系统能够接受的格式,并通过API接口写入目标平台。这一过程充分利用了轻易云数据集成平台提供的强大功能,实现了不同系统间的数据无缝对接。 ![用友与WMS系统接口开发配置](https://pic.qeasy.cloud/T18.png~tplv-syqr462i7n-qeasy.image)