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

  • 轻易云集成顾问-吴伟

案例分享:金蝶云星空数据集成到MySQL

在企业信息化系统中,实现不同平台间的数据无缝对接是推动业务运作的重要一环。本文将详细讨论如何通过轻易云数据集成平台,将金蝶云星空中的销售退货查询(方案名称:xsth-2)接口executeBillQuery获取的数据集成到MySQL数据库中,从而实现批量、高效、可靠的数据传输和存储。

首先,我们需要解决几个关键技术问题:

  1. 定时可靠的抓取金蝶云星空接口数据:使用定时任务调度系统,周期性地调用executeBillQuery API,从金蝶云星空获取最新的销售退货记录。
  2. 处理分页和限流问题:由于接口返回结果可能包含大量数据,需要设计合理的分页机制,并考虑API调用频次限制,确保全量数据完整、准确地导入MySQL。
  3. 自定义数据转换逻辑:针对两者之间的数据格式差异,自定义映射和转换规则,使得从金蝶云星空提取的数据结构能够匹配MySQL端预设表格结构要求。
  4. 高吞吐量写入能力:利用轻易云提供的大容量并发写入特性,加速大规模数据快速入库,尤其是面对高峰期大量销售退货记录时,高效完成存储过程。
  5. 集中监控与异常处理机制:建立实时监控体系,对每一次API调用、每批次数据传输进行状态跟踪,并设置智能告警,以便及时发现并重试失败操作,保证整个流程的稳定运行。

通过上述步骤,不仅可以实现从获取原始业务数据,到规范化处理,再到最终落盘存储的一站式自动化管理,还能够最大程度上提高企业在销售退货相关运营分析上的效率,为业务决策提供有力支持。接下来,让我们详细解析各个具体实施细节及对应代码示例。 用友与MES系统接口开发配置

调用金蝶云星空接口executeBillQuery获取并加工数据

在轻易云数据集成平台的生命周期中,调用源系统接口是至关重要的一步。本文将详细探讨如何通过调用金蝶云星空的executeBillQuery接口来获取销售退货数据,并进行初步加工。

接口配置与调用

首先,我们需要配置元数据以便正确调用金蝶云星空的executeBillQuery接口。以下是关键的元数据配置:

{
  "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配置实现:

{
  old: 'FDate',
  new: 'FDate_new',
  format: 'date'
}

此配置会自动将原始日期字段转换为指定的新格式,并赋予新的字段名称。

实际操作步骤

  1. 配置API请求:根据上述元数据配置,通过轻易云平台设置API请求参数。
  2. 发送请求:使用POST方法调用金蝶云星空的executeBillQuery接口,传递必要的请求参数和过滤条件。
  3. 接收响应:解析返回的数据,根据需求对特定字段进行格式转换和重命名。
  4. 数据存储:将处理后的数据写入目标数据库(例如MySQL),以便后续使用。

通过以上步骤,我们可以高效地从金蝶云星空系统中提取销售退货数据,并进行初步加工,为后续的数据处理和分析奠定基础。 用友与SCM系统接口开发配置

使用轻易云数据集成平台进行ETL转换并写入MySQLAPI接口

在数据集成生命周期的第二阶段,我们将已经集成的源平台数据进行ETL(提取、转换、加载)转换,最终写入目标平台MySQL。本文将深入探讨这一过程中涉及的技术细节和元数据配置。

数据提取与清洗

首先,我们从源系统中提取销售退货数据。这个过程通常包括从金蝶系统中获取相关销售退货记录,并对数据进行初步清洗,以确保其格式和内容符合目标平台的要求。

数据转换

在数据转换阶段,我们需要将源系统的数据字段映射到目标系统所需的字段格式。以下是元数据配置中的具体字段映射:

{
  "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插入语句配置:

{
  ...
  “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请求:

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接口配置

更多系统对接方案