高效处理金蝶云星空销售退货数据:ETL转换与MySQL存储

  • 轻易云集成顾问-吴伟
### 案例分享:金蝶云星空数据集成到MySQL 在企业信息化系统中,实现不同平台间的数据无缝对接是推动业务运作的重要一环。本文将详细讨论如何通过轻易云数据集成平台,将金蝶云星空中的销售退货查询(方案名称:xsth-2)接口executeBillQuery获取的数据集成到MySQL数据库中,从而实现批量、高效、可靠的数据传输和存储。 首先,我们需要解决几个关键技术问题: 1. **定时可靠的抓取金蝶云星空接口数据**:使用定时任务调度系统,周期性地调用executeBillQuery API,从金蝶云星空获取最新的销售退货记录。 2. **处理分页和限流问题**:由于接口返回结果可能包含大量数据,需要设计合理的分页机制,并考虑API调用频次限制,确保全量数据完整、准确地导入MySQL。 3. **自定义数据转换逻辑**:针对两者之间的数据格式差异,自定义映射和转换规则,使得从金蝶云星空提取的数据结构能够匹配MySQL端预设表格结构要求。 4. **高吞吐量写入能力**:利用轻易云提供的大容量并发写入特性,加速大规模数据快速入库,尤其是面对高峰期大量销售退货记录时,高效完成存储过程。 5. **集中监控与异常处理机制**:建立实时监控体系,对每一次API调用、每批次数据传输进行状态跟踪,并设置智能告警,以便及时发现并重试失败操作,保证整个流程的稳定运行。 通过上述步骤,不仅可以实现从获取原始业务数据,到规范化处理,再到最终落盘存储的一站式自动化管理,还能够最大程度上提高企业在销售退货相关运营分析上的效率,为业务决策提供有力支持。接下来,让我们详细解析各个具体实施细节及对应代码示例。 ![用友与MES系统接口开发配置](https://pic.qeasy.cloud/D11.png~tplv-syqr462i7n-qeasy.image) ### 调用金蝶云星空接口executeBillQuery获取并加工数据 在轻易云数据集成平台的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过调用金蝶云星空的`executeBillQuery`接口来获取销售退货数据,并进行初步加工。 #### 接口配置与调用 首先,我们需要配置元数据以便正确调用金蝶云星空的`executeBillQuery`接口。以下是关键的元数据配置: ```json { "api": "executeBillQuery", "effect": "QUERY", "method": "POST", "number": "FBillNo", "id": "FEntity_FENTRYID", "idCheck": true, "formatResponse": [ { "old": "FDate", "new": "FDate_new", "format": "date" } ], "request": [ {"field":"FBillNo","label":"FBillNo","type":"string","describe":"111","value":"FBillNo"}, {"field":"FDocumentStatus","label":"FDocumentStatus","type":"string","describe":"111","value":"FDocumentStatus"}, {"field":"FEntity_FENTRYID","label":"FEntity_FENTRYID","type":"string","value":"FEntity_FENTRYID"}, {"field":"FDate","label":"FDate","type":"string","describe":"111","value":"FDate"}, {"field":"FRealQty","label":"FRealQty","type":"string","describe":"111","value":"FRealQty"}, {"field":"FAmount","label":"FAmount","type":"string","describe":"111","value":"FAmount"} ], "otherRequest": [ {"field": "Limit", "label": "Limit", "type": "string", "describe": "金蝶的查询分页参数", "value": "2000"}, {"field": "StartRow", "label": "StartRow", "type": "string", "describe": "金蝶的查询分页参数", "value": "{PAGINATION_START_ROW}"}, {"field": "TopRowCount", "label": "TopRowCount", "type": "int", "describe": "",}, {"field": “FilterString”, “label”: “FilterString”, “type”: “string”, “describe”: “示例写法 FSupplierId.FNumber = 'VEN00010' and FApproveDate>=”, “value”: “FDate>='{{LAST_SYNC_TIME|date}}' and FBillNo NOT LIKE '%XSTHD%' or FApproveDate>='{{LAST_SYNC_TIME|date}}' and FBillNo NOT LIKE '%XSTHD%'”}, {"field": “FieldKeys”, “label”: “FieldKeys”, “type”: “array”, “describe”: “金蝶分录主键ID格式:FPOOrderEntry_FEntryId,其它格式 FPurchaseOrgId.FNumber”, “value”: "{MAIN_REQUEST}"}, {"field": “FormId”, “label”: “FormId”, “type”: “string”, “describe”:“必须填写金蝶的表单ID如:PUR_PurchaseOrder”,"value":"SAL_RETURNSTOCK"} ], autoFillResponse: true } ``` #### 请求参数详解 1. **基本请求字段**: - `FBillNo`: 单据编号 - `FDocumentStatus`: 单据状态 - `FEntity_FENTRYID`: 分录主键ID - `FDate`: 单据日期 - `FRealQty`: 实际数量 - `FAmount`: 金额 2. **其他请求字段**: - `Limit`: 每次查询返回的数据条数限制,设置为2000。 - `StartRow`: 查询起始行,支持分页。 - `FilterString`: 用于过滤数据的条件表达式,例如根据时间和单据编号进行过滤。 - `FieldKeys`: 返回字段列表,指定需要返回的数据字段。 - `FormId`: 表单ID,这里指定为销售退货单`SAL_RETURNSTOCK`。 #### 数据处理与转换 在获取到数据后,我们需要对部分字段进行格式转换。例如,将日期字段`FDate`转换为新的格式并命名为`FDate_new`。这一步通过元数据中的`formatResponse`配置实现: ```json { old: 'FDate', new: 'FDate_new', format: 'date' } ``` 此配置会自动将原始日期字段转换为指定的新格式,并赋予新的字段名称。 #### 实际操作步骤 1. **配置API请求**:根据上述元数据配置,通过轻易云平台设置API请求参数。 2. **发送请求**:使用POST方法调用金蝶云星空的`executeBillQuery`接口,传递必要的请求参数和过滤条件。 3. **接收响应**:解析返回的数据,根据需求对特定字段进行格式转换和重命名。 4. **数据存储**:将处理后的数据写入目标数据库(例如MySQL),以便后续使用。 通过以上步骤,我们可以高效地从金蝶云星空系统中提取销售退货数据,并进行初步加工,为后续的数据处理和分析奠定基础。 ![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/S17.png~tplv-syqr462i7n-qeasy.image) ### 使用轻易云数据集成平台进行ETL转换并写入MySQLAPI接口 在数据集成生命周期的第二阶段,我们将已经集成的源平台数据进行ETL(提取、转换、加载)转换,最终写入目标平台MySQL。本文将深入探讨这一过程中涉及的技术细节和元数据配置。 #### 数据提取与清洗 首先,我们从源系统中提取销售退货数据。这个过程通常包括从金蝶系统中获取相关销售退货记录,并对数据进行初步清洗,以确保其格式和内容符合目标平台的要求。 #### 数据转换 在数据转换阶段,我们需要将源系统的数据字段映射到目标系统所需的字段格式。以下是元数据配置中的具体字段映射: ```json { "api": "execute", "effect": "EXECUTE", "method": "POST", "idCheck": true, "request": [ { "field": "main_params", "label": "main_params", "type": "object", "describe": "111", "children": [ {"field": "FEntity_FENTRYID", "label": "明细id", "type": "string", "value": "{FEntity_FENTRYID}"}, {"field": "order_no_new", "label": "单号", "type": "string", "value": "{FBillNo}"}, {"field": "FDocumentStatus", "label": "状态", "type": "string", "value": "{FDocumentStatus}"}, {"field": "qty_count", "label": "数量", "type":"string","value":"{FRealQty}"}, {"field":"sales_count","label":"金额","type":"string","value":"{FAmount}"}, {"field":"datetime_new","label":"时间","type":"date","value":"{FDate_new}"}, {"field":"Document_Type","label":"单据类型","type":"string","value":"销售退货"} ] } ], ... } ``` 在上述配置中,我们将金蝶系统中的字段映射到目标MySQL数据库的字段。例如,`{FBillNo}`映射到`order_no_new`,`{FAmount}`映射到`sales_count`,等等。 #### 数据写入 最后一步是将转换后的数据写入目标平台MySQL。这一步通过API接口实现。我们使用POST方法,将处理后的数据发送到MySQL数据库中。以下是具体的SQL插入语句配置: ```json { ... “otherRequest”: [ { “field”: “main_sql”, “label”: “main_sql”, “type”: “string”, “describe”: “111”, “value”: “INSERT INTO `kd_xsth`(`FEntity_FENTRYID`,`order_no_new`,`FDocumentStatus`,`qty_count`,`sales_count`,`datetime_new`,`Document_Type`) VALUES (:FEntity_FENTRYID,:order_no_new,:FDocumentStatus,:qty_count,:sales_count,:datetime_new,:Document_Type)” } ] } ``` 该SQL语句将各个字段值插入到名为`kd_xsth`的表中。通过这种方式,可以确保所有销售退货记录都被正确地存储在目标数据库中。 #### API接口调用 为了实现上述操作,我们需要调用API接口。以下是一个示例代码片段,用于执行API请求: ```python import requests import json url = 'http://your-mysql-api-endpoint' headers = {'Content-Type': 'application/json'} data = { 'api': 'execute', 'effect': 'EXECUTE', 'method': 'POST', 'idCheck': True, 'request': [ { 'field': 'main_params', 'label': 'main_params', 'type': 'object', 'describe': '111', 'children': [ {'field': 'FEntity_FENTRYID', 'label': '明细id', 'type': 'string', 'value': '{FEntity_FENTRYID}'}, {'field': 'order_no_new', 'label': '单号', 'type': 'string', 'value': '{FBillNo}'}, {'field': 'FDocumentStatus', 'label': '状态', 'type':'string','value':'{FDocumentStatus}'}, {'field':'qty_count','label':'数量','type':'string','value':'{FRealQty}'}, {'field':'sales_count','label':'金额','type':'string','value':'{FAmount}'}, {'field':'datetime_new','label':'时间','type':'date','value':'{FDate_new}'}, {'field':'Document_Type','label':'单据类型','type':'string','value':'销售退货'} ] } ], ... } response = requests.post(url, headers=headers, data=json.dumps(data)) print(response.status_code) print(response.json()) ``` 以上代码片段展示了如何使用Python调用API接口,将处理后的数据发送到MySQL数据库。 通过以上步骤,我们完成了从源系统提取、清洗、转换并最终写入目标平台MySQL的全过程。在实际应用中,这一过程可以极大提升数据处理效率和准确性,确保业务流程的顺畅运行。 ![金蝶云星空API接口配置](https://pic.qeasy.cloud/T24.png~tplv-syqr462i7n-qeasy.image)