ETL技术深入解析:将生产数据转换为金蝶云星空格式

  • 轻易云集成顾问-钟家寿

MySQL数据集成到金蝶云星空的技术实现与优化

在本次系统对接中,我们需要将MySQL数据库中的生产领料单数据( 方案名称:SLY生产领料单新增深圳天一-原材料-好)集成至金蝶云星空,以实现统一的业务管理和高效的数据处理。本文将详细探讨该过程中涉及的各个技术要点,特别是API接口使用以及数据质量保障策略。

首先,通过MySQL提供的select API接口,定时抓取最新的生产领料单数据。在此过程中,为了确保高吞吐量的数据传输能力,我们采用分页抓取机制,同时设置适当限流参数以防止网络拥塞和系统过载。

SELECT * FROM ProductionOrder WHERE order_status='new' LIMIT 100 OFFSET ?

接下来,将获取到的数据通过自定义转换逻辑进行格式化处理,使其符合金蝶云星空所需的数据结构规范。这一步骤极为重要,因为两者之间可能存在字段命名、不一致性等差异,如果不提前转换会导致后续写入失败或数据异常。

{
    "order_id": "101",
    "material_code": "A123",
    // ...
}

随后,通过调用金蝶云星空提供的batchSave API接口,将整理后的批量数据写入目标系统。考虑到大规模数据集成场景下可能出现的网络波动和服务熔断问题,需要在代码中实现错误重试机制,以确保集成过程中的可靠性与稳定性。

POST /api/batchSave {
   "data": [
      {
         // data fields...
      }
   ]
}

为了进一步提升透明度和维护成本,在整个操作流程中我们引入了实时监控和日志记录功能。这不仅有助于快速定位潜在问题,还能在异常情况下及时告警,从而保证系统稳定运行。此外,通过轻易云平台可视化工具对每一个步骤进行追踪,让整个过程更加直观易管控,有效节省运维时间及资源配置。 金蝶与MES系统接口开发配置

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

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

元数据配置解析

我们将使用以下元数据配置来实现从MySQL数据库中获取生产领料单新增深圳天一-原材料-好的相关信息:

{
  "api": "select",
  "effect": "QUERY",
  "method": "POST",
  "number": "生产订单号",
  "id": "领料单号",
  "request": [
    {
      "field": "main_params",
      "label": "主参数",
      "type": "object",
      "describe": "对应其它请求字段内SQL语句的主参数,必须一一对应。",
      "value": "1",
      "children": [
        {
          "field": "limit",
          "label": "限制结果集返回的行数",
          "type": "int",
          "describe": "必要的参数!LIMIT 子句用于限制查询结果返回的行数。它指定了查询应该返回的最大行数。例如,LIMIT 10 表示查询结果只包含最多 10 行数据。这对于分页查询非常有用,可以在每次查询中返回一定数量的结果。",
          "value": "{PAGINATION_PAGE_SIZE}"
        },
        {
          "field": "offset",
          "label": "偏移量",
          "type": "int",
          "describe": "OFFSET 子句用于指定查询结果的起始位置或偏移量。它表示查询应该从结果集的哪一行开始返回数据。例如,OFFSET 20 表示查询应该从结果集的第 21 行开始返回数据。结合 LIMIT 子句使用时,OFFSET 指定了查询结果的起始行数。",
          "value": "{PAGINATION_START_ROW}"
        }
      ]
    }
  ],
  ...
}

主SQL语句解析

主SQL语句用于定义具体的数据提取逻辑。以下是我们使用的主SQL语句:

SELECT  
    case m.delivery_org
        when 'T01.01' then CONCAT('HJ', CAST(hj1.id AS CHAR))
        when 'T04' then CONCAT('HJGD', CAST(hj1.id AS CHAR))
        else CONCAT('HJ', CAST(hj1.id AS CHAR))
    end as 生产订单号,
    concat('LLY', cast(d.id as CHAR)) as 领料单号,
    date(d.update_time) as 日期,
    d.mode_no as 计划跟踪号,
    hj.part_no as 成品料号,
    d.part_no as 物料编号,
    d.confirm_numb as 数量,
    d.create_name as 备注,
    d.uuid as sourceid,
    m.delivery_org as 供应组织
FROM
    wms_outstock_confirm_main_task_detail d
LEFT JOIN wms_instock_out_task_detail p on p.uuid = d.connect_uuid
LEFT JOIN mbs_bom_take_apart_detail bom on bom.take_apart_detail_uuid = p.take_apart_detail_uuid
LEFT JOIN mbs_nuclear_price_task hj on hj.mold_no = d.mode_no and hj.part_no = bom.part_no
LEFT JOIN mbs_nuclear_price_info hj1 on hj1.nuclear_price_task_uuid = hj.nuclear_price_task_uuid
LEFT JOIN mbs_order_plan_bom l on d.mode_no = l.bom_no
LEFT JOIN mbs_order_bom m on m.bom_uuid = l.bom_uuid
WHERE
    d.confirm_status = '20'
AND d.matterial_type = '1'
AND d.company_code = 'TYZN'
AND d.update_time > '2023-08-01'
AND hj1.create_time > (select config_value from sys_config where config_id=337)
AND d.is_success != '1'
LIMIT :limit OFFSET :offset;

