MySQL数据集成到金蝶云星空的技术实现案例分享——GH生产汇报单新增
在实际业务场景中,企业通常需要将各类系统间的数据进行无缝对接,以确保信息流动畅通、实时性和准确性。本文将详解一个具体的系统对接实例:如何通过轻易云数据集成平台,将MySQL数据库中的“GH生产汇报单”数据高效、安全地集成到金蝶云星空。
首先,我们面临的挑战包括:
- 如何快速且可靠地从MySQL接口抓取“GH生产汇报单”的数据信息。
- 确保大量数据能够顺利写入到金蝶云星空,而不漏单、不重复。
- 处理两者间的数据格式差异,并支持自定义转换逻辑以满足业务需求。
为了解决这些问题,我们规划了以下几个关键步骤:
任务调度与监控
使用轻易云的平台功能,通过定时任务调度,周期性地调用MySQL API (select)来获取最新的“GH生产汇报单”数据。同时,利用其内置的集中监控和告警系统,对每次任务执行情况及性能指标进行实时跟踪,如发现异常立刻告警并触发相应重试机制。
数据转换与映射
由于MySQL和金蝶云星空之间可能存在结构差异,需要通过轻易云提供的可视化数据流设计工具,自定义设定字段映射关系,并实施必要的数据清洗和格式转换。这确保了源端与目标端字段一一对应,使得后续的数据写入过程更加平滑。
高效批量写入
为了提升处理效率,我们采用分批次导出的方式,将转化后的数据信息通过金蝶API (batchSave)一次性批量写入到金蝶云星空中,可有效解决大规模数据传输时可能导致网络拥堵或时间延迟的问题。此外,为了避免漏记或重复录入,还引入唯一标识验证机制,每条记录均会校验是否已存在于目标库中,从而保证最终一致性。
上述方案只是整个流程的一部分,但它强调了每个环节的重要技术点,通过合理配置元数据,以及精准控制各项操作,可以极大提升整体效率,并保证对接过程中万无一失。在下文中,将详细介绍具体实现这些关键步骤的方法、涉及的API请求示例以及异常处理策略等内容。
使用轻易云数据集成平台调用MySQL接口获取并加工数据
在数据集成生命周期的第一步中,调用源系统MySQL接口select
获取并加工数据是至关重要的一环。本文将深入探讨如何通过轻易云数据集成平台实现这一过程,并详细解析相关的元数据配置。
元数据配置解析
元数据配置是实现数据请求与清洗的关键。以下是一个典型的元数据配置示例:
{
"api": "select",
"effect": "QUERY",
"method": "SQL",
"number": "入库单号",
"id": "入库单号",
"name": "name",
"request": [
{
"field": "main_params",
"label": "主参数",
"type": "object",
"describe": "对应主查询语句内的动态参数对象",
"children": [
{
"field": "limit",
"label": "返回的记录数",
"type": "int",
"describe": "你可以使用 LIMIT 属性来设定返回的记录数。",
"value": 100
},
{
"field": "offset",
"label": "数据偏移量",
"type": "int",
"describe": "你可以通过OFFSET指定SELECT语句开始查询的数据偏移量。默认情况下偏移量为0。"
}
]
}
],
"otherRequest": [
{
"field": "main_sql",
"label": "主查询语句",
"type": "string",
"describe": ":created_at 格式与主参数字段进行对应",
``value``: ``"select a.dispatch_prefix as 生产订单号,\n d.bom_uuid,\n e.confrim_no as 入库单号,\n date(a.update_time) as 日期,\n a.part_no as 成品编号,\n d.bom_no as 计划跟踪号,\n a.instock_numb as 入库数量,\n a.id as sourceid,\n f1.id,\n ((select ifnull(sum(f.man_hour),0) from eng_craft_card_item f where f.card_id=f1.id and f.process_id !=1267)+(select ifnull(sum(f.man_hour),0) from eng_craft_card_item f where f.card_id=f1.id and f.process_id =1267)/(select dispatched_num from mes_dispatch_record_process where company_code='gdty' and dispatch=a.dispatch_prefix limit 1))*a.instock_numb/3600 as 工时\nfrom wms_instock_confirm_main_task_detail a\nleft join oms_order_bom d on d.bom_uuid=(select bom_uuid from mes_dispatch_record_process where company_code='gdty' and dispatch=a.dispatch_prefix LIMIT 1 )\nleft join wms_instock_confirm_task e on a.confirm_task_uuid=e.confirm_task_uuid\nleft join eng_craft_card f1 on f1.oms_order_bom_uuid=d.bom_uuid\nwhere a.company_code='gdTY' and a.confirm_status='20' and a.matterial_type=4 and d.material_source='2' \nand a.is_defect='0' and a.is_success !='1' and d.kingdee_fwl='0'\n limit :limit offset :offset"`
}
],
``autoFillResponse``: true,
``omissionRemedy``: {
``crontab``: ``"1 1 1 1 1"``,
``takeOverRequest``: []
}
}
数据请求与清洗
在上述元数据配置中,api
字段指定了调用的接口类型为select
,而effect
字段表明这是一个查询操作。method
字段则明确了使用SQL语句进行操作。
主参数配置
主参数部分定义了两个关键字段:limit
和offset
。
limit
: 用于设定返回记录数,默认值为100。offset
: 用于指定查询起始位置,默认值为0。
这些参数通过动态对象传递给主查询语句,实现灵活的数据请求控制。
主查询语句
主查询语句是整个数据请求过程的核心。以下是该示例中的主查询语句:
select
a.dispatch_prefix as 生产订单号,
d.bom_uuid,
e.confrim_no as 入库单号,
date(a.update_time) as 日期,
a.part_no as 成品编号,
d.bom_no as 计划跟踪号,
a.instock_numb as 入库数量,
a.id as sourceid,
f1.id,
((select ifnull(sum(f.man_hour),0)
from eng_craft_card_item f
where f.card_id=f1.id
and f.process_id !=1267)
+(select ifnull(sum(f.man_hour),0)
from eng_craft_card_item f
where f.card_id=f1.id
and f.process_id =1267)
/(select dispatched_num
from mes_dispatch_record_process
where company_code='gdty'
and dispatch=a.dispatch_prefix limit 1))
*a.instock_numb/3600 as 工时
from wms_instock_confirm_main_task_detail a
left join oms_order_bom d on d.bom_uuid=(select bom_uuid from mes_dispatch_record_process where company_code='gdty' and dispatch=a.dispatch_prefix LIMIT 1 )
left join wms_instock_confirm_task e on a.confirm_task_uuid=e.confirm_task_uuid
left join eng_craft_card f1 on f1.oms_order_bom_uuid=d.bom_uuid
where
a.company_code='gdTY'
and a.confirm_status='20'
and a.matterial_type=4
and d.material_source='2'
and a.is_defect='0'
and a.is_success !='1'
and d.kingdee_fwl='0'
limit :limit offset :offset
该SQL语句通过多表联接和子查询获取所需的数据,并根据传入的动态参数进行分页处理。
自动填充响应与遗漏补救
在元数据配置中,autoFillResponse
设置为true,这意味着系统会自动填充响应结果,简化了后续的数据处理步骤。此外,遗漏补救机制(如crontab调度)确保了在特殊情况下的数据完整性。
实践案例
假设我们需要获取最近更新的100条生产汇报单信息,可以通过以下方式实现:
{
``main_params``: {
``limit``:100,
``offset``:0
},
``main_sql``:"上述SQL查询语句"
}
通过这种方式,我们可以高效地从MySQL数据库中提取并加工所需的数据,为后续的数据转换与写入奠定坚实基础。
综上所述,通过合理配置元数据,我们能够利用轻易云数据集成平台高效地调用MySQL接口,实现复杂的数据请求与清洗操作。这不仅提升了业务透明度和效率,也为后续的数据处理提供了有力支持。
使用轻易云数据集成平台将生产汇报单数据转换并写入金蝶云星空API接口
在数据集成的生命周期中,ETL(提取、转换、加载)过程是关键步骤之一。本文将详细探讨如何使用轻易云数据集成平台,将已经集成的源平台数据进行ETL转换,转为金蝶云星空API接口所能接收的格式,并最终写入目标平台。
配置元数据
首先,我们需要配置元数据,以便将生产汇报单的数据正确映射到金蝶云星空API接口的字段中。以下是元数据配置的详细信息:
{
"api": "batchSave",
"effect": "EXECUTE",
"method": "POST",
"number": "FBillNo",
"id": "FID",
"name": "FBillNo",
"idCheck": true,
"operation": {
"method": "merge",
"field": "入库单号",
"bodyName": "items",
"bodySum": ["工时", "入库数量"],
"header": ["生产订单号", "日期", "入库单号"],
"body": ["成品编号", "入库数量", "工时"]
},
...
}
数据请求与清洗
在ETL过程中,首先需要从源系统请求数据并进行清洗。假设我们已经完成了这一步,并获得了如下结构的数据:
{
"生产订单号": "PO123456",
"日期": "2023-10-01",
"入库单号": "RKD123456",
...
}
数据转换
接下来,我们需要将这些源数据转换为金蝶云星空API接口所能接受的格式。根据元数据配置,我们可以看到需要映射的字段和相应的值。例如:
FBillNo
映射到入库单号
FDate
映射到日期
FPrdOrgId
固定值T04
FWorkshipIdH
动态查询值_findCollection find FWorkShopID_FName from f7ea9e85-4370-3b51-951d-4eae737c2093 where FBillNo={{生产订单号}}
以下是一个完整的数据转换示例:
{
"FormId": "PRD_MORPT",
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
{
...
![打通金蝶云星空数据接口](https://pic.qeasy.cloud/T26.png~tplv-syqr462i7n-qeasy.image)