Browse Source

告警屏蔽功能

master
review512jwy@163.com 1 month ago
parent
commit
de76f3f6bc
  1. 7
      src/main/java/com/techsor/datacenter/sender/dao/DashboardAlertDao.java
  2. 40
      src/main/java/com/techsor/datacenter/sender/dao/DashboardBlockConfigDao.java
  3. 1
      src/main/java/com/techsor/datacenter/sender/dao/DeviceDao.java
  4. 11
      src/main/java/com/techsor/datacenter/sender/dto/BlockConfigDTO.java
  5. 4
      src/main/java/com/techsor/datacenter/sender/dto/DeviceInfoVO.java
  6. 2
      src/main/java/com/techsor/datacenter/sender/entitiy/DynamodbEntity.java
  7. 22
      src/main/java/com/techsor/datacenter/sender/service/AlarmDataPushLambda.java
  8. 43
      src/main/java/com/techsor/datacenter/sender/service/impl/DataProcessServiceImpl.java

7
src/main/java/com/techsor/datacenter/sender/dao/DashboardAlertDao.java

@ -153,13 +153,14 @@ public class DashboardAlertDao {
public void insertAlertHistory(DynamodbEntity entity) { public void insertAlertHistory(DynamodbEntity entity) {
String sql = "INSERT INTO alert_history (" + String sql = "INSERT INTO alert_history (" +
"device_id, receive_ts, retain_alert" + "device_id, receive_ts, retain_alert, block_flag " +
") VALUES (?, ?, ?)"; ") VALUES (?, ?, ?, ?)";
jdbcTemplate.update(sql, jdbcTemplate.update(sql,
entity.getDeviceId(), entity.getDeviceId(),
entity.getReceive_ts(), entity.getReceive_ts(),
entity.getRetainAlert() entity.getRetainAlert(),
entity.getAlertBlock()
); );
} }

40
src/main/java/com/techsor/datacenter/sender/dao/DashboardBlockConfigDao.java

@ -0,0 +1,40 @@
package com.techsor.datacenter.sender.dao;
import com.techsor.datacenter.sender.dto.BlockConfigDTO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import jakarta.annotation.Resource;
import java.util.Collections;
import java.util.List;
@Slf4j
@Component
public class DashboardBlockConfigDao {
@Resource
private JdbcTemplate jdbcTemplate;
/**
* 根据楼宇ID查询有效的屏蔽配置flag=0
* @param buildingId 楼宇ID
* @return 屏蔽配置列表start_time/end_time 为毫秒时间戳
*/
public List<BlockConfigDTO> queryActiveBlockConfigsByBuildingId(Long buildingId) {
if (buildingId == null) {
return Collections.emptyList();
}
String sql = "SELECT id, building_id, start_time, end_time " +
"FROM dashboard_block_config " +
"WHERE building_id = ? AND flag = 0 AND status = 0 ";
return jdbcTemplate.query(sql, (rs, rowNum) -> {
BlockConfigDTO dto = new BlockConfigDTO();
dto.setId(rs.getLong("id"));
dto.setBuildingId(rs.getLong("building_id"));
dto.setStartTime(rs.getLong("start_time"));
dto.setEndTime(rs.getLong("end_time"));
return dto;
}, buildingId);
}
}

1
src/main/java/com/techsor/datacenter/sender/dao/DeviceDao.java

@ -306,6 +306,7 @@ public class DeviceDao {
item.setSpaceName(rs.getString("spaceName")); item.setSpaceName(rs.getString("spaceName"));
item.setFloorName(rs.getString("floorName")); item.setFloorName(rs.getString("floorName"));
item.setBuildingName(rs.getString("buildingName")); item.setBuildingName(rs.getString("buildingName"));
item.setBuildingId(rs.getLong("buildingId"));
item.setAssetName(rs.getString("assetName")); item.setAssetName(rs.getString("assetName"));
item.setCategory(rs.getString("category")); item.setCategory(rs.getString("category"));
item.setMonitoringPointName(rs.getString("monitoringPointName")); item.setMonitoringPointName(rs.getString("monitoringPointName"));

11
src/main/java/com/techsor/datacenter/sender/dto/BlockConfigDTO.java

@ -0,0 +1,11 @@
package com.techsor.datacenter.sender.dto;
import lombok.Data;
@Data
public class BlockConfigDTO {
private Long id;
private Long buildingId;
private Long startTime;
private Long endTime;
}

4
src/main/java/com/techsor/datacenter/sender/dto/DeviceInfoVO.java

@ -35,6 +35,8 @@ public class DeviceInfoVO implements Serializable {
// private String alertTypeName; // private String alertTypeName;
private Long buildingId;
private String buildingName; private String buildingName;
private String floorName; private String floorName;
@ -53,4 +55,6 @@ public class DeviceInfoVO implements Serializable {
private Long categoryId; private Long categoryId;
private Integer alertBlock = 0;
} }

2
src/main/java/com/techsor/datacenter/sender/entitiy/DynamodbEntity.java

@ -139,4 +139,6 @@ public class DynamodbEntity implements Serializable {
private Long categoryId; private Long categoryId;
private Integer alertBlock = 0;
} }

22
src/main/java/com/techsor/datacenter/sender/service/AlarmDataPushLambda.java

@ -267,17 +267,21 @@ public class AlarmDataPushLambda {
type = 1; type = 1;
if (!isInvalidAlarm) { if (!isInvalidAlarm) {
//roid if (1 != deviceInfoVO.getAlertBlock()) {
roid(companyId, receive_ts, currentRawJsonObject, type, redisAlarmDTO, deviceId, respObject, filterTargetSets, alertTriggerExpression, deviceInfoVO); //roid
roid(companyId, receive_ts, currentRawJsonObject, type, redisAlarmDTO, deviceId, respObject, filterTargetSets, alertTriggerExpression, deviceInfoVO);
}
redisAlarmDTO.setStatus(status); redisAlarmDTO.setStatus(status);
this.alramRedisTemplate.opsForHash().put(REDIS_DEVICE_ALARM_KEY, deviceId, JSONObject.toJSONString(redisAlarmDTO)); this.alramRedisTemplate.opsForHash().put(REDIS_DEVICE_ALARM_KEY, deviceId, JSONObject.toJSONString(redisAlarmDTO));
//email //email
// switchAlarmSendMail(companyId, receive_ts, currentRawJsonObject, type, deviceId, respObject, deviceInfoVO); // switchAlarmSendMail(companyId, receive_ts, currentRawJsonObject, type, deviceId, respObject, deviceInfoVO);
//slack、teams、email if (1 != deviceInfoVO.getAlertBlock()) {
sendAlarmNotifications(companyId, receive_ts, currentRawJsonObject, type, deviceId, respObject, deviceInfoVO); //slack、teams、email
//mqtt sendAlarmNotifications(companyId, receive_ts, currentRawJsonObject, type, deviceId, respObject, deviceInfoVO);
iotcoreOpt(companyId, deviceId, currentRawJsonObject, deviceInfoVO, 1); //mqtt
iotcoreOpt(companyId, deviceId, currentRawJsonObject, deviceInfoVO, 1);
}
} }
} else if (!STATUS_ALARM.equalsIgnoreCase(status)) { } else if (!STATUS_ALARM.equalsIgnoreCase(status)) {
@ -320,14 +324,14 @@ public class AlarmDataPushLambda {
if (!isInvalidAlarm) { if (!isInvalidAlarm) {
//roid //roid
if(-1 != type) { if(-1 != type && 1 != deviceInfoVO.getAlertBlock()) {
roid(companyId, receive_ts, currentRawJsonObject, type, redisAlarmDTO, deviceId, respObject, filterTargetSets, alertTriggerExpression, deviceInfoVO); roid(companyId, receive_ts, currentRawJsonObject, type, redisAlarmDTO, deviceId, respObject, filterTargetSets, alertTriggerExpression, deviceInfoVO);
} }
//设置redis状态 //设置redis状态
redisAlarmDTO.setStatus(status); redisAlarmDTO.setStatus(status);
this.alramRedisTemplate.opsForHash().put(REDIS_DEVICE_ALARM_KEY, deviceId, JSONObject.toJSONString(redisAlarmDTO)); this.alramRedisTemplate.opsForHash().put(REDIS_DEVICE_ALARM_KEY, deviceId, JSONObject.toJSONString(redisAlarmDTO));
if(-1 != type) { if(-1 != type && 1 != deviceInfoVO.getAlertBlock()) {
//email //email
// switchAlarmSendMail(companyId, receive_ts, currentRawJsonObject, type, deviceId, respObject, deviceInfoVO); // switchAlarmSendMail(companyId, receive_ts, currentRawJsonObject, type, deviceId, respObject, deviceInfoVO);
//slack、teams、email //slack、teams、email

43
src/main/java/com/techsor/datacenter/sender/service/impl/DataProcessServiceImpl.java

@ -5,8 +5,6 @@ import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.TypeReference; import com.alibaba.fastjson2.TypeReference;
import com.baidu.fsg.uid.UidGenerator; import com.baidu.fsg.uid.UidGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson; import com.google.gson.Gson;
@ -25,6 +23,7 @@ import com.techsor.datacenter.sender.dao.*;
import com.techsor.datacenter.sender.disruptor.AccumulateService; import com.techsor.datacenter.sender.disruptor.AccumulateService;
import com.techsor.datacenter.sender.disruptor.AlertService; import com.techsor.datacenter.sender.disruptor.AlertService;
import com.techsor.datacenter.sender.disruptor.MeasureService; import com.techsor.datacenter.sender.disruptor.MeasureService;
import com.techsor.datacenter.sender.dto.BlockConfigDTO;
import com.techsor.datacenter.sender.dto.DeviceAlertInfo; import com.techsor.datacenter.sender.dto.DeviceAlertInfo;
import com.techsor.datacenter.sender.dto.DeviceInfoVO; import com.techsor.datacenter.sender.dto.DeviceInfoVO;
import com.techsor.datacenter.sender.entitiy.*; import com.techsor.datacenter.sender.entitiy.*;
@ -34,11 +33,7 @@ import com.techsor.datacenter.sender.entitiy.bastatus.BaStatusThirdReqEntity;
import com.techsor.datacenter.sender.entitiy.bastatus.LatestValueBO; import com.techsor.datacenter.sender.entitiy.bastatus.LatestValueBO;
import com.techsor.datacenter.sender.entitiy.company.CompanyEntity; import com.techsor.datacenter.sender.entitiy.company.CompanyEntity;
import com.techsor.datacenter.sender.entitiy.delta.DeltaNumEntity; import com.techsor.datacenter.sender.entitiy.delta.DeltaNumEntity;
import com.techsor.datacenter.sender.entitiy.kingio.KingIODataItemEntity;
import com.techsor.datacenter.sender.entitiy.kingio.KingIODbmEntity; import com.techsor.datacenter.sender.entitiy.kingio.KingIODbmEntity;
import com.techsor.datacenter.sender.entitiy.kingio.TrendLog1RawEntity;
import com.techsor.datacenter.sender.entitiy.kingio.TrendLog1RawEntity.LogBuffer;
import com.techsor.datacenter.sender.entitiy.st150.St150DataItem;
import com.techsor.datacenter.sender.entitiy.st150.St150DbmEntity; import com.techsor.datacenter.sender.entitiy.st150.St150DbmEntity;
import com.techsor.datacenter.sender.service.AlarmDataPushLambda; import com.techsor.datacenter.sender.service.AlarmDataPushLambda;
import com.techsor.datacenter.sender.service.DispatchService; import com.techsor.datacenter.sender.service.DispatchService;
@ -53,30 +48,20 @@ import cn.hutool.core.collection.CollectionUtil;
import org.apache.commons.collections4.MapUtils; import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.MqttPersistenceException;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate; import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import jakarta.annotation.PostConstruct; import jakarta.annotation.PostConstruct;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import lombok.val;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.MessageFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -201,6 +186,9 @@ public class DataProcessServiceImpl implements IDataProcessService {
@Resource @Resource
private DeviceForwardConfigDao deviceForwardConfigDao; private DeviceForwardConfigDao deviceForwardConfigDao;
@Resource
private DashboardBlockConfigDao dashboardBlockConfigDao;
@Resource @Resource
private RedisTemplate redisTemplate; private RedisTemplate redisTemplate;
@ -642,6 +630,11 @@ public class DataProcessServiceImpl implements IDataProcessService {
//设备信息 //设备信息
DeviceInfoVO deviceInfoVO = alarmDataPushLambda.queryDeviceInfoByDeviceId(deviceId); DeviceInfoVO deviceInfoVO = alarmDataPushLambda.queryDeviceInfoByDeviceId(deviceId);
// 检查是否在告警屏蔽时段
setAlertBlock(deviceInfoVO);
baseTransDataEntity.setAlertBlock(deviceInfoVO.getAlertBlock());
try { try {
log.debug("triggerAlertConditions:{} {} {}", content, JSON.toJSON(baseTransDataEntity), JSON.toJSON(currentDeviceAlertInfoBindTemplateLists)); log.debug("triggerAlertConditions:{} {} {}", content, JSON.toJSON(baseTransDataEntity), JSON.toJSON(currentDeviceAlertInfoBindTemplateLists));
triggerAlertConditions(companyId, content, currentDeviceAlertInfoBindTemplateLists, baseTransDataEntity,waitingTargetKeySets,currentDevice.getDeviceSN(), deviceInfoVO); triggerAlertConditions(companyId, content, currentDeviceAlertInfoBindTemplateLists, baseTransDataEntity,waitingTargetKeySets,currentDevice.getDeviceSN(), deviceInfoVO);
@ -702,6 +695,24 @@ public class DataProcessServiceImpl implements IDataProcessService {
//更新 //更新
} }
private void setAlertBlock(DeviceInfoVO deviceInfoVO) {
if (deviceInfoVO != null && deviceInfoVO.getBuildingId() != null) {
List<BlockConfigDTO> blockConfigs = dashboardBlockConfigDao
.queryActiveBlockConfigsByBuildingId(deviceInfoVO.getBuildingId());
long now = System.currentTimeMillis();
boolean inBlockPeriod = blockConfigs.stream().anyMatch(
config -> config.getStartTime() != null
&& config.getEndTime() != null
&& now >= config.getStartTime()
&& now <= config.getEndTime()
);
deviceInfoVO.setAlertBlock(inBlockPeriod ? 1 : 0);
if (inBlockPeriod) {
log.debug("device {} building {} in alert block period", deviceInfoVO.getDeviceId(), deviceInfoVO.getBuildingId());
}
}
}
// private void sysAlarmNotify(DynamodbEntity baseTransDataEntity, DeviceInfoVO deviceInfoVO) throws Exception { // private void sysAlarmNotify(DynamodbEntity baseTransDataEntity, DeviceInfoVO deviceInfoVO) throws Exception {
// String temp = "建物「{0}」の監視ポイント「{1}」でアラームが発生しました"; // String temp = "建物「{0}」の監視ポイント「{1}」でアラームが発生しました";

Loading…
Cancel
Save