参数绑定与优化

在上述SQL语句中,我们使用了:limit:offset作为动态字段。这些字段需要与请求参数进行绑定,以确保查询能够正确执行。

具体步骤如下:

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

通过这种方式,我们可以提高查询语句的可读性和维护性,并确保动态字段与请求参数之间的一一对应关系,从而保证查询的准确性和安全性。

实际应用案例

假设我们需要分页获取生产领料单的数据,每页显示10条记录,从第0条记录开始。我们可以设置如下请求参数:

{
  main_params: {
    limit: 10,
    offset: 0
  }
}

执行上述配置后,系统将自动生成并执行如下SQL语句:

SELECT  
    case m.delivery_org
        when 'T01.01' then CONCAT('HJ', CAST(hj1.id AS CHAR))
        when 'T04' then CONCAT('HJGD', CAST(hj1.id AS CHAR))
        else CONCAT('HJ', CAST(hj1.id AS CHAR))
    end as 生产订单号,
    concat('LLY', cast(d.id as CHAR)) as 领料单号,
    date(d.update_time) as 日期,
    d.mode_no as 计划跟踪号,
    hj.part_no as 成品料号,
    d.part_no as 物料编号,
    d.confirm_numb as 数量,
    d.create_name as 备注,
    d.uuid as sourceid,
    m.delivery_org as 供应组织
FROM
    wms_outstock_confirm_main_task_detail d
LEFT JOIN wms_instock_out_task_detail p on p.uuid = d.connect_uuid
LEFT JOIN mbs_bom_take_apart_detail bom on bom.take_apart_detail_uuid = p.take_apart_detail_uuid
LEFT JOIN mbs_nuclear_price_task hj on hj.mold_no = d.mode_no and hj.part_no = bom.part_no
LEFT JOIN mbs_nuclear_price_info hj1 on hj1.nuclear_price_task_uuid = hj.nuclear_price_task_uuid
LEFT JOIN mbs_order_plan_bom l on d.mode_no = l.bom_no
LEFT JOIN mbs_order_bom m on m.bom_uuid = l.bom_uuid
WHERE 
   ...
LIMIT ? OFFSET ?;

通过这种方式,我们能够高效地从MySQL数据库中提取所需的数据,并为后续的数据处理和写入阶段做好准备。 电商OMS与WMS系统接口开发配置

数据集成中的ETL转换:将源数据转换为金蝶云星空API接口格式

在数据集成生命周期的第二步中,ETL(提取、转换、加载)过程尤为关键。本文将详细探讨如何使用轻易云数据集成平台,将源平台的数据通过ETL转换为金蝶云星空API接口所能接收的格式,并最终写入目标平台。

元数据配置解析

元数据配置是实现ETL过程的核心。以下是一个典型的元数据配置示例:

{
  "api": "batchSave",
  "effect": "EXECUTE",
  "method": "POST",
  "number": "FBillNo",
  "id": "FID",
  "name": "FBillNo",
  "idCheck": true,
  ...
}

该配置定义了API接口的基本信息,如api表示调用的接口名称,method表示HTTP请求方法,numberid则用于标识单据编号和唯一标识符。

请求字段映射

在请求字段映射中,我们需要将源平台的数据字段与目标平台的字段进行对应。例如:

{
  "field": "FBillNo",
  "label": "单据编号",
  "type": "string",
  "value": "{{领料单号}}"
},
{
  "field": "FDate",
  "label": "日期",
  "type": "string",
  "value": "{{日期}}"
},
...

上述配置将源平台中的“领料单号”和“日期”字段映射到金蝶云星空API接口中的FBillNoFDate字段。

数据转换逻辑

为了确保数据能够正确地被目标平台接受,我们需要对某些字段进行转换。例如,供应组织的转换逻辑如下:

{
  "field": "FStockOrgId",
  "label": "发料组织",
  ...
  "value": "_function case '{{供应组织}}' when 'T01.01' then 'T01.06' when 'T04' then 'T04' else '' end"
}

这里使用了一个函数 _function case '{{供应组织}}' ... end 来根据不同的供应组织代码进行相应的转换。这种方式确保了数据的一致性和准确性。

明细项处理

对于包含多个明细项的数据结构,我们需要定义一个数组类型的字段,并在其中嵌套子字段。例如:

{
  "field": "FEntity",
  ...
  "children": [
    {
      ...
      {
        "field": "FMaterialId",
        ...
        "value": "{{items.物料编号}}"
      },
      {
        ...
      }
    }
    ...
  ]
}

上述配置将明细项中的“物料编号”映射到目标平台的 FMaterialId 字段,并且支持多层嵌套结构,以处理复杂的数据关系。

特殊处理逻辑

有些字段需要通过查找或计算来获取其值。例如:


{
  ...
  {
    ...
    {
      ...
      {
        ...
        {
          ...
          {
            ...
            {
              ...
              {
                ...
                {
                  ...
                  {
                    ...
                    {
                      ...
                      {
                        ...
                        {
                          ...
                          {
                            ...
![用友与SCM系统接口开发配置](https://pic.qeasy.cloud/T17.png~tplv-syqr462i7n-qeasy.image)
更多系统对接方案