MySQL 数据集成到金蝶云星空案例分享:SLB生产领料单新增深圳天一-带料委外-好
在实际生产环境中,如何将MySQL中的数据高效、准确地集成到金蝶云星空平台,是每个系统集成顾问都需要面对和解决的核心问题。本文将以具体的实施方案“SLB生产领料单新增深圳天一-带料委外-好”为例,详细介绍从MySQL获取数据并批量写入至金蝶云星空的技术实现。
首先,我们通过编写一个定时任务来可靠地抓取MySQL接口的数据。例如,通过调用select
API接口,从MySQL数据库中提取所需的原始数据。这一步骤尤为关键,因为它不仅要处理大量的数据吞吐,还必须确保不漏掉任何关键信息。在此过程中,我们还会对API响应进行分页和限流处理,以保证系统负载均衡和性能稳定。
接下来,需要对这些从MySQL获得的数据进行预处理,包括但不限于格式转换、数据过滤等操作,这些操作可以通过支持自定义逻辑的数据转换工具便捷完成。做好预处理后,再使用batchSave API,将这些整理后的数据批量写入到金蝶云星空平台内。特别值得注意的是,为了确保整个过程具备良好的健壮性与容错能力,我们在每一个关键环节都设置了异常检测及重试机制,并结合统一监控与告警系统,以实时跟踪任务状态和性能表现,从而及时发现与解决可能出现的问题。
最后,为了适应特定业务需求,在该集成方案中特别设计了一套定制化的数据映射规则,使得从元数据配置、到流程设计,再到最终执行,每一步都能直观管理与可追溯,显著提高了整个项目的执行效率和成功率。
使用轻易云数据集成平台调用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语句中的动态字段与请求参数一一对应,我们需要进行参数绑定。具体步骤如下:
- 将主SQL查询语句中的动态字段
:limit
和:offset
替换为占位符(例如?
)。 - 在执行查询之前,通过参数绑定的方法,将请求参数的值与占位符进行对应绑定。
例如:
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语句,可以高效地实现跨系统的数据集成。
轻易云数据集成平台:将源平台数据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
映射到成品编号
FStockOrgId
和FPrdOrgId
根据供应组织
的值进行条件转换- 明细部分(
FEntity
)包含每个物料的详细信息,如物料编码、数量、计划跟踪号等
转换逻辑示例
-
主表字段转换
{ "FBillNo": "{{领料单号}}", "FDate": "{{日期}}", ... "FMOBillNO1": "{{生产订单号}}", ... "FMaterialID1": "{{成品编号}}" }
-
条件转换
对于发料组织和生产组织,根据供应组织的不同值进行条件判断:
{ ... "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" }
-
明细字段转换
明细部分涉及数组处理,每个物料项都需要进行相应的字段映射:
{ ... "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
{
// 上述生成的请求体内容
}
通过上述步骤,可以实现将生产领料单新增深圳天一-带料委外-好的数据无缝地转换并写入金蝶云星空系统。这不仅提高了数据处理效率,也确保了各系统间的数据一致性和准确性。