MySQL 数据集成到金蝶云星空——SC 采购入库案例分享
在现代企业跨系统数据集成的复杂场景中,如何确保数据准确、实时、高效地流动,是每个技术团队必须面对的关键问题。本文将直击MySQL与金蝶云星空之间的数据对接,以"SC采购入库-深圳天一-OK"方案为例,深入探讨其实现过程中的技术要点。
系统环境概述
该案例涉及两个主要系统:MySQL数据库和金蝶云星空。其中,MySQL用于存储和处理核心业务数据,而金蝶云星空负责财务及供应链管理。直接的集成需求是将MySQL中的采购入库数据无缝导入到金蝶云星空,实现业务流程自动化。
技术挑战与解决方案
-
高吞吐量写入能力: 为了保证大量生产数据迅速且稳定地导入至MySQL,然后从中抽取并写入到金蝶云星空,我们采用分批次处理机制,通过select API定期抓取MySQL接口数据,并利用batchSave API批量写入目标系统。这不仅提升了整体处理效率,还降低了大规模单次操作可能带来的压力风险。
-
集中监控和告警: 集成过程中,我们引入了集中监控与告警功能。通过实时追踪任务状态及性能指标,确保任何异常情况能够及时被发现并妥善处理。例如,当出现网络延迟或API响应错误时,系统会自动触发告警,并执行预配置的重试策略,以保障任务最终成功完成。
-
自定义转换逻辑: 考虑到两者之间的数据格式差异,我们设计了一套灵活的数据转换规则,将源数据规范化为符合目标要求的结构。同时支持针对特定字段进行映射及逻辑运算,使得最终生成的报表准确反映各项业务内容。
-
异常检测与错误重试机制: 我们设置了详细的错误捕捉机制,对所有API调用进行严格校验。一旦检测到信息缺失或类型不符等常见问题,会立即记录日志并进入重试环节,有效地规避因偶发性故障导致的数据丢失等风险。
以上几个方面构建出一个高度可靠、快速响应且维护便捷的跨平台数据集成解决方案,为企业提供强有力的信息支撑。接下来我们详解具体实施步骤及代码示例,以帮助更多同业者应对类似挑战。
调用MySQL接口select获取并加工数据
在轻易云数据集成平台中,调用源系统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}"
}
]
}
],
...
}
数据请求与清洗
在上述配置中,我们定义了一个select
类型的API接口,用于从MySQL数据库中查询采购入库相关的数据。具体步骤如下:
-
定义主参数:
main_params
字段包含了SQL查询语句及其动态参数(如:limit
和:offset
)。- 动态参数通过占位符表示,并在执行查询时进行绑定。
-
绑定动态参数:
limit
和offset
分别表示分页查询中的行数和偏移量。- 在实际请求时,这些参数会被替换为具体的值,以实现分页查询。
SQL语句优化
为了提高查询效率和可维护性,我们可以对SQL语句进行优化。例如,将动态字段:limit
替换为占位符,并在执行查询前进行参数绑定:
select
c.business_no as 采购单号,
g.supplier_short_code as 供应商代码,
g.tax_points*100 as 税率,
e.is_give_away as 赠品,
case
when c.MATTERIAL_TYPE='1' then e.part_no
else a.part_no
end as 成品编号,
case
when c.MATTERIAL_TYPE='1' then e.pic_no
else h.pic_no
end as 图号,
c.ser_code as 条码,
case
when (c.out_type='2' AND c.MATTERIAL_TYPE='3') then a.confirm_numb
when (c.out_type='1' AND c.MATTERIAL_TYPE='4') then a.confirm_numb
when (c.out_type='1' AND c.MATTERIAL_TYPE='1') then a.instock_weight
else a.confirm_numb
end as 数量,
e.pur_price as 含税单价,
i.real_name as 采购员,
case
when left(a.part_no,2)='01' then ''
else c.mode_no
end as 计划跟踪号,
CONCAT(f.confrim_no,'_',CAST(a.id AS CHAR)) as 采购入库单号,
date(a.create_time) as 日期,
case
when (c.out_type='2' AND c.MATTERIAL_TYPE='3') then CONCAT(a.part_no,concat('_',c.current_process_code))
when (c.out_type='1' AND c.MATTERIAL_TYPE='3') then CONCAT(a.part_no,concat('_',c.current_process_code))
when (c.out_type='1' AND c.MATTERIAL_TYPE='4') then CONCAT(a.part_no,concat('_WW'))
when (c.out_type='1' AND c.MATTERIAL_TYPE='1') then a.part_no
else a.part_no
end as 物料编号,
...
from
wms_instock_confirm_task_detail a
left join
wms_instock_confirm_main_task_detail j on a.connect_uuid=j.uuid
...
where
a.connect_uuid=b.uuid
and
a.company_code='TYZN'
and
g.is_inner='1'
and
k.is_second_pur='1'
and
a.create_time>(select config_value from sys_config where config_id=341)
and
a.is_success4<>'1'
limit ? offset ?
通过这种方式,我们能够确保SQL语句的可读性和安全性,同时提高查询性能。
实践应用
在实际应用中,通过上述元数据配置,我们可以轻松实现从MySQL数据库中获取并加工数据。这一步骤不仅确保了数据请求的准确性,还为后续的数据转换与写入打下了坚实基础。
总之,通过合理配置元数据并优化SQL语句,可以有效提升数据集成过程中的效率和可靠性,为业务系统提供高质量的数据支持。
使用轻易云数据集成平台将源数据转换并写入金蝶云星空API接口
在数据集成生命周期的第二步中,我们需要将已经集成的源平台数据进行ETL(Extract, Transform, Load)转换,并转为目标平台——金蝶云星空API接口所能够接收的格式,最终写入目标平台。本文将详细介绍如何利用轻易云数据集成平台完成这一过程。
配置元数据
我们首先需要配置元数据,以确保数据能够正确地映射到金蝶云星空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"
},
{
...
}
],
...
}
数据转换与映射
在配置元数据时,我们需要特别注意字段的映射和转换规则。例如:
FBillTypeID
字段代表单据类型,使用ConvertObjectParser
将其值转换为金蝶云星空所需的格式。FStockOrgId
和FPurchaseOrgId
字段根据供应组织进行条件判断和转换。
{
...
{
"field":"FStockOrgId",
"label":"收料组织",
...
"value":"_function case '{{供应组织}}' when 'T01.01' then 'T01.06' when 'T04' then 'T04' else '' end"
},
{
...
}
}
明细信息处理
对于明细信息,我们使用数组形式来处理多条记录。每条记录包含多个字段,如物料编码、实收数量、单价等。这些字段同样需要进行适当的转换和映射。
{
...
{
"field":"FInStockEntry",
...
"children":[
{
...
{
"field":"FMaterialId",
...
"value":"{{物料编号}}"
},
{
...
}
}
]
}
}
财务信息处理
财务信息部分包含结算组织、付款组织等字段,这些字段也需要进行相应的转换和映射。例如:
{
...
{
...
{
"field":"FSettleOrgId",
...
"value":"_function case '{{供应组织}}' when 'T01.01' then 'T01' when 'T04' then 'T04' else '' end"
},
{
...
}
}
}
提交与审核
在所有字段都正确映射和转换后,我们需要将这些数据通过API接口提交到金蝶云星空,并选择是否自动提交并审核。
{
...
{
...
{
"field":"IsAutoSubmitAndAudit",
...
"value":"true"
},
{
...
}
}
}
通过上述步骤,我们可以确保源平台的数据经过ETL转换后,能够无缝对接到金蝶云星空API接口,实现高效的数据集成与写入。