From edb9196ffee3de711089d3cbe0536d81658b5ed1 Mon Sep 17 00:00:00 2001 From: wangyan Date: Mon, 20 Oct 2025 11:48:06 +0800 Subject: [PATCH] =?UTF-8?q?feat(device):=20=E5=A2=9E=E5=8A=A0=E9=99=A4?= =?UTF-8?q?=E5=B0=98=E5=99=A8=E8=AE=BE=E5=A4=87=E6=95=B0=E6=8D=AE=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除多余的 PageData 对象创建,简化 listTargetByEquId 方法调用- 增加对除尘器设备阈值数据的查询与处理逻辑- 优化设备ID匹配逻辑,明确区分高炉与除尘器设备 - 增加PLC_NAME字段以完善设备信息- 实现实时数据表的插入与更新逻辑,确保数据同步 - 扩展TbIronPlcMapper接口及XML映射文件,支持实时数据操作- 更新TagDescription枚举描述,提高标签可读性 -优化MesDeviceMonitoringMapper接口结构,移除冗余注释 --- .../controller/AppPosiDeviceController.java | 4 +- .../datasource/tbIron/TbIronPlcMapper.java | 38 +++- .../target/MesDeviceMonitoringMapper.java | 4 +- .../dataDocking/MesDataScheduled.java | 69 ++++++- .../scheduled/dataDocking/TagDescription.java | 22 +-- .../datasource/tbIron/TbIronPlcMapper.xml | 186 ++++++++++++++---- .../target/MesDeviceMonitoringMapper.xml | 2 + 7 files changed, 264 insertions(+), 61 deletions(-) diff --git a/src/main/java/com/zcloud/controller/AppPosiDeviceController.java b/src/main/java/com/zcloud/controller/AppPosiDeviceController.java index 008fd64..c178e1f 100644 --- a/src/main/java/com/zcloud/controller/AppPosiDeviceController.java +++ b/src/main/java/com/zcloud/controller/AppPosiDeviceController.java @@ -22,7 +22,6 @@ public class AppPosiDeviceController { @Resource private TbIronPlcMapper tbIronPlcMapper; - @Resource private MesDeviceMonitoringMapper mesDeviceMonitoringMapper; @@ -157,8 +156,7 @@ public class AppPosiDeviceController { String location = parma.get("location"); // 根据设备的地点和td1或者是t2td1判断出设备对应系统中的哪个 // 查出所有一氧化碳设备的阈值配置 - PageData equPd = new PageData(); - List targetAllList = tbIronPlcMapper.listTargetByEquId(equPd); + List targetAllList = tbIronPlcMapper.listTargetByEquId(); // 定义一个存储集合用于存储要入库的数据 List> dataList = new ArrayList<>(); // TODO: 这里要读表作对比然后存入数据库 diff --git a/src/main/java/com/zcloud/mapper/datasource/tbIron/TbIronPlcMapper.java b/src/main/java/com/zcloud/mapper/datasource/tbIron/TbIronPlcMapper.java index 0506d89..de5d660 100644 --- a/src/main/java/com/zcloud/mapper/datasource/tbIron/TbIronPlcMapper.java +++ b/src/main/java/com/zcloud/mapper/datasource/tbIron/TbIronPlcMapper.java @@ -5,11 +5,45 @@ import com.zcloud.entity.PageData; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import java.util.Map; public interface TbIronPlcMapper { ArrayList> listAll (); - List listTargetByEquId(PageData pd); -} + List listTargetByEquId(); + + List listDustDeviceAll(); + + /** + * 根据设备ID查询实时数据 + * @param equipmentId 设备ID + * @return 数据列表 + */ + List listRealtimeDataByEquipmentId(String equipmentId); + + /** + * 批量插入数据到实时表 + * @param dataList 数据列表 + */ + void insertBatchToRealtime(List> dataList); + + /** + * 单条插入数据到实时表 + * @param data 数据 + */ + void insertToRealtime(Map data); + + /** + * 批量更新从MES获取的数据 + * @param dataList 数据列表 + */ + void updateBatchToRealtime(List> dataList); + + /** + * 单条更新从MES获取的数据 + * @param data 数据 + */ + void updateToRealtime(Map data); +} \ No newline at end of file diff --git a/src/main/java/com/zcloud/mapper/dsno2/target/MesDeviceMonitoringMapper.java b/src/main/java/com/zcloud/mapper/dsno2/target/MesDeviceMonitoringMapper.java index 4c36054..7d77b8e 100644 --- a/src/main/java/com/zcloud/mapper/dsno2/target/MesDeviceMonitoringMapper.java +++ b/src/main/java/com/zcloud/mapper/dsno2/target/MesDeviceMonitoringMapper.java @@ -6,9 +6,6 @@ import org.springframework.stereotype.Repository; import java.util.List; import java.util.Map; -/** - * MES数据访问接口 - */ @Repository public interface MesDeviceMonitoringMapper { @@ -24,4 +21,5 @@ public interface MesDeviceMonitoringMapper { * @param dataList 数据列表 */ void saveBatchFromMes(List> dataList); + } diff --git a/src/main/java/com/zcloud/scheduled/dataDocking/MesDataScheduled.java b/src/main/java/com/zcloud/scheduled/dataDocking/MesDataScheduled.java index 0000961..cac86c7 100644 --- a/src/main/java/com/zcloud/scheduled/dataDocking/MesDataScheduled.java +++ b/src/main/java/com/zcloud/scheduled/dataDocking/MesDataScheduled.java @@ -137,9 +137,10 @@ public class MesDataScheduled extends IJobHandler { XxlJobHelper.log("从MES系统获取到{}条数据", mesDataList.size()); - // 查询填报的所有阈值数据 - PageData equPd = new PageData(); - List targetAllList = tbIronPlcMapper.listTargetByEquId(equPd); + // 查询高炉、转炉、精炼炉、一氧化碳报警器设备填报的所有阈值数据 + List targetAllList = tbIronPlcMapper.listTargetByEquId(); + // 查询除尘器设备填报的所有阈值数据 + List targetDustAllList = tbIronPlcMapper.listDustDeviceAll(); // 1#精炼炉 List jll1TargetList = targetAllList.stream() @@ -175,6 +176,7 @@ public class MesDataScheduled extends IJobHandler { .filter(item -> item.get("EQUIPMENT_ID") != null && item.get("EQUIPMENT_ID").equals("67c2e8315ca57d68201762e4ce9db351")) .collect(Collectors.toList()); + // 保存数据到数据库 if (!mesDataList.isEmpty()) { ArrayList> mesSaveList = new ArrayList<>(); @@ -190,7 +192,6 @@ public class MesDataScheduled extends IJobHandler { mesData.put("INSERT_TIME", DateUtil.date2Str(new Date())); mesData.put("WARNING", 0); // 是否告警 要完善相关告警逻辑进行判断 mesData.put("GATHER_TIME", 5); - mesData.put("PLC_NAME", ""); mesData.put("OVERVIEW_OF_ALERTS", ""); // 下面是在已经填报的 String[] parts = key.split("_", 2); // split("_", 2) 限制分割为2部分 @@ -211,23 +212,33 @@ public class MesDataScheduled extends IJobHandler { } else if (suffix.equals("A2") || suffix.equals("B2")) { mesData.put("EQUIPMENT_ID", "2c83b99df54e80a674be5657b11db55c"); collect = zl2TargetList.stream().filter(item -> item.getString("TARGET_NAME").equals(key)).collect(Collectors.toList()); - } else if (key.contains("1#")) { + } else if (key.contains("1#高炉")) { mesData.put("EQUIPMENT_ID", "c6825a6e1c959c3e5c800433516b2e8d"); collect = gl1TargetList.stream().filter(item -> item.getString("TARGET_NAME").equals(key)).collect(Collectors.toList()); - } else if (key.contains("2#")) { + } else if (key.contains("2#高炉")) { mesData.put("EQUIPMENT_ID", "7face71b8cb7b47872cbe94f9b16831d"); collect = gl2TargetList.stream().filter(item -> item.getString("TARGET_NAME").equals(key)).collect(Collectors.toList()); - } else if (key.contains("3#")) { + } else if (key.contains("3#高炉")) { mesData.put("EQUIPMENT_ID", "2cb052450581597064b510118c076e2a"); collect = gl3TargetList.stream().filter(item -> item.getString("TARGET_NAME").equals(key)).collect(Collectors.toList()); - } else if (key.contains("4#")) { + } else if (key.contains("4#高炉")) { mesData.put("EQUIPMENT_ID", "67c2e8315ca57d68201762e4ce9db351"); collect = gl4TargetList.stream().filter(item -> item.getString("TARGET_NAME").equals(key)).collect(Collectors.toList()); + } else if (key.contains("1#除尘器")) { + mesData.put("EQUIPMENT_ID", "72c06a71cadd49ccb8a202e9f5f45553"); + collect = targetDustAllList.stream().filter(item -> item.getString("PLC_NAME").equals(key)).collect(Collectors.toList()); + } else if (key.contains("2#除尘器")) { + mesData.put("EQUIPMENT_ID", "06fdb464c7a74abbb2b82e19a27ec2d3"); + collect = targetDustAllList.stream().filter(item -> item.getString("PLC_NAME").equals(key)).collect(Collectors.toList()); + } else if (key.contains("3#除尘器")) { + mesData.put("EQUIPMENT_ID", "d0a99c9671ea429e9bbbc7ec69a085b9"); + collect = targetDustAllList.stream().filter(item -> item.getString("PLC_NAME").equals(key)).collect(Collectors.toList()); } if (collect.size() > 0) { PageData pageData = collect.get(0); mesData.put("IPCDEVICE_ID", pageData.getString("IPCDEVICE_ID")); mesData.put("PLC_ID", pageData.getString("PLC_ID")); + mesData.put("PLC_NAME", pageData.getString("PLC_NAME")); mesData.put("TARGET_TYPE", pageData.getString("TARGET_TYPE")); mesData.put("TARGET_PLACE", pageData.getString("TARGET_PLACE")); mesData.put("TARGET_UNIT", pageData.getString("TARGET_UNIT")); @@ -247,6 +258,7 @@ public class MesDataScheduled extends IJobHandler { } else { mesData.put("IPCDEVICE_ID", ""); mesData.put("PLC_ID", ""); + mesData.put("PLC_NAME", ""); mesData.put("TARGET_TYPE", ""); mesData.put("TARGET_PLACE", ""); mesData.put("TARGET_UNIT", ""); @@ -269,6 +281,47 @@ public class MesDataScheduled extends IJobHandler { } // 处理接过来的MES数据 + // 先查询实时数据表中是否已有对应设备的数据 + List> insertList = new ArrayList<>(); + List> updateList = new ArrayList<>(); + + for (Map data : mesSaveList) { + String equipmentId = (String) data.get("EQUIPMENT_ID"); + if (equipmentId != null && !equipmentId.isEmpty()) { + // 查询该设备在实时数据表中是否已存在 + List existingData = tbIronPlcMapper.listRealtimeDataByEquipmentId(equipmentId); + if (existingData != null && !existingData.isEmpty()) { + // 如果存在,则加入更新列表 + updateList.add(data); + } else { + // 如果不存在,则加入插入列表 + insertList.add(data); + } + } + } + + // 对于不存在的数据执行插入操作到实时表 + if (!insertList.isEmpty()) { + int insertCount = 0; + for (Map data : insertList) { + // 使用单条插入方法因为批量插入拼接sql会有乱码执行不成功 + tbIronPlcMapper.insertToRealtime(data); + insertCount++; + } + XxlJobHelper.log("成功插入{}条新数据到实时数据表", insertCount); + } + + // 对于已存在的数据执行更新操作 + if (!updateList.isEmpty()) { + int updateCount = 0; + for (Map data : updateList) { + // 使用单条更新方法因为批量更新拼接sql会有乱码执行不成功 + tbIronPlcMapper.updateToRealtime(data); + updateCount++; + } + XxlJobHelper.log("成功更新{}条实时数据表中的数据", updateCount); + } + // 保存MES数据 mesDeviceMonitoringMapper.saveBatchFromMes(mesSaveList); XxlJobHelper.log("成功保存{}条MES数据到本地数据库", mesSaveList.size()); diff --git a/src/main/java/com/zcloud/scheduled/dataDocking/TagDescription.java b/src/main/java/com/zcloud/scheduled/dataDocking/TagDescription.java index 2e4a2bc..4ab6231 100644 --- a/src/main/java/com/zcloud/scheduled/dataDocking/TagDescription.java +++ b/src/main/java/com/zcloud/scheduled/dataDocking/TagDescription.java @@ -2,23 +2,23 @@ package com.zcloud.scheduled.dataDocking; public enum TagDescription { // 定义枚举常量,TAG值作为名称,描述作为参数 - TAG325("1#炉顶西压力"), - TAG326("1#炉顶东压力"), + TAG325("1#高炉顶西压力"), + TAG326("1#高炉顶东压力"), TAG317("1#高炉南放散开关"), TAG318("1#高炉北放散开关"), - TAG327("2#炉顶西压力"), - TAG328("2#炉顶东压力"), + TAG327("2#高炉顶西压力"), + TAG328("2#高炉顶东压力"), TAG319("2#高炉南放散开关"), TAG320("2#高炉北放散开关"), - TAG329("3#炉顶西压力"), - TAG330("3#炉顶东压力"), + TAG329("3#高炉顶西压力"), + TAG330("3#高炉顶东压力"), TAG321("3#高炉南放散开关"), TAG322("3#高炉北放散开关"), - TAG331("4#煤气上升管东北压力"), - TAG332("4#煤气上升管东南压力"), - TAG333("4#煤气上升管西北压力"), - TAG334("4#煤气上升管西南压力"), - TAG323("4#高炉南放散开关"), + TAG331("4#高炉煤气上升管东北压力"), + TAG332("4#高炉煤气上升管东南压力"), + TAG333("4#高炉煤气上升管西北压力"), + TAG334("4#高炉煤气上升管西南压力"), + TAG323("4#高炉高炉南放散开关"), TAG324("4#高炉北放散开关"), // 除尘器参数枚举 TAG335("1#除尘器进风口压力"), diff --git a/src/main/resources/mybatis/datasource/tbIron/TbIronPlcMapper.xml b/src/main/resources/mybatis/datasource/tbIron/TbIronPlcMapper.xml index e9ec525..39aa647 100644 --- a/src/main/resources/mybatis/datasource/tbIron/TbIronPlcMapper.xml +++ b/src/main/resources/mybatis/datasource/tbIron/TbIronPlcMapper.xml @@ -22,7 +22,8 @@ mt.TARGET_DESCRIPTION, mt.BIT_NO, mt.SIGNAL_TYPE, - mt.ALARM_VALUE + mt.ALARM_VALUE, + mt.REPORT_ID FROM tb_iron_plc p LEFT JOIN tb_iron_equipment_info e on p.EQUIPMENT_ID = e.EQUIPMENT_ID @@ -31,43 +32,160 @@ p.CORPINFO_ID = '499d43c24fab49f59391ce49fb401837' and p.ISDELETE = 0 and mt.ISDELETE = 0 + + - + SELECT p.PLC_ID, - plc.EQUIPMENT_ID, - p.TARGET_NAME, - p.TARGET_TYPE, - p.TARGET_PLACE, - p.TARGET_UNIT, - p.THRESHOLD_UP_LIMIT, - p.THRESHOLD_UP_UP_LIMIT, - p.THRESHOLD_DOWN_LIMIT, - p.THRESHOLD_DOWN_DOWN_LIMIT, - p.RANGE_UP, - p.RANGE_DOWN, - p.TARGET_DESCRIPTION, - p.BIT_NO, - p.SIGNAL_TYPE, - p.ALARM_VALUE, - p.TARGET_STATUS, + p.PLC_NAME, + p.IPCDEVICE_ID, + p.EQUIPMENT_ID, + e.DEVICE_TYPE, + mt.TARGET_NAME, + mt.TARGET_TYPE, + mt.TARGET_PLACE, + mt.TARGET_UNIT, + mt.THRESHOLD_UP_LIMIT, + mt.THRESHOLD_UP_UP_LIMIT, + mt.THRESHOLD_DOWN_LIMIT, + mt.THRESHOLD_DOWN_DOWN_LIMIT, + mt.RANGE_UP, + mt.RANGE_DOWN, + mt.TARGET_DESCRIPTION, + mt.BIT_NO, + mt.SIGNAL_TYPE, + mt.ALARM_VALUE, + mt.TARGET_STATUS, p.CORPINFO_ID, - p.CREATOR, - p.CREATTIME, - p.OPERATOR, - p.OPERATTIME, - p.ISDELETE, - p.REPORT_ID - from - tb_iron_monitoring_target p - left join tb_iron_plc plc ON p.PLC_ID = plc.PLC_ID - where - p.ISDELETE = 0 - and - plc.ISDELETE = 0 + mt.REPORT_ID + FROM + tb_iron_plc p + LEFT JOIN tb_iron_equipment_info e on p.EQUIPMENT_ID = e.EQUIPMENT_ID + LEFT JOIN tb_iron_monitoring_target mt on mt.PLC_ID = p.PLC_ID + WHERE + p.CORPINFO_ID = '499d43c24fab49f59391ce49fb401837' and p.ISDELETE = 0 and mt.ISDELETE = 0 + + + + + + + + INSERT INTO tb_iron_device_realtime_sxgt ( + MONITORING_ID, + TARGET_NAME, + TARGET_PLACE, + TARGET_UNIT, + SIGNAL_TYPE, + CURRENT_VALUE, + ALARM_VALUE, + THRESHOLD_UP_LIMIT, + THRESHOLD_UP_UP_LIMIT, + THRESHOLD_DOWN_LIMIT, + THRESHOLD_DOWN_DOWN_LIMIT, + RANGE_UP, + RANGE_DOWN, + PROCESSING_TIME, + INSERT_TIME, + PLC_ID, + WARNING, + GATHER_TIME, + CORPINFO_ID, + IPCDEVICE_ID, + PLC_NAME, + PROCESSING_BATCH_ID, + OVERVIEW_OF_ALERTS, + EQUIPMENT_ID + ) + VALUES ( + #{MONITORING_ID, jdbcType=CHAR}, + #{TARGET_NAME, jdbcType=VARCHAR}, + #{TARGET_PLACE, jdbcType=VARCHAR}, + #{TARGET_UNIT, jdbcType=VARCHAR}, + #{SIGNAL_TYPE, jdbcType=VARCHAR}, + #{CURRENT_VALUE, jdbcType=VARCHAR}, + #{ALARM_VALUE, jdbcType=VARCHAR}, + #{THRESHOLD_UP_LIMIT, jdbcType=VARCHAR}, + #{THRESHOLD_UP_UP_LIMIT, jdbcType=VARCHAR}, + #{THRESHOLD_DOWN_LIMIT, jdbcType=VARCHAR}, + #{THRESHOLD_DOWN_DOWN_LIMIT, jdbcType=VARCHAR}, + #{RANGE_UP, jdbcType=VARCHAR}, + #{RANGE_DOWN, jdbcType=VARCHAR}, + #{PROCESSING_TIME, jdbcType=VARCHAR}, + STR_TO_DATE(#{INSERT_TIME}, '%Y-%m-%d %H:%i:%s'), + #{PLC_ID, jdbcType=CHAR}, + #{WARNING, jdbcType=CHAR}, + #{GATHER_TIME, jdbcType=VARCHAR}, + #{CORPINFO_ID, jdbcType=VARCHAR}, + #{IPCDEVICE_ID, jdbcType=VARCHAR}, + #{PLC_NAME, jdbcType=VARCHAR}, + #{PROCESSING_BATCH_ID, jdbcType=VARCHAR}, + #{OVERVIEW_OF_ALERTS, jdbcType=VARCHAR}, + #{EQUIPMENT_ID, jdbcType=VARCHAR} + ) + + + + + UPDATE tb_iron_device_realtime_sxgt + SET + TARGET_NAME = #{TARGET_NAME, jdbcType=VARCHAR}, + TARGET_PLACE = #{TARGET_PLACE, jdbcType=VARCHAR}, + TARGET_UNIT = #{TARGET_UNIT, jdbcType=VARCHAR}, + SIGNAL_TYPE = #{SIGNAL_TYPE, jdbcType=VARCHAR}, + CURRENT_VALUE = #{CURRENT_VALUE, jdbcType=VARCHAR}, + ALARM_VALUE = #{ALARM_VALUE, jdbcType=VARCHAR}, + THRESHOLD_UP_LIMIT = #{THRESHOLD_UP_LIMIT, jdbcType=VARCHAR}, + THRESHOLD_UP_UP_LIMIT = #{THRESHOLD_UP_UP_LIMIT, jdbcType=VARCHAR}, + THRESHOLD_DOWN_LIMIT = #{THRESHOLD_DOWN_LIMIT, jdbcType=VARCHAR}, + THRESHOLD_DOWN_DOWN_LIMIT = #{THRESHOLD_DOWN_DOWN_LIMIT, jdbcType=VARCHAR}, + RANGE_UP = #{RANGE_UP, jdbcType=VARCHAR}, + RANGE_DOWN = #{RANGE_DOWN, jdbcType=VARCHAR}, + PROCESSING_TIME = #{PROCESSING_TIME, jdbcType=VARCHAR}, + INSERT_TIME = STR_TO_DATE(#{INSERT_TIME}, '%Y-%m-%d %H:%i:%s'), + PLC_ID = #{PLC_ID, jdbcType=CHAR}, + WARNING = #{WARNING, jdbcType=CHAR}, + GATHER_TIME = #{GATHER_TIME, jdbcType=VARCHAR}, + CORPINFO_ID = #{CORPINFO_ID, jdbcType=VARCHAR}, + IPCDEVICE_ID = #{IPCDEVICE_ID, jdbcType=VARCHAR}, + PLC_NAME = #{PLC_NAME, jdbcType=VARCHAR}, + PROCESSING_BATCH_ID = #{PROCESSING_BATCH_ID, jdbcType=VARCHAR}, + OVERVIEW_OF_ALERTS = #{OVERVIEW_OF_ALERTS, jdbcType=VARCHAR} + WHERE EQUIPMENT_ID = #{EQUIPMENT_ID, jdbcType=VARCHAR} + diff --git a/src/main/resources/mybatis/dsno2/target/MesDeviceMonitoringMapper.xml b/src/main/resources/mybatis/dsno2/target/MesDeviceMonitoringMapper.xml index efcf27f..0ebe462 100644 --- a/src/main/resources/mybatis/dsno2/target/MesDeviceMonitoringMapper.xml +++ b/src/main/resources/mybatis/dsno2/target/MesDeviceMonitoringMapper.xml @@ -14,6 +14,8 @@ + + INSERT INTO "sx_yjb".device_monitoring_sxgt (