|
|
|
@ -1,18 +1,31 @@
|
|
|
|
|
package com.mh.system.service.operation.impl; |
|
|
|
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
|
|
|
|
import com.mh.common.core.domain.entity.AlarmCode; |
|
|
|
|
import com.mh.common.core.domain.entity.AlarmRecords; |
|
|
|
|
import com.mh.common.core.domain.entity.AlarmRules; |
|
|
|
|
import com.mh.common.core.domain.entity.CollectionParamsManage; |
|
|
|
|
import com.mh.common.core.redis.RedisCache; |
|
|
|
|
import com.mh.common.utils.BigDecimalUtils; |
|
|
|
|
import com.mh.common.utils.DateUtils; |
|
|
|
|
import com.mh.common.utils.StringUtils; |
|
|
|
|
import com.mh.system.mapper.operation.AlarmRecordsMapper; |
|
|
|
|
import com.mh.system.service.device.ICollectionParamsManageService; |
|
|
|
|
import com.mh.system.service.operation.IAlarmCodeService; |
|
|
|
|
import com.mh.system.service.operation.IAlarmRecordsService; |
|
|
|
|
import com.mh.system.service.operation.IAlarmRulesService; |
|
|
|
|
import jakarta.annotation.Resource; |
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
|
import java.math.RoundingMode; |
|
|
|
|
import java.text.SimpleDateFormat; |
|
|
|
|
import java.time.LocalDate; |
|
|
|
|
import java.time.LocalDateTime; |
|
|
|
|
import java.time.format.DateTimeFormatter; |
|
|
|
|
import java.util.Date; |
|
|
|
|
import java.util.List; |
|
|
|
|
import java.util.concurrent.TimeUnit; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @author LJF |
|
|
|
@ -27,6 +40,18 @@ public class AlarmRecordsServiceImpl implements IAlarmRecordsService {
|
|
|
|
|
@Resource |
|
|
|
|
private AlarmRecordsMapper alarmRecordsMapper; |
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
|
private IAlarmRulesService alarmRulesService; |
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
|
private IAlarmCodeService alarmCodeService; |
|
|
|
|
|
|
|
|
|
@Resource |
|
|
|
|
private ICollectionParamsManageService collectionParamsManageService; |
|
|
|
|
|
|
|
|
|
@Autowired |
|
|
|
|
private RedisCache redisTemplate; |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public AlarmRecords selectIsExist(AlarmRecords alarmRecords) { |
|
|
|
|
QueryWrapper<AlarmRecords> queryWrapper = new QueryWrapper<>(); |
|
|
|
@ -76,7 +101,7 @@ public class AlarmRecordsServiceImpl implements IAlarmRecordsService {
|
|
|
|
|
queryWrapper.like("device_name", alarmRecords.getDeviceName()); |
|
|
|
|
} |
|
|
|
|
// 报警时间范围
|
|
|
|
|
if (alarmRecords.getParams() != null && !alarmRecords.getParams().isEmpty()) { |
|
|
|
|
if (alarmRecords.getParams() != null && !alarmRecords.getParams().isEmpty()) { |
|
|
|
|
String beginTimeStr = (String) alarmRecords.getParams().get("beginTime"); |
|
|
|
|
String endTimeStr = (String) alarmRecords.getParams().get("endTime"); |
|
|
|
|
|
|
|
|
@ -137,4 +162,112 @@ public class AlarmRecordsServiceImpl implements IAlarmRecordsService {
|
|
|
|
|
public void updateAlarmRecordById(String id, int isSend) { |
|
|
|
|
alarmRecordsMapper.updateIsSendById(id, isSend); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void insertOrUpdateAlarmRecord(String cpmId) { |
|
|
|
|
// 查询仪表报警规则记录,查看哪些规则启用了
|
|
|
|
|
List<AlarmRules> alarmRules = alarmRulesService.selectAlarmRulesListByStatus(0); |
|
|
|
|
// 循环查询报警规则,判断是否满足报警条件
|
|
|
|
|
for (AlarmRules alarmRule : alarmRules) { |
|
|
|
|
if (!alarmRule.getCpmId().equals(cpmId)) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
// 判断报警类型
|
|
|
|
|
if ("0".equals(alarmRule.getAlarmType())) { |
|
|
|
|
// 当前是越限事件
|
|
|
|
|
// 查询事件类型查询对应的报警模板内容
|
|
|
|
|
AlarmCode alarmCode = alarmCodeService.selectAlarmCodeByAlarmType(alarmRule.getEventType()); |
|
|
|
|
// 获取当前采集参数值
|
|
|
|
|
CollectionParamsManage collectionParamsManage = collectionParamsManageService.selectCollectionParamsManageById(alarmRule.getCpmId()); |
|
|
|
|
// 判断当前值是否是当前事件
|
|
|
|
|
if (null == collectionParamsManage) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
AlarmRecords alarmRecords = new AlarmRecords(); |
|
|
|
|
BigDecimal curValue = collectionParamsManage.getCurValue(); |
|
|
|
|
Date curTime = collectionParamsManage.getCurTime(); |
|
|
|
|
// 阈值
|
|
|
|
|
String threshold1 = alarmRule.getThreshold1(); |
|
|
|
|
// 设置Redis取消标记(有效期略大于延迟时间)
|
|
|
|
|
redisTemplate.deleteObject("alarm:cancel:" + collectionParamsManage.getId()); |
|
|
|
|
if (alarmRule.getTimePeriodSet() == 0 && DateUtils.isSameDay(curTime, new Date())) { |
|
|
|
|
// 执行相关操作
|
|
|
|
|
insertOrUpdateRecord(alarmRule, curValue, threshold1, alarmCode, alarmRecords, collectionParamsManage); |
|
|
|
|
} else if (alarmRule.getTimePeriodSet() == 1 |
|
|
|
|
&& DateUtils.isSameDay(collectionParamsManage.getCurTime(), new Date()) |
|
|
|
|
&& DateUtils.isCurrentTimeInRange(alarmRule.getBeginTime(), alarmRule.getEndTime(), curTime) |
|
|
|
|
) { |
|
|
|
|
// 执行相关操作
|
|
|
|
|
insertOrUpdateRecord(alarmRule, curValue, threshold1, alarmCode, alarmRecords, collectionParamsManage); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public String createAlarmTask() { |
|
|
|
|
// 查询仪表报警规则记录,查看哪些规则启用了
|
|
|
|
|
List<AlarmRules> alarmRules = alarmRulesService.selectAlarmRulesListByStatus(0); |
|
|
|
|
// 循环查询报警规则,判断是否满足报警条件
|
|
|
|
|
for (AlarmRules alarmRule : alarmRules) { |
|
|
|
|
// 判断报警类型
|
|
|
|
|
if ("0".equals(alarmRule.getAlarmType())) { |
|
|
|
|
// 当前是越限事件
|
|
|
|
|
// 获取当前采集参数值
|
|
|
|
|
CollectionParamsManage collectionParamsManage = collectionParamsManageService.selectCollectionParamsManageById(alarmRule.getCpmId()); |
|
|
|
|
// 判断当前值是否是当前事件
|
|
|
|
|
if (null == collectionParamsManage) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
AlarmRecords alarmRecords = new AlarmRecords(); |
|
|
|
|
BigDecimal curValue = collectionParamsManage.getCurValue(); |
|
|
|
|
Date curTime = collectionParamsManage.getCurTime(); |
|
|
|
|
// 阈值
|
|
|
|
|
String threshold1 = alarmRule.getThreshold1(); |
|
|
|
|
if (curValue.compareTo(BigDecimal.ZERO) == 0 || curValue.compareTo(new BigDecimal(threshold1)) < 0) { |
|
|
|
|
// 发送到延迟队列
|
|
|
|
|
return collectionParamsManage.getId(); |
|
|
|
|
} else { |
|
|
|
|
// 设置Redis取消标记(有效期略大于延迟时间)
|
|
|
|
|
redisTemplate.setCacheObject( |
|
|
|
|
"alarm:cancel:" + collectionParamsManage.getId(), |
|
|
|
|
"true", |
|
|
|
|
2, TimeUnit.MINUTES // 例如:延迟5分钟,设置10分钟过期
|
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void insertOrUpdateRecord(AlarmRules alarmRule, BigDecimal curValue, String threshold1, AlarmCode alarmCode, AlarmRecords alarmRecords, CollectionParamsManage collectionParamsManage) { |
|
|
|
|
boolean compare = BigDecimalUtils.compare(alarmRule.getCondition1(), curValue, new BigDecimal(threshold1)); |
|
|
|
|
if (compare) { |
|
|
|
|
// 创建报警记录
|
|
|
|
|
String content = alarmCode.getMsgContent(); |
|
|
|
|
content = content.replace("#{curValue}", curValue.setScale(1, RoundingMode.HALF_UP).toString()); |
|
|
|
|
content = content.replace("#{setValue}", alarmRule.getCondition1() + threshold1); |
|
|
|
|
alarmRecords.setContent(content); |
|
|
|
|
alarmRecords.setAlarmType(alarmRule.getAlarmType()); |
|
|
|
|
alarmRecords.setEventType(alarmRule.getEventType()); |
|
|
|
|
alarmRecords.setAlarmLevel(alarmRule.getAlarmLevel()); |
|
|
|
|
alarmRecords.setLedgerId(alarmRule.getLedgerId()); |
|
|
|
|
alarmRecords.setCpmId(alarmRule.getCpmId()); |
|
|
|
|
alarmRecords.setDeviceName(alarmRule.getDeviceName()); |
|
|
|
|
alarmRecords.setCpmName(alarmRule.getCpmName()); |
|
|
|
|
alarmRecords.setCreateTime(collectionParamsManage.getCurTime()); |
|
|
|
|
// 判断报警记录是否已经存在
|
|
|
|
|
AlarmRecords isExits = selectIsExist(alarmRecords); |
|
|
|
|
if (isExits == null) { |
|
|
|
|
insertAlarmRecord(alarmRecords); |
|
|
|
|
} else { |
|
|
|
|
// 更新报警记录
|
|
|
|
|
isExits.setContent(content); |
|
|
|
|
isExits.setCreateTime(collectionParamsManage.getCurTime()); |
|
|
|
|
isExits.setStatus(0); |
|
|
|
|
isExits.setIsSend(0); |
|
|
|
|
updateAlarmRecord(isExits); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|