ETL转换与批量写入金蝶云星空API接口实践

  • 轻易云集成顾问-叶威宏

MySQL数据集成到金蝶云星空的实践案例:GC-机加采购入库原材料

在本次技术案例中,我们将详细探讨通过轻易云数据集成平台,将MySQL数据库中的“机加采购入库原材料”数据高效迁移到金蝶云星空系统的全过程。该方案名称为“GC-机加采购入库原材料”,涉及多个关键技术点和接口实现,确保了整个流程的高效、稳定与无缝对接。

首先,通过MySQL提供的数据获取API select,我们能够定时可靠地抓取所需的原材料数据。为了保证海量数据处理过程中不出现遗漏或延迟,我们利用了平台支持高吞吐量的数据写入能力,使得大量重要业务数据能够快速、安全地传输至目标系统中。

与此同时,为了解决MySQL接口分页和限流问题,我们设计了一套智能分页机制,并配置相关参数以平衡性能与准确性间的关系。在此基础上,实现对源端接口调用频率与响应时间进行优化,同时减少压力峰值影响。这一策略不仅提升了整体效能,还有效避免因单一请求过多而导致的不必要等待与阻塞。

紧接着,在向金蝶云星空写入批量数据时,采用其提供的数据写入API batchSave。这一过程需要注意的是两者之间可能存在的数据格式差异。为此,我们在轻易云平台进行了自定义转换逻辑设置,对从MySQL提取出的JSON字段进行适配转换,以满足金蝶云星空所要求的数据结构标准。从而确保每一个记录都能被准确无误地保存至目的表中,无丢失或者错误插入现象发生。

此外,对于集成期间可能遇到的异常情况,如网络波动、接口返回异常等问题,我们引入了实时监控与日志记录功能。不仅可以及时捕捉并定位故障原因,还可根据预设规则自动触发重试机制,从根本上提高任务执行成功率和系统稳定性。

总之,通过合理规划并运用以上技术手段,即使面对复杂、多变的信息环境,也能顺畅完成项目需求,为企业价值持续创造奠定坚实基础。接下来部分将具体讲解各个步骤实施细节及代码示例,帮助大家更好理解其中要点应用方法。如果有进一步兴趣,请继续关注下文详述内容。 金蝶与MES系统接口开发配置

使用轻易云数据集成平台调用MySQL接口获取并加工数据

在数据集成的生命周期中,调用源系统接口获取数据是至关重要的一步。本文将详细探讨如何使用轻易云数据集成平台,通过MySQL接口select获取并加工数据。

元数据配置解析

元数据配置是实现数据请求与清洗的关键。以下是一个典型的元数据配置示例:

{
  "api": "select",
  "effect": "QUERY",
  "method": "POST",
  "id": "采购入库单号",
  "request": [
    {
      "field": "main_params",
      "label": "主参数",
      "type": "object",
      "describe": "对应其它请求字段内SQL语句的主参数,必须一一对应。",
      "value": "select \nc.business_no as 采购单号,\na.part_no as 成品编号,\nc.ser_code as 条码,\na.confirm_numb as 数量,\ne.pur_price as 含税单价,\nc.mode_no as 计划跟踪号,\nCONCAT(f.confrim_no,'_',CAST(a.id AS CHAR)) as 领料单号,\ndate(a.update_time) as 日期,\nCONCAT(a.part_no,concat('_',c.current_process_code)) as 物料编号,\na.uuid as sourceid\nfrom wms_instock_confirm_task_detail a\nleft join wms_instock_purchase_task_detail c on  c.out_type='2' AND MATTERIAL_TYPE='3'\nleft join wms_instock_confirm_main_task_detail b on b.connect_uuid=c.uuid\nleft join mbs_pur_record_detail e on c.connect_id=e.id\nleft join wms_instock_confirm_task f on f.uuid=a.confirm_detail_task_uuid\nwhere a.connect_uuid=b.uuid\nand a.company_code='TYZN'\nand a.create_time>'2023-09-01'\nand f.confrim_no='RKQR20230905026'\n limit :limit offset :offset",
      "children": [
        {
          "field": "limit",
          "label": "行数",
          "type": "int",
          "value": "{PAGINATION_PAGE_SIZE}"
        },
        {
          "field": "offset",
          "label": "偏移量",
          "type": "int",
          "value": "{PAGINATION_START_ROW}"
        }
      ]
    }
  ],
  ...
}

