将数据从金蝶云星空转换并写入MySQL数据库的技术方案

  • 轻易云集成顾问-林峰
### 金蝶云星空数据集成到MySQL案例分享:SD四化订单进度刷新方案-深圳天一 在本次技术案例中,我们将介绍如何高效地实现金蝶云星空与MySQL数据库之间的数据集成,具体聚焦于深圳天一的“SD四化订单进度刷新方案”。借助轻易云数据集成平台,通过全面优化的API接口调用和实时监控机制,实现了大量订单数据的快速、稳定入库。 首先,确保高效的数据获取,我们使用了金蝶云星空提供的`executeBillQuery` API。这一接口有效解决了大规模订单数据抓取的问题,但随之也带来了分页处理和限流管理等挑战。我们通过自定义脚本和批量请求逻辑,对这些问题进行了优化,以确保每一次请求都能最大程度地获得所需数据,同时避免触发限流。 其次,对于获取到的大量订单数据,我们采用轻易云平台支持的高吞吐量写入能力,将其快速、安全地存储至MySQL数据库。这一步骤利用MySQL `execute` API完成,并且配合定制化的数据映射策略,以应对两者之间可能存在的数据结构差异。此外,通过预设错误重试机制,有效提升了系统在异常情境下的鲁棒性,保障了整体流程的稳定运行。 为了全面掌握整个数据集成过程中的动态变化,在轻易云平台上启用了集中监控和告警系统。该系统提供实时跟踪功能,不仅能够详细记录每个步骤的数据流动状态,还可以及时发现并上报潜在异常,为后续运维工作带来极大的便利。 最后值得注意的是,我们通过精心设计的数据转换逻辑,使得无论是从金蝶云星空获取原始资料还是写入到MySQL库中,都能很好适配深圳天一特有的业务需求。在这个过程中,统一视图控制台发挥了重要作用,它简洁直观,使操作人员能够便捷进行任务管理与调整,从而实现资源最优配置。 由此可见,这次成功实践不仅展示出强大的技术优势,更为今后的类似项目提供了一份宝贵参考。接下来部分将深入解析各关键环节及其实际代码实现细节,用以进一步阐明这套方案背后的技术逻辑与操作要点。 ![用友与外部系统接口集成开发](https://pic.qeasy.cloud/D30.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在数据集成的生命周期中,调用源系统接口是至关重要的一步。本文将深入探讨如何通过轻易云数据集成平台调用金蝶云星空的`executeBillQuery`接口来获取和加工数据。 #### 接口概述 `executeBillQuery`是金蝶云星空提供的一个查询接口,主要用于从金蝶系统中提取业务数据。该接口支持POST请求,并且能够根据指定的过滤条件和字段集合返回所需的数据。 #### 元数据配置解析 在进行接口调用之前,我们需要配置元数据,以便准确地向金蝶云星空发送请求并处理响应。以下是元数据配置的详细解析: - **API**: `executeBillQuery` - **Effect**: `QUERY` - **Method**: `POST` - **Number**: `FBillNo` - **ID**: `FTreeEntity_FEntryId` - **Name**: `FBillNo` 这些基础配置项定义了我们要调用的API名称、操作类型、HTTP方法以及关键字段。 #### 请求参数配置 请求参数分为两类:基本请求参数和其他请求参数。 ##### 基本请求参数 ```json [ {"field":"FTreeEntity_FEntryId","label":"FTreeEntity_FEntryId","type":"string","describe":"FTreeEntity_FEntryId","value":"FTreeEntity_FEntryId"}, {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"FBillNo"}, {"field":"FMTONO","label":"计划跟踪号","type":"string","value":"FMTONO"}, {"field":"FMATERIALID_FNumber","label":"物料编码","type":"string","describe":"物料编码","value":"FMATERIALID.FNumber"}, {"field":"FDate","label":"日期","type":"string","value":"FDate"}, {"field":"FStockInQuaAuxQty","label":"合格品入库数量","type":"string","value":"FStockInQuaAuxQty"}, {"field":"FQty","label":"数量","type":"string","describe":"数量","value":"FQty"} ] ``` 这些字段定义了我们需要从金蝶系统中提取的数据项,包括单据编号、计划跟踪号、物料编码、日期、合格品入库数量和数量等。 ##### 其他请求参数 ```json [ {"field":"Limit","label":"最大行数","type":"string","describe":"金蝶的查询分页参数","value":"2000"}, {"field":"StartRow","label":"开始行索引","type":"string","describe":"金蝶的查询分页参数","value": "{PAGINATION_START_ROW}"}, {"field": "TopRowCount", "label": "返回总行数", "type": "int", "describe": "金蝶的查询分页参数"}, {"field": "FilterString", "label": "过滤条件", "type": "string", "describe": "示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=", "value": "FPrdOrgId.FNumber='T01.01' and FDocumentStatus='C' and FBillType.fnumber='SCDD01_SYS' and Fdate>='2023-10-01'"}, {"field": "FieldKeys", "label": "需查询的字段key集合", "type": "array", "describe": "金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber", "parser":{"name": "ArrayToString", "params": ","}}, {"field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder", "value": "PRD_MO"} ] ``` 这些参数主要用于控制查询行为,如分页设置(最大行数、开始行索引)、过滤条件以及需要返回的字段集合等。 #### 数据请求与清洗 在完成元数据配置后,我们可以通过轻易云平台发起对`executeBillQuery`接口的调用。以下是一个典型的数据请求流程: 1. **构建请求体**:根据元数据配置,构建包含所有必要字段和过滤条件的JSON请求体。 2. **发送请求**:使用POST方法将请求体发送到金蝶云星空API端点。 3. **接收响应**:接收并解析API响应,提取所需的数据项。 4. **数据清洗**:对接收到的数据进行清洗和转换,以确保其符合目标系统或业务需求。例如,将日期格式统一转换为标准格式,过滤掉无效或重复的数据等。 #### 示例代码 以下是一个简单的Python示例代码,用于演示如何通过HTTP POST方法调用`executeBillQuery`接口并处理响应: ```python import requests import json url = 'https://api.kingdee.com/executeBillQuery' headers = {'Content-Type': 'application/json'} payload = { 'FormId': 'PRD_MO', 'FieldKeys': 'FBillNo,FMTONO,FMATERIALID.FNumber,FDate,FStockInQuaAuxQty,FQty', 'FilterString': 'FPrdOrgId.FNumber=\'T01.01\' and FDocumentStatus=\'C\' and FBillType.fnumber=\'SCDD01_SYS\' and Fdate>=\'2023-10-01\'', 'Limit': '2000', 'StartRow': '{PAGINATION_START_ROW}' } response = requests.post(url, headers=headers, data=json.dumps(payload)) data = response.json() # 数据清洗与转换 cleaned_data = [] for item in data: cleaned_item = { '单据编号': item['FBillNo'], '计划跟踪号': item['FMTONO'], '物料编码': item['FMATERIALID.FNumber'], '日期': item['FDate'], '合格品入库数量': item['FStockInQuaAuxQty'], '数量': item['FQty'] } cleaned_data.append(cleaned_item) print(cleaned_data) ``` 通过上述步骤,我们可以高效地从金蝶云星空获取所需的数据,并对其进行必要的清洗和转换,为后续的数据处理和分析打下坚实基础。 ![如何开发用友BIP接口](https://pic.qeasy.cloud/S26.png~tplv-syqr462i7n-qeasy.image) ### 将源平台数据转换并写入目标平台 MySQL 的技术案例 在数据集成生命周期的第二步,我们需要将已经集成的源平台数据进行ETL转换,并转为目标平台 MySQL API 接口能够接收的格式,最终写入目标平台。以下是具体的技术实现过程。 #### 1. 数据请求与清洗 首先,我们从源平台获取原始数据,并进行必要的数据清洗和预处理。这一步骤确保数据的准确性和一致性,为后续的转换和写入奠定基础。 #### 2. 数据转换与写入 在这一步,我们将清洗后的数据进行ETL(Extract, Transform, Load)处理,具体包括以下几个步骤: ##### 2.1 提取(Extract) 从源平台提取所需的数据字段。假设我们已经获取到以下两个关键字段: - `FMTONO`:计划跟踪号 - `FStockInQuaAuxQty`:合格品入库数量 ##### 2.2 转换(Transform) 根据目标平台 MySQL API 接口要求,对提取的数据进行格式转换。我们使用轻易云数据集成平台提供的元数据配置来完成这一任务。元数据配置如下: ```json { "api": "execute", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "main_params", "label": "main_params", "type": "object", "describe": "111", "value": "1", "children": [ { "field": "FMTONO", "label": "计划跟踪号", "type": "string", "value": "{FMTONO}" }, { "field": "FStockInQuaAuxQty", "label": "合格品入库数量", "type": "string", "value": "{FStockInQuaAuxQty}" } ] } ], "otherRequest": [ { "field": "main_sql", "label": "main_sql", "type": "string", "describe": "111", "value": " update mbs_order_bom set complete_num =:FStockInQuaAuxQty where bom_uuid=(select bom_uuid from mbs_order_plan_bom where bom_no=:FMTONO) " } ] } ``` 在这个配置中,`main_params` 包含了两个子字段 `FMTONO` 和 `FStockInQuaAuxQty`,分别对应计划跟踪号和合格品入库数量。这些字段将被动态替换为实际值。 ##### 2.3 加载(Load) 最后,将转换后的数据通过 MySQL API 接口写入目标数据库。我们使用 POST 方法执行 SQL 更新操作: ```sql update mbs_order_bom set complete_num =:FStockInQuaAuxQty where bom_uuid=(select bom_uuid from mbs_order_plan_bom where bom_no=:FMTONO) ``` 此 SQL 语句通过占位符 `:FStockInQuaAuxQty` 和 `:FMTONO` 动态绑定参数,实现了对目标表 `mbs_order_bom` 中 `complete_num` 字段的更新操作。 #### 实际应用案例 假设我们从源平台获取到如下数据: - FMTONO: '12345' - FStockInQuaAuxQty: '100' 根据上述元数据配置和 SQL 语句,实际执行的 SQL 将会是: ```sql update mbs_order_bom set complete_num = '100' where bom_uuid = (select bom_uuid from mbs_order_plan_bom where bom_no = '12345') ``` 通过轻易云数据集成平台,我们可以全程监控这一过程,确保每个环节都透明可视,并实时查看数据流动和处理状态,大大提升了业务透明度和效率。 以上即为将源平台数据转换并写入目标平台 MySQL 的技术实现过程,通过详细的元数据配置和实际应用案例,展示了如何高效地完成这一任务。 ![钉钉与CRM系统接口开发配置](https://pic.qeasy.cloud/T29.png~tplv-syqr462i7n-qeasy.image)