|
|
@@ -214,13 +214,13 @@ public class MessageHandler extends ChannelInboundHandlerAdapter {
|
|
|
temperatureIsOverThreshold = true;
|
|
|
}
|
|
|
if(temperatureIsOverThreshold){
|
|
|
- //先保存告警数据
|
|
|
- saveAlarmData(deviceId, temWarningType, temWarningCode,
|
|
|
+ int alarmLevel = saveAlarmData(deviceId, temWarningType, temWarningCode,
|
|
|
temMinValue != null ? BigDecimal.valueOf(temMinValue) : null,
|
|
|
temMaxValue != null ? BigDecimal.valueOf(temMaxValue) : null,
|
|
|
BigDecimal.valueOf(temperature), temRemark != null ? temRemark : "可燃气体温度报警");
|
|
|
- //再发送短信
|
|
|
- sendMessage(deviceId, temWarningType, resultData.getLongitude(), resultData.getLatitude());
|
|
|
+ if (alarmLevel == 1) {
|
|
|
+ sendMessage(deviceId, temWarningType, resultData.getLongitude(), resultData.getLatitude());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//判断湿度
|
|
|
@@ -233,13 +233,13 @@ public class MessageHandler extends ChannelInboundHandlerAdapter {
|
|
|
humidityIsOverThreshold = true;
|
|
|
}
|
|
|
if(humidityIsOverThreshold){
|
|
|
- //先保存告警数据
|
|
|
- saveAlarmData(deviceId, humWarningType, humWarningCode,
|
|
|
+ int alarmLevel = saveAlarmData(deviceId, humWarningType, humWarningCode,
|
|
|
humMinValue != null ? BigDecimal.valueOf(humMinValue) : null,
|
|
|
humMaxValue != null ? BigDecimal.valueOf(humMaxValue) : null,
|
|
|
BigDecimal.valueOf(humidity), humRemark != null ? humRemark : "可燃气体湿度报警");
|
|
|
- //再发送短信
|
|
|
- sendMessage(deviceId, humWarningType, resultData.getLongitude(), resultData.getLatitude());
|
|
|
+ if (alarmLevel == 1) {
|
|
|
+ sendMessage(deviceId, humWarningType, resultData.getLongitude(), resultData.getLatitude());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//判断气体浓度
|
|
|
@@ -253,79 +253,79 @@ public class MessageHandler extends ChannelInboundHandlerAdapter {
|
|
|
concentrationIsOverThreshold = true;
|
|
|
}
|
|
|
if(concentrationIsOverThreshold){
|
|
|
- //先保存告警数据
|
|
|
- saveAlarmData(deviceId, gasWarningType, gasWarningCode,
|
|
|
+ int alarmLevel = saveAlarmData(deviceId, gasWarningType, gasWarningCode,
|
|
|
gasMinValue != null ? BigDecimal.valueOf(gasMinValue) : null,
|
|
|
gasMaxValue != null ? BigDecimal.valueOf(gasMaxValue) : null,
|
|
|
gasConcentration, gasRemark != null ? gasRemark : "可燃气体浓度报警");
|
|
|
- //再发送短信
|
|
|
- sendMessage(deviceId, gasWarningType, resultData.getLongitude(), resultData.getLatitude());
|
|
|
+ if (alarmLevel == 1) {
|
|
|
+ sendMessage(deviceId, gasWarningType, resultData.getLongitude(), resultData.getLatitude());
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//获取到的数据逐一进行判断
|
|
|
Map<String, Boolean> alarmBits = resultData.parseAlarmBits();
|
|
|
if(alarmBits.get("unknownAlarm")){
|
|
|
- saveAlarmData(deviceId, "未知报警", "WARN-UNKNOWN", null, null, null, "可燃气体未知报警");
|
|
|
+ saveAlarmDataLevelOne(deviceId, "未知报警", "WARN-UNKNOWN", null, "可燃气体未知报警");
|
|
|
sendMessage(deviceId,"未知报警",resultData.getLongitude(),resultData.getLatitude());
|
|
|
}
|
|
|
if(alarmBits.get("highAlarm")){
|
|
|
- saveAlarmData(deviceId, "高报警", "WARN-HIGH", null, null, null, "可燃气体高报警");
|
|
|
+ saveAlarmDataLevelOne(deviceId, "高报警", "WARN-HIGH", null, "可燃气体高报警");
|
|
|
sendMessage(deviceId,"高报警",resultData.getLongitude(),resultData.getLatitude());
|
|
|
}
|
|
|
if(alarmBits.get("overRange")){
|
|
|
- saveAlarmData(deviceId, "超量程", "WARN-OVER-RANGE", null, null, null, "可燃气体超量程报警");
|
|
|
+ saveAlarmDataLevelOne(deviceId, "超量程", "WARN-OVER-RANGE", null, "可燃气体超量程报警");
|
|
|
sendMessage(deviceId,"超量程",resultData.getLongitude(),resultData.getLatitude());
|
|
|
}
|
|
|
if(alarmBits.get("calibrationCycle")){
|
|
|
- saveAlarmData(deviceId, "标定周期", "WARN-CALIBRATION-CYCLE", null, null, null, "可燃气体标定周期报警");
|
|
|
+ saveAlarmDataLevelOne(deviceId, "标定周期", "WARN-CALIBRATION-CYCLE", null, "可燃气体标定周期报警");
|
|
|
sendMessage(deviceId,"标定周期",resultData.getLongitude(),resultData.getLatitude());
|
|
|
}
|
|
|
if(alarmBits.get("overLife")){
|
|
|
- saveAlarmData(deviceId, "超寿命", "WARN-OVER-LIFE", null, null, null, "可燃气体超寿命报警");
|
|
|
+ saveAlarmDataLevelOne(deviceId, "超寿命", "WARN-OVER-LIFE", null, "可燃气体超寿命报警");
|
|
|
sendMessage(deviceId,"超寿命",resultData.getLongitude(),resultData.getLatitude());
|
|
|
}
|
|
|
if(alarmBits.get("fallAlarm")){
|
|
|
- saveAlarmData(deviceId, "跌倒报警", "WARN-FALL", null, null, null, "可燃气体跌倒报警");
|
|
|
+ saveAlarmDataLevelOne(deviceId, "跌倒报警", "WARN-FALL", null, "可燃气体跌倒报警");
|
|
|
sendMessage(deviceId,"跌倒报警",resultData.getLongitude(),resultData.getLatitude());
|
|
|
}
|
|
|
if(alarmBits.get("undervoltage")){
|
|
|
- saveAlarmData(deviceId, "欠压报警", "WARN-UNDERVOLTAGE", null, null, null, "可燃气体欠压报警");
|
|
|
+ saveAlarmDataLevelOne(deviceId, "欠压报警", "WARN-UNDERVOLTAGE", null, "可燃气体欠压报警");
|
|
|
sendMessage(deviceId,"欠压报警",resultData.getLongitude(),resultData.getLatitude());
|
|
|
}
|
|
|
if(alarmBits.get("rangeAlarm")){
|
|
|
- saveAlarmData(deviceId, "区间报警", "WARN-RANGE", null, null, null, "可燃气体区间报警");
|
|
|
+ saveAlarmDataLevelOne(deviceId, "区间报警", "WARN-RANGE", null, "可燃气体区间报警");
|
|
|
sendMessage(deviceId,"区间报警",resultData.getLongitude(),resultData.getLatitude());
|
|
|
}
|
|
|
if(alarmBits.get("keyAlarm")){
|
|
|
- saveAlarmData(deviceId, "按键报警", "WARN-KEY", null, null, null, "可燃气体按键报警");
|
|
|
+ saveAlarmDataLevelOne(deviceId, "按键报警", "WARN-KEY", null, "可燃气体按键报警");
|
|
|
sendMessage(deviceId,"按键报警",resultData.getLongitude(),resultData.getLatitude());
|
|
|
}
|
|
|
if(alarmBits.get("vibrationAlarm")){
|
|
|
- saveAlarmData(deviceId, "震动报警", "WARN-VIBRATION", null, null, null, "可燃气体震动报警");
|
|
|
+ saveAlarmDataLevelOne(deviceId, "震动报警", "WARN-VIBRATION", null, "可燃气体震动报警");
|
|
|
sendMessage(deviceId,"震动报警",resultData.getLongitude(),resultData.getLatitude());
|
|
|
}
|
|
|
if(alarmBits.get("waterLevelAlarm")){
|
|
|
- saveAlarmData(deviceId, "水位报警", "WARN-WATER-LEVEL", null, null, null, "可燃气体水位报警");
|
|
|
+ saveAlarmDataLevelOne(deviceId, "水位报警", "WARN-WATER-LEVEL", null, "可燃气体水位报警");
|
|
|
sendMessage(deviceId,"水位报警",resultData.getLongitude(),resultData.getLatitude());
|
|
|
}
|
|
|
if(alarmBits.get("powerOffAlarm")){
|
|
|
- saveAlarmData(deviceId, "断电报警", "WARN-POWER-OFF", null, null, null, "可燃气体断电报警");
|
|
|
+ saveAlarmDataLevelOne(deviceId, "断电报警", "WARN-POWER-OFF", null, "可燃气体断电报警");
|
|
|
sendMessage(deviceId,"断电报警",resultData.getLongitude(),resultData.getLatitude());
|
|
|
}
|
|
|
if(alarmBits.get("sensorFault")){
|
|
|
- saveAlarmData(deviceId, "传感器故障", "WARN-SENSOR-FAULT", null, null, null, "可燃气体传感器故障");
|
|
|
+ saveAlarmDataLevelOne(deviceId, "传感器故障", "WARN-SENSOR-FAULT", null, "可燃气体传感器故障");
|
|
|
sendMessage(deviceId,"传感器故障",resultData.getLongitude(),resultData.getLatitude());
|
|
|
}
|
|
|
if(alarmBits.get("overHumidity")){
|
|
|
- saveAlarmData(deviceId, "超湿报警", "WARN-OVER-HUMIDITY", null, null, null, "可燃气体超湿报警");
|
|
|
+ saveAlarmDataLevelOne(deviceId, "超湿报警", "WARN-OVER-HUMIDITY", null, "可燃气体超湿报警");
|
|
|
sendMessage(deviceId,"超湿报警",resultData.getLongitude(),resultData.getLatitude());
|
|
|
}
|
|
|
if(alarmBits.get("overTemperature")){
|
|
|
- saveAlarmData(deviceId, "超温报警", "WARN-OVER-TEMPERATURE", null, null, null, "可燃气体超温报警");
|
|
|
+ saveAlarmDataLevelOne(deviceId, "超温报警", "WARN-OVER-TEMPERATURE", null, "可燃气体超温报警");
|
|
|
sendMessage(deviceId,"超温报警",resultData.getLongitude(),resultData.getLatitude());
|
|
|
}
|
|
|
if(alarmBits.get("systemFault")){
|
|
|
- saveAlarmData(deviceId, "系统故障", "WARN-SYSTEM-FAULT", null, null, null, "可燃气体系统故障");
|
|
|
+ saveAlarmDataLevelOne(deviceId, "系统故障", "WARN-SYSTEM-FAULT", null, "可燃气体系统故障");
|
|
|
sendMessage(deviceId,"系统故障",resultData.getLongitude(),resultData.getLatitude());
|
|
|
}
|
|
|
}
|
|
|
@@ -339,9 +339,10 @@ public class MessageHandler extends ChannelInboundHandlerAdapter {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void saveAlarmData(String deviceCode, String warningType, String warningCode,
|
|
|
+ private int saveAlarmData(String deviceCode, String warningType, String warningCode,
|
|
|
BigDecimal minValue, BigDecimal maxValue,
|
|
|
BigDecimal actualValue, String remark) {
|
|
|
+ int alarmLevel = 4;
|
|
|
try {
|
|
|
AlarmData alarmData = new AlarmData();
|
|
|
alarmData.setDeviceCode(deviceCode);
|
|
|
@@ -351,8 +352,7 @@ public class MessageHandler extends ChannelInboundHandlerAdapter {
|
|
|
alarmData.setMaxValue(maxValue);
|
|
|
alarmData.setActualValue(actualValue);
|
|
|
|
|
|
- // 计算告警等级和偏差率
|
|
|
- int alarmLevel = AlarmLevelUtil.calculateLevel(actualValue, minValue, maxValue);
|
|
|
+ alarmLevel = AlarmLevelUtil.calculateLevel(actualValue, minValue, maxValue);
|
|
|
BigDecimal deviationRatio = AlarmLevelUtil.calculateDeviationRatio(actualValue, minValue, maxValue);
|
|
|
alarmData.setAlarmLevel(alarmLevel);
|
|
|
alarmData.setDeviationRatio(deviationRatio);
|
|
|
@@ -363,11 +363,32 @@ public class MessageHandler extends ChannelInboundHandlerAdapter {
|
|
|
alarmData.setCreateTime(LocalDateTime.now());
|
|
|
alarmDataService.saveAlarmData(alarmData);
|
|
|
|
|
|
- // 1级告警特殊处理(TODO:调用短信接口或发送特殊通知)
|
|
|
if (alarmLevel == 1) {
|
|
|
log.warn("【1级紧急告警】deviceCode={}, warningCode={}, deviationRatio={}%",
|
|
|
deviceCode, warningCode, deviationRatio);
|
|
|
}
|
|
|
+ log.info("告警数据入库成功: deviceCode={}, warningCode={}, level={}级", deviceCode, warningCode, alarmLevel);
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("保存告警数据失败", e);
|
|
|
+ }
|
|
|
+ return alarmLevel;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void saveAlarmDataLevelOne(String deviceCode, String warningType, String warningCode,
|
|
|
+ BigDecimal actualValue, String remark) {
|
|
|
+ try {
|
|
|
+ AlarmData alarmData = new AlarmData();
|
|
|
+ alarmData.setDeviceCode(deviceCode);
|
|
|
+ alarmData.setWarningType(warningType);
|
|
|
+ alarmData.setWarningCode(warningCode);
|
|
|
+ alarmData.setActualValue(actualValue);
|
|
|
+ alarmData.setAlarmLevel(1);
|
|
|
+ alarmData.setAlarmStatus(0);
|
|
|
+ alarmData.setAlarmTime(LocalDateTime.now());
|
|
|
+ alarmData.setRemark(remark);
|
|
|
+ alarmData.setCreateTime(LocalDateTime.now());
|
|
|
+ alarmDataService.saveAlarmData(alarmData);
|
|
|
+ log.info("设备主动告警入库(1级): deviceCode={}, warningCode={}", deviceCode, warningCode);
|
|
|
} catch (Exception e) {
|
|
|
log.error("保存告警数据失败", e);
|
|
|
}
|