将数据ETL转换并写入金蝶云星空的实现步骤

  • 轻易云集成顾问-孙传友

MySQL 数据集成到金蝶云星空案例分享:SLB生产领料单新增深圳天一-带料委外-好

在实际生产环境中,如何将MySQL中的数据高效、准确地集成到金蝶云星空平台,是每个系统集成顾问都需要面对和解决的核心问题。本文将以具体的实施方案“SLB生产领料单新增深圳天一-带料委外-好”为例,详细介绍从MySQL获取数据并批量写入至金蝶云星空的技术实现。

首先,我们通过编写一个定时任务来可靠地抓取MySQL接口的数据。例如,通过调用select API接口,从MySQL数据库中提取所需的原始数据。这一步骤尤为关键,因为它不仅要处理大量的数据吞吐,还必须确保不漏掉任何关键信息。在此过程中,我们还会对API响应进行分页和限流处理,以保证系统负载均衡和性能稳定。

接下来,需要对这些从MySQL获得的数据进行预处理,包括但不限于格式转换、数据过滤等操作,这些操作可以通过支持自定义逻辑的数据转换工具便捷完成。做好预处理后,再使用batchSave API,将这些整理后的数据批量写入到金蝶云星空平台内。特别值得注意的是,为了确保整个过程具备良好的健壮性与容错能力,我们在每一个关键环节都设置了异常检测及重试机制,并结合统一监控与告警系统,以实时跟踪任务状态和性能表现,从而及时发现与解决可能出现的问题。

最后,为了适应特定业务需求,在该集成方案中特别设计了一套定制化的数据映射规则,使得从元数据配置、到流程设计,再到最终执行,每一步都能直观管理与可追溯,显著提高了整个项目的执行效率和成功率。 企业微信与ERP系统接口开发配置

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

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

元数据配置解析

首先,我们需要理解元数据配置中的各个字段及其作用:

  • api: 指定API类型,这里为select
  • effect: 表示操作的效果,这里为QUERY,即查询操作。
  • method: 请求方法,这里为POST
  • number, id: 分别表示生产订单号和领料单号,用于标识和关联数据。
  • request: 包含主参数,主要用于SQL语句中的动态参数绑定。
    • main_params: 主参数对象,包含两个子字段:
    • limit: 限制结果集返回的行数,用于分页查询。
    • offset: 偏移量,指定查询结果的起始位置。

此外,还有一个关键字段:

  • main_sql: 主SQL查询语句,其中包含动态字段如:limit:offset,需要在执行查询时进行参数绑定。

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 生产订单号,
a.part_no  as 成品编号,
c.mode_no  as 计划跟踪号,
CONCAT('LLB',CAST(a.id AS CHAR)) as 领料单号,
date(a.update_time) as 日期,
CONCAT(a.part_no,'_WW') as 物料编号,
a.confirm_numb  as 数量,e.real_name,
a.id as sourceid,
0.000001 as 工时,
m.delivery_org as 供应组织
from wms_instock_confirm_task_detail a
left join wms_instock_purchase_task_detail c on c.out_type='1' and c.matterial_type='4'
left join wms_instock_confirm_main_task_detail b on b.connect_uuid=c.uuid
left join mbs_nuclear_price_task hj on hj.mold_no=c.mode_no and hj.part_no=a.part_no
left join mbs_nuclear_price_info hj1 on hj1.nuclear_price_task_uuid=hj.nuclear_price_task_uuid
left join sys_user e on e.user_id=a.create_by
left join mbs_order_plan_bom l on c.mode_no=l.bom_no
left join mbs_order_bom m on m.bom_uuid=l.bom_uuid
where a.connect_uuid=b.uuid
 and a.company_code='TYZN'
 and a.update_time>'2023-08-01'
 and hj1.create_time>(select config_value from sys_config where config_id=337)
 and a.is_success !='1' and a.is_success4='1'
 limit :limit offset :offset

在这段SQL中,我们使用了多个表的连接操作,并通过条件过滤来获取所需的数据。特别需要注意的是limit :limit offset :offset部分,这是分页查询的关键。

参数绑定与执行

为了确保SQL语句中的动态字段与请求参数一一对应,我们需要进行参数绑定。具体步骤如下:

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

例如:

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 生产订单号,
a.part_no  as 成品编号,
c.mode_no  as 计划跟踪号,
CONCAT('LLB',CAST(a.id AS CHAR)) as 领料单号,
date(a.update_time) as 日期,
CONCAT(a.part_no,'_WW') as 物料编号,
a.confirm_numb  as 数量,e.real_name,
a.id as sourceid,
0.000001 as 工时,
m.delivery_org as 供应组织
from wms_instock_confirm_task_detail a
left join wms_instock_purchase_task_detail c on c.out_type='1' and c.matterial_type='4'
left join wms_instock_confirm_main_task_detail b on b.connect_uuid=c.uuid
left join mbs_nuclear_price_task hj on hj.mold_no=c.mode_no and hj.part_no=a.part_no
left join mbs_nuclear_price_info hj1 on hj1.nuclear_price_task_uuid=hj.nuclear_price_task_uuid
left join sys_user e on e.user_id=a.create_by
left join mbs_order_plan_bom l on c.mode_no=l.bom_no
left join mbs_order_bom m on m.bom_uuid=l.bom_uuid
where a.connect_uuid=b.uuid
 and a.company_code='TYZN'
 and a.update_time>'2023-08-01'
 and hj1.create_time>(select config_value from sys_config where config_id=337)
 and a.is_success !='1' and a.is_success4='1'
 limit ? offset ?