该配置主要包括以下几个部分:

  1. API类型api字段指定了API类型为select,表示这是一个查询操作。
  2. 请求方法method字段指定了HTTP请求方法为POST
  3. 主参数main_params字段包含了SQL查询语句和动态参数(如:limit, :offset),这些参数将在执行查询时进行绑定。

SQL查询语句优化

为了确保查询语句的可读性和维护性,我们可以采用参数绑定的方式。具体步骤如下:

  1. 将主SQL查询语句中的动态字段:limit, :offset替换为占位符(例如 ?)。
  2. 在执行查询之前,使用参数绑定的方法,将请求参数的值与占位符进行对应绑定。

优化后的SQL查询语句示例如下:

SELECT 
    c.business_no AS 采购单号,
    a.part_no AS 成品编号,
    c.ser_code AS 条码,
    a.confirm_numb AS 数量,
    e.pur_price AS 含税单价,
    c.mode_no AS 计划跟踪号,
    CONCAT(f.confrim_no, '_', CAST(a.id AS CHAR)) AS 领料单号,
    DATE(a.update_time) AS 日期,
    CONCAT(a.part_no, CONCAT('_', c.current_process_code)) AS 物料编号,
    a.uuid AS sourceid
FROM 
    wms_instock_confirm_task_detail a
LEFT JOIN 
    wms_instock_purchase_task_detail c ON c.out_type = '2' AND MATTERIAL_TYPE = '3'
LEFT JOIN 
    wms_instock_confirm_main_task_detail b ON b.connect_uuid = c.uuid
LEFT JOIN 
    mbs_pur_record_detail e ON c.connect_id = e.id
LEFT JOIN 
    wms_instock_confirm_task f ON f.uuid = a.confirm_detail_task_uuid
WHERE 
    a.connect_uuid = b.uuid
AND 
    a.company_code = 'TYZN'
AND 
    a.create_time > '2023-09-01'
AND 
    f.confrim_no = 'RKQR20230905026'
LIMIT ? OFFSET ?

数据请求与清洗

在实际操作中,轻易云平台会根据元数据配置自动生成相应的SQL查询,并通过HTTP POST方法发送请求。以下是一个示例请求体:

{
  "main_params": {
    "{PAGINATION_PAGE_SIZE}": 100,
    "{PAGINATION_START_ROW}": 0
  }
}

该请求体中包含了分页参数,用于控制返回的数据量和起始位置。

数据处理与返回

在接收到MySQL数据库返回的数据后,轻易云平台会对其进行初步清洗和转换。这包括但不限于:

  1. 字段映射:将数据库字段映射到目标系统所需的字段。
  2. 数据格式转换:将日期、数值等字段转换为目标系统所需的格式。
  3. 异常处理:对可能出现的数据异常进行处理,如空值替换、错误日志记录等。

通过上述步骤,我们能够高效地从MySQL数据库中获取并加工所需的数据,为后续的数据转换与写入奠定基础。 金蝶云星空API接口配置

使用轻易云数据集成平台实现金蝶云星空API接口的数据ETL转换与写入

在数据集成过程中,将源平台的数据转化为目标平台所需的格式是关键步骤之一。本文将深入探讨如何使用轻易云数据集成平台,将采购入库原材料数据通过ETL转换,最终写入金蝶云星空API接口。

配置元数据

首先,我们需要配置元数据,以便将源平台的数据映射到金蝶云星空所需的字段格式。以下是一个典型的元数据配置示例:

