From 4b4063259ba03ad0ec539b61b502e7e166c7305a Mon Sep 17 00:00:00 2001 From: zch Date: Fri, 30 May 2025 09:11:01 +0800 Subject: [PATCH] =?UTF-8?q?feat(ems):=20=E5=A2=9E=E5=8A=A0=E5=AF=B9?= =?UTF-8?q?=E5=99=AA=E9=9F=B3=E3=80=81=E7=85=A7=E5=BA=A6=E5=92=8C=E6=B0=94?= =?UTF-8?q?=E4=BD=93=E6=B5=93=E5=BA=A6=E7=9A=84=E7=9B=91=E6=B5=8B=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 EmsAlarmActionStepMapper.xml 中添加了对噪音、照度和气体浓度的 SQL 支持 - 在 EmsRecordAlarmDataServiceImpl 中增加了对这些新监测字段的处理逻辑 - 更新了监测字段与数据库字段的映射关系 - 调整了告警数据的保存逻辑,直接插入数据库而不进行去重检查 --- .../impl/EmsRecordAlarmDataServiceImpl.java | 98 ++++++++++++------- .../ems/base/EmsAlarmActionStepMapper.xml | 3 + 2 files changed, 67 insertions(+), 34 deletions(-) diff --git a/os-ems/src/main/java/com/os/ems/record/service/impl/EmsRecordAlarmDataServiceImpl.java b/os-ems/src/main/java/com/os/ems/record/service/impl/EmsRecordAlarmDataServiceImpl.java index a7f6a58..a6e06cf 100644 --- a/os-ems/src/main/java/com/os/ems/record/service/impl/EmsRecordAlarmDataServiceImpl.java +++ b/os-ems/src/main/java/com/os/ems/record/service/impl/EmsRecordAlarmDataServiceImpl.java @@ -62,6 +62,9 @@ public class EmsRecordAlarmDataServiceImpl implements IEmsRecordAlarmDataService MONITOR_FIELD_TO_DB_FIELD.put(3L, "vibration_displacement"); // 振动-位移(um) MONITOR_FIELD_TO_DB_FIELD.put(4L, "vibration_acceleration"); // 振动-加速度(g) MONITOR_FIELD_TO_DB_FIELD.put(5L, "vibration_temp"); // 振动-温度(℃) + MONITOR_FIELD_TO_DB_FIELD.put(6L, "noise"); // 噪音 + MONITOR_FIELD_TO_DB_FIELD.put(7L, "illuminance"); // 照度 + MONITOR_FIELD_TO_DB_FIELD.put(8L, "concentration"); // 气体浓度 // 字典值 -> 中文描述映射(用于异常记录的cause字段) MONITOR_FIELD_TO_DESC.put(0L, "温度"); @@ -70,6 +73,9 @@ public class EmsRecordAlarmDataServiceImpl implements IEmsRecordAlarmDataService MONITOR_FIELD_TO_DESC.put(3L, "振动-位移(um)"); MONITOR_FIELD_TO_DESC.put(4L, "振动-加速度(g)"); MONITOR_FIELD_TO_DESC.put(5L, "振动-温度(℃)"); + MONITOR_FIELD_TO_DESC.put(6L, "噪音"); + MONITOR_FIELD_TO_DESC.put(7L, "照度"); + MONITOR_FIELD_TO_DESC.put(8L, "气体浓度"); } /** @@ -395,6 +401,12 @@ public class EmsRecordAlarmDataServiceImpl implements IEmsRecordAlarmDataService return record.getVibrationAcceleration(); case 5: // 振动-温度(℃) return record.getVibrationTemp(); + case 6: // 噪音 + return record.getNoise(); + case 7: // 照度 + return record.getIlluminance(); + case 8: // 气体浓度 + return record.getConcentration(); default: System.out.println("未知的监测字段: " + monitorField); return null; @@ -498,8 +510,8 @@ public class EmsRecordAlarmDataServiceImpl implements IEmsRecordAlarmDataService descriptions.add("温度"); descriptions.add("湿度"); descriptions.add("照度"); - descriptions.add("噪声"); - descriptions.add("浓度"); + descriptions.add("噪音"); + descriptions.add("气体浓度"); break; } @@ -534,8 +546,13 @@ public class EmsRecordAlarmDataServiceImpl implements IEmsRecordAlarmDataService return monitorField == 0L; } - // 其他设备类型暂不支持字段级规则 - return false; + // 其他设备类型支持噪音(6)、照度(7)、气体浓度(8)字段 + if (monitorField >= 6L && monitorField <= 8L) { + return true; + } + + // 默认支持温度和湿度字段 + return monitorField == 0L || monitorField == 1L; } /** @@ -755,7 +772,7 @@ public class EmsRecordAlarmDataServiceImpl implements IEmsRecordAlarmDataService /** * 批量保存WebSocket告警数据 - * 处理前端传来的告警数据列表,进行去重和批量插入 + * 处理前端传来的告警数据列表,直接插入数据库 * * @param alarmDataList 告警数据列表 * @return 实际插入的记录数量 @@ -771,36 +788,49 @@ public class EmsRecordAlarmDataServiceImpl implements IEmsRecordAlarmDataService // 设置默认值和创建时间 Date currentTime = DateUtils.getNowDate(); - for (EmsRecordAlarmData alarmData : alarmDataList) { - // 设置创建时间 - if (alarmData.getCreateTime() == null) { - alarmData.setCreateTime(currentTime); - } - - // 设置默认告警状态为未处理 - if (alarmData.getAlarmStatus() == null) { - alarmData.setAlarmStatus(1L); // 1表示未处理 - } - - // 数据完整性检查 - if (StringUtils.isEmpty(alarmData.getMonitorId())) { - System.out.println("警告:跳过monitorId为空的告警数据"); - continue; - } - - if (alarmData.getCollectTime() == null) { - System.out.println("警告:collectTime为空,使用当前时间"); - alarmData.setCollectTime(currentTime); - } - - System.out.println("准备保存告警数据 - 设备:" + alarmData.getMonitorId() + - ", 原因:" + alarmData.getCause() + - ", 数值:" + alarmData.getAlarmData() + - ", 告警类型:" + alarmData.getAlarmType()); - } + int insertedCount = 0; - // 复用现有的严格去重逻辑 - int insertedCount = insertAlarmDataWithStrictDuplicateCheck(alarmDataList); + for (EmsRecordAlarmData alarmData : alarmDataList) { + try { + // 设置创建时间 + if (alarmData.getCreateTime() == null) { + alarmData.setCreateTime(currentTime); + } + + // 设置默认告警状态为未处理 + if (alarmData.getAlarmStatus() == null) { + alarmData.setAlarmStatus(1L); // 1表示未处理 + } + + // 数据完整性检查 + if (StringUtils.isEmpty(alarmData.getMonitorId())) { + System.out.println("警告:跳过monitorId为空的告警数据"); + continue; + } + + if (alarmData.getCollectTime() == null) { + System.out.println("警告:collectTime为空,使用当前时间"); + alarmData.setCollectTime(currentTime); + } + + System.out.println("保存告警数据 - 设备:" + alarmData.getMonitorId() + + ", 原因:" + alarmData.getCause() + + ", 数值:" + alarmData.getAlarmData() + + ", 告警类型:" + alarmData.getAlarmType()); + + // 直接插入数据库,不进行去重检查 + int result = insertEmsRecordAlarmData(alarmData); + if (result > 0) { + insertedCount++; + System.out.println("成功保存告警数据 - 设备:" + alarmData.getMonitorId() + + ", 原因:" + alarmData.getCause()); + } + + } catch (Exception e) { + System.err.println("保存告警数据时发生错误: " + e.getMessage()); + e.printStackTrace(); + } + } System.out.println("WebSocket告警数据保存完成,实际插入: " + insertedCount + " 条记录"); System.out.println("==== WebSocket告警数据保存结束 ===="); diff --git a/os-ems/src/main/resources/mapper/ems/base/EmsAlarmActionStepMapper.xml b/os-ems/src/main/resources/mapper/ems/base/EmsAlarmActionStepMapper.xml index 45dcb1a..c034c8c 100644 --- a/os-ems/src/main/resources/mapper/ems/base/EmsAlarmActionStepMapper.xml +++ b/os-ems/src/main/resources/mapper/ems/base/EmsAlarmActionStepMapper.xml @@ -108,6 +108,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" WHEN 3 THEN #{cause} = '振动-位移(um)' WHEN 4 THEN #{cause} = '振动-加速度(g)' WHEN 5 THEN #{cause} = '振动-温度(℃)' + WHEN 6 THEN #{cause} = '噪音' + WHEN 7 THEN #{cause} = '照度' + WHEN 8 THEN #{cause} = '气体浓度' ELSE 0 END = 1 )