然后,在执行查询时,将请求中的分页参数绑定到占位符上。例如:

PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setInt(1, limitValue);
pstmt.setInt(2, offsetValue);
ResultSet rs = pstmt.executeQuery();

通过这种方式,可以确保SQL语句的可读性和维护性,同时提高查询的准确性和安全性。

实际应用案例

假设我们需要从MySQL数据库中获取生产领料单的数据,并且每次只返回10条记录,从第20条记录开始。我们可以设置分页参数如下:

{
 "main_params": {
   "limit": "10",
   "offset": "20"
 }
}

然后,通过轻易云数据集成平台发送POST请求,调用上述配置的API,即可获取所需的数据。

以上就是使用轻易云数据集成平台调用MySQL接口获取并加工数据的详细技术案例。通过合理配置元数据和优化SQL语句,可以高效地实现跨系统的数据集成。 如何对接金蝶云星空API接口

轻易云数据集成平台:将源平台数据ETL转换并写入金蝶云星空API接口

在轻易云数据集成平台中,完成数据生命周期的第二步,即将已经集成的源平台数据进行ETL转换,并转为目标平台金蝶云星空API接口所能够接收的格式,是一个关键环节。本文将详细探讨如何利用元数据配置,将生产领料单新增深圳天一-带料委外-好的数据转换并写入金蝶云星空。

数据请求与清洗

在进行ETL转换之前,首先需要对源数据进行请求和清洗。假设我们已经从源系统获取了以下结构的数据:

{
  "领料单号": "LLD20231001",
  "生产订单号": "PO20231001",
  "日期": "2023-10-01",
  "成品编号": "CP001",
  "供应组织": "T01.01",
  "items": [
    {
      "物料编号": "WL001",
      "数量": 100,
      "计划跟踪号": "JH001"
    },
    {
      "物料编号": "WL002",
      "数量": 200,
      "计划跟踪号": "JH002"
    }
  ]
}

数据转换与写入

根据元数据配置,我们需要将上述源数据转换为金蝶云星空API接口所能接收的格式。以下是具体的配置和操作步骤。

配置API请求

元数据配置中的request部分定义了需要发送给金蝶云星空API的数据字段及其映射关系。以下是主要字段的映射:

  • FBillNo 映射到 领料单号
  • FDate 映射到 日期
  • FMOBillNO1 映射到 生产订单号
  • FMaterialID1 映射到 成品编号
  • FStockOrgIdFPrdOrgId 根据 供应组织 的值进行条件转换
  • 明细部分(FEntity)包含每个物料的详细信息,如物料编码、数量、计划跟踪号等
转换逻辑示例
  1. 主表字段转换

    {
     "FBillNo": "{{领料单号}}",
     "FDate": "{{日期}}",
     ...
     "FMOBillNO1": "{{生产订单号}}",
     ...
     "FMaterialID1": "{{成品编号}}"
    }
  2. 条件转换

    对于发料组织和生产组织,根据供应组织的不同值进行条件判断:

    {
     ...
     "FStockOrgId": "_function case '{{供应组织}}' when 'T01.01' then 'T01.06' when 'T04' then 'T04' else '' end",
     ...
     "FPrdOrgId": "_function case '{{供应组织}}' when 'T01.01' then 'T01.06' when 'T04' then 'T04' else '' end"
    }
  3. 明细字段转换

    明细部分涉及数组处理,每个物料项都需要进行相应的字段映射:

    {
     ...
     "FEntity": [
       {
         ...
         "FMaterialId": "{{items.物料编号}}",
         ...
         "FAppQty": "{{items.数量}}",
         ...
         "FMtoNo": "{{items.计划跟踪号}}"
       },
       ...
     ]
    }
最终请求体示例

根据上述配置和映射关系,最终生成的请求体如下:

{
  "FormId": "PRD_PickMtrl",
  ...
  "Model": {
    ...
    "FBillNo": "LLD20231001",
    ...
    "FDate": "2023-10-01",
    ...
    ...
    ... //其他主表字段
    ... 
    ... //明细数组
    ... 
    ... 
    ... //其他附加参数
  },
  ...
}

提交与审核

在所有字段都正确映射并生成请求体后,通过POST方法调用金蝶云星空API接口,实现批量保存并自动提交审核。

POST /k3cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.BatchSave.common.kdsvc HTTP/1.1
Host: {K3CloudHost}
Content-Type: application/json
{
  // 上述生成的请求体内容
}

通过上述步骤,可以实现将生产领料单新增深圳天一-带料委外-好的数据无缝地转换并写入金蝶云星空系统。这不仅提高了数据处理效率,也确保了各系统间的数据一致性和准确性。 金蝶与外部系统打通接口

更多系统对接方案