{
  "api": "batchSave",
  "effect": "EXECUTE",
  "method": "POST",
  "idCheck": true,
  "request": [
    {"field":"FBillTypeID","label":"单据类型","type":"string","describe":"单据类型","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"RKD01_SYS"},
    {"field":"FBusinessType","label":"业务类型","type":"string","describe":"下拉列表","value":"CG"},
    {"field":"FBillNo","label":"单据编号","type":"string","describe":"单据编号","value":"{{采购入库单号}}"},
    {"field":"FStockOrgId","label":"收料组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"T04"},
    {"field":"FStockDeptId","label":"收料部门","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"}},
    {"field":"FPurchaseOrgId","label":"采购组织","type":"string","describe":"组织","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"T04"},
    {"field":"FSupplierId","label":"供应商","type":"string","describe":"基础资料","parser":{"name":"ConvertObjectParser","params":"FNumber"},"value":"{{供应商代码}}"},
    {"field":"FDate","label":"入库日期","type":"","describe":"","value":""},
    {"field":"","label":"","type":"","describe":"","value":""},
    // ...省略部分字段
  ],
  "otherRequest": [
    {"field": "FormId", "label": "业务对象表单Id", "type": "string", "describe": "必须填写金蝶的表单ID如:PUR_PurchaseOrder", "value": "STK_InStock"},
    {"field": "IsAutoSubmitAndAudit", "label": "提交并审核", "type": "bool", "describe": "", "value": true},
    {"field": "", "", "", ""},
  ],
  // ...省略部分字段
}

数据请求与清洗

在进行ETL转换之前,首先需要从源系统请求数据,并对数据进行清洗和预处理。这一步骤通常包括:

  1. 数据请求:通过API或数据库查询获取源系统中的原始数据。
  2. 数据清洗:去除重复、不完整或错误的数据,确保数据质量。
  3. 字段映射:将源系统中的字段映射到目标系统中对应的字段。

数据转换与写入

一旦完成了数据请求与清洗,就可以进行ETL转换。以下是具体步骤:

  1. 字段解析:根据元数据配置中的parser参数,对特定字段进行解析和转换。例如,将供应商代码、物料编号等基础资料字段通过ConvertObjectParser进行解析。

  2. 值替换:使用模板变量(如{{采购入库单号}}{{供应商代码}}等)替换实际值。这一步骤确保动态生成的值能够正确填充到目标系统中。

  3. 特殊处理:对于某些特殊字段,如赠品标识,可以使用函数表达式进行处理。例如:

    {
     "field": "FGiveAway",
     "label": "是否赠品",
     "type": "",
     "describe":"",
     // 使用函数表达式根据条件设置值
     "_function case '{{赠品}}' when '1' then true else false end"
    }
  4. 构建请求体:根据配置好的元数据,将所有字段组装成符合金蝶云星空API接口要求的JSON格式请求体。

  5. 发送请求:使用HTTP POST方法,将构建好的请求体发送到金蝶云星空的批量保存接口(batchSave)。

示例代码

以下是一个完整的示例代码片段,展示如何将清洗后的源数据转换为目标格式并写入金蝶云星空:

import requests
import json

# 构建请求头
headers = {
    'Content-Type': 'application/json',
}

# 构建请求体
data = {
    # 根据元数据配置构建实际请求体
}

# 将构建好的JSON请求体发送到金蝶云星空API接口
response = requests.post('https://api.kingdee.com/batchSave', headers=headers, data=json.dumps(data))

# 检查响应状态码和内容
if response.status_code == 200:
    print("Data successfully written to Kingdee Cloud")
else:
    print(f"Failed to write data: {response.text}")

通过以上步骤,可以实现从源系统到金蝶云星空的数据无缝对接,确保每个环节都透明可控,提高业务效率。 电商OMS与WMS系统接口开发配置

更多系统对接方案