MySQL数据集成到金蝶云星空的实战案例:SYY生产用料清单新增-原材料深圳天一-好
在企业信息化进程中,实现不同系统之间的数据无缝对接是提升运营效率的关键步骤。本次技术案例将重点介绍如何通过轻易云数据集成平台,将MySQL中的生产用料清单数据高效、可靠地集成至金蝶云星空环境下。具体项目为“SYY生产用料清单新增-原材料深圳天一-好”。
API接口设计与实现
-
MySQL获取数据的API设计
- 对于从MySQL数据库提取生产用料清单,我们采用了标准的
select
语句,结合定时任务来确保数据抓取的及时性和完整性。通过合理设置分页和限流机制,以保证在大量并发请求情况下,不会对数据库性能造成压力。
- 对于从MySQL数据库提取生产用料清单,我们采用了标准的
-
金蝶云星空写入数据的API配置
- 金蝶云星空提供了灵活强大的
batchSave
API接口,用于批量写入获取到的数据。在此过程中,我们需要特别注意映射源端(MySQL)与目标端(金蝶云星空)的字段差异,通过自定义转换逻辑进行适配。这不仅解决了格式差异问题,也确保了业务需求能够精准落实。
- 金蝶云星空提供了灵活强大的
数据处理流程
为了保障整个数据集成过程中的稳定性和高效性,本方案引入了一系列控制措施:
-
集中监控与告警系统:实时跟踪每次数据提取、转换及写入操作。一旦出现异常,系统将立即告警,并触发错误重试机制,最大程度上减少因短暂故障导致的数据漏失。
-
自定义转换逻辑:针对不同业务场景,自行定制相应的数据处理规则,例如单位换算、多级分类等特殊需求,使得最终写入金蝶云星空的数据符合实际应用要求。
-
优化与扩展特性的应用 在本次实例中,为提高大批量数据快速处理能力,以及保障实时更新效果,我们利用以下几项关键特性:
-
高吞吐量支持:使得每天数万条生产用料记录可快速同步到金蝶系统中,避免任何延迟带来的库存或采购决策误差。
-
批量集成功能:科学分配任务负载,将大规模数据分块处理,有序推送至目标系统,有利于平衡服务器资源,提高整体运行效率。
-
这些精细化、严谨而又不失灵活性的设计理念,使得我们的方案能够稳健执行,并持续为企业创造价值。在后续章节中, 我们将详细剖
调用MySQL接口select获取并加工数据
在轻易云数据集成平台的生命周期中,第一步是调用源系统MySQL接口select获取并加工数据。本文将详细探讨如何配置和使用该平台的元数据,以实现高效的数据请求与清洗。
配置元数据
元数据配置是实现数据集成的关键步骤。以下是一个具体的元数据配置示例:
{
"api": "select",
"effect": "QUERY",
"method": "POST",
"number": "生产订单号",
"id": "{{生产订单号}}{{原材料编号}}",
"idCheck": true,
"request": [
{
"field": "main_params",
"label": "main_params",
"type": "object",
"describe": "111",
"value": "1",
"children": [
{
"field": "limit",
"label": "limit",
"type": "string",
"value": "100"
},
{
"field": "offset",
"label": "offset",
"type": "string"
}
]
}
],
"otherRequest": [
{
"field": "main_sql",
"label": "main_sql",
"type": "string",
"describe": "111",
"value": "
select
case mm.delivery_org
when 'T01.01' then CONCAT('HJ',CAST(i.id AS CHAR))
when 'T04' then CONCAT('HJGD',CAST(i.id AS CHAR))
end as 生产订单号,
a.part_no as 成品编号,
now() as 日期,
a.req_num as 生产数量,
a.mold_no as 计划跟踪号,
m.part_no as 原材料编号,
i.quantity as 分子,
1 as 分母,
i.id as sourceid,
a.req_num*i.quantity as 领料数量,
mm.delivery_org as 供应组织
FROM mbs_nuclear_price_info i
LEFT JOIN mbs_nuclear_price_task a ON i.nuclear_price_task_uuid = a.nuclear_price_task_uuid
LEFT JOIN basic_material_info m on i.raw_material_info=m.material_info_no
LEFT JOIN mbs_order_plan_bom l on a.mold_no=l.bom_no
LEFT JOIN mbs_order_bom mm on mm.bom_uuid=l.bom_uuid
WHERE
a.is_cancel = '1'
and a.company_code = 'TYZN'
and i.outsourced_type='1'
AND i.create_time>(select config_value from sys_config where config_id=337)
and is_success1 !='1' and i.is_success='1'
limit :limit offset :offset"
}
],
“autoFillResponse”: true,
“omissionRemedy”: {
“crontab”: “1 1 1 1 1”,
“takeOverRequest”: []
}
}
数据请求与清洗
在上述配置中,api
字段指定了要调用的MySQL接口为select
,并通过POST
方法发送请求。主要参数包括:
number
: 用于标识生产订单号。id
: 用于生成唯一标识符,结合了生产订单号和原材料编号。idCheck
: 设置为true,确保ID唯一性检查。
请求参数
请求参数定义在request
字段中,其中包含一个对象类型的main_params
,其子字段包括:
limit
: 限制返回记录数,默认值为100。offset
: 用于分页查询。
SQL查询语句
实际的数据查询由otherRequest
中的main_sql
字段定义,该字段包含了复杂的SQL查询语句,用于从多个表中提取所需的数据,并进行必要的转换和过滤。例如:
SELECT
CASE mm.delivery_org
WHEN 'T01.01' THEN CONCAT('HJ', CAST(i.id AS CHAR))
WHEN 'T04' THEN CONCAT('HJGD', CAST(i.id AS CHAR))
END AS 生产订单号,
a.part_no AS 成品编号,
NOW() AS 日期,
a.req_num AS 生产数量,
a.mold_no AS 计划跟踪号,
m.part_no AS 原材料编号,
i.quantity AS 分子,
1 AS 分母,
i.id AS sourceid,
a.req_num * i.quantity AS 领料数量,
mm.delivery_org AS 供应组织
FROM mbs_nuclear_price_info i
LEFT JOIN mbs_nuclear_price_task a ON i.nuclear_price_task_uuid = a.nuclear_price_task_uuid
LEFT JOIN basic_material_info m ON i.raw_material_info = m.material_info_no
LEFT JOIN mbs_order_plan_bom l ON a.mold_no = l.bom_no
LEFT JOIN mbs_order_bom mm ON mm.bom_uuid = l.bom_uuid
WHERE
a.is_cancel = '1'
AND a.company_code = 'TYZN'
AND i.outsourced_type = '1'
AND i.create_time > (SELECT config_value FROM sys_config WHERE config_id = 337)
AND is_success1 != '1'
AND i.is_success = '1'
LIMIT :limit OFFSET :offset;
自动填充响应与遗漏补救
配置中的autoFillResponse
设置为true,表示系统会自动填充响应结果。此外,还定义了一个定时任务(crontab)用于处理遗漏的数据请求。
通过以上配置,我们可以高效地从MySQL数据库中获取并加工所需的数据,为后续的数据转换与写入阶段打下坚实基础。这种全异步、多系统支持的平台特性,使得不同系统间的数据无缝对接成为可能,大大提升了业务透明度和效率。
使用轻易云数据集成平台进行ETL转换并写入金蝶云星空API接口
在数据集成的生命周期中,第二步是将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并转为目标平台——金蝶云星空API接口所能够接收的格式,最终写入目标平台。以下将详细介绍如何通过轻易云数据集成平台实现这一过程。
元数据配置解析
根据提供的元数据配置,我们需要将生产用料清单新增的数据转换为金蝶云星空API接口所能接受的格式。元数据配置如下:
{
"api": "batchSave",
"effect": "EXECUTE",
"method": "POST",
"idCheck": true,
"operation": {
"rowsKey": "array",
"rows": 1,
"method": "batchArraySave"
},
"request": [
{
"field": "FID",
"label": "FID",
"type": "string",
"value": "_findCollection find FID from d9c54956-106b-36e1-8018-91a8855f6316 where FMoBillNo={{生产订单号}}"
},
{
"field": "FEntity",
"label": "子项明细",
"type": "array",
...
}
],
...
}
数据提取与转换
首先,需要从源系统中提取相关的数据。以生产订单号为关键字,通过 _findCollection
方法从指定集合中查找相关字段值。例如,提取 FID
字段:
{
"field": "FID",
"label": "FID",
"type": "string",
"value": "_findCollection find FID from d9c54956-106b-36e1-8018-91a8855f6316 where FMoBillNo={{生产订单号}}"
}
这里使用了 _findCollection
方法,根据 生产订单号
查找对应的 FID
值。
接下来是对子项明细 FEntity
的处理,其中包括多个字段,如 FMaterialID2
, FMaterialType
, FDosageType
, 等等。这些字段需要根据源系统的数据进行相应的转换。例如:
{
...
{
"field": "FMaterialID2",
"label": "子项物料编码",
...
{"name":"ConvertObjectParser","params":"FNumber"},
...
{"value":"{{原材料编号}}"}
},
...
}
在这个例子中,使用了 ConvertObjectParser
转换器,将原材料编号转换为目标系统所需的格式。
数据写入
完成数据转换后,需要将这些数据写入到金蝶云星空系统。根据元数据配置中的 operation
部分,采用批量保存的方法:
{
...
{
"field":"Operation",
...
{"value":"batchSave"}
},
...
}
使用 HTTP POST 方法,将转换后的 JSON 数据发送到金蝶云星空 API 接口:
{
...
{
...
{"method":"POST"},
...
},
}
特殊字段处理
某些字段需要进行特殊处理,例如标准用量、需求数量、应发数量等,这些字段需要进行四舍五入处理:
{
...
{
...
{"field":"FStdQty","value":"_function ROUND(\"{{领料数量}}\" , 3 )"},
{"field":"FNeedQty2","value":"_function ROUND(\"{{领料数量}}\" , 3 )"},
{"field":"FMustQty","value":"_function ROUND(\"{{领料数量}}\" , 3 )"},
...
}
}
通过 _function ROUND
函数,对领料数量进行小数点后三位的四舍五入操作。
提交与审核
最后,设置是否自动提交并审核,以及验证基础资料有效性等参数:
{
...
{"field":"IsAutoSubmitAndAudit","value":"false"},
{"field":"IsVerifyBaseDataField","value":"true"},
...
}
这些参数确保在写入过程中对数据进行严格校验,并决定是否自动提交和审核。
通过以上步骤,我们可以利用轻易云数据集成平台,实现从源系统到金蝶云星空系统的数据ETL转换和写入操作。这不仅提高了业务流程的自动化程度,还确保了数据的一致性和准确性。