|
@@ -1,6 +1,7 @@
|
|
|
package com.persagy.service.impl;
|
|
|
|
|
|
import cn.hutool.core.collection.CollectionUtil;
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import com.google.common.collect.Maps;
|
|
|
import com.googlecode.aviator.AviatorEvaluator;
|
|
@@ -16,6 +17,7 @@ import com.persagy.service.AlarmQuartzService;
|
|
|
import com.persagy.utils.DateUtils;
|
|
|
import com.persagy.utils.StringUtil;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
import org.quartz.JobDataMap;
|
|
|
import org.quartz.SchedulerException;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -82,10 +84,6 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
}
|
|
|
//返回的信息点个数
|
|
|
int nums = (split.length) / 4;
|
|
|
- if(log.isDebugEnabled()){
|
|
|
- log.debug("接收信息length:[{}]数据为:{}", nums,msg);
|
|
|
- }
|
|
|
- System.out.println(nums);
|
|
|
for (int i = 0; i < nums; i++) {
|
|
|
String dateTime = split[i * 4];
|
|
|
String meterId = split[i * 4 + 1];
|
|
@@ -133,7 +131,7 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
log.info("--"+alarmDefine.toString());
|
|
|
log.info("--"+JSONObject.toJSONString(paramMap));
|
|
|
//当前数据正常
|
|
|
- handlerNowDataNormal(alarmDefine, dateTime, condition, defineId, endResult, alarmState);
|
|
|
+ handlerNowDataNormal(alarmDefine, dateTime, condition, defineId, endResult, alarmState,paramMap);
|
|
|
}
|
|
|
} else {
|
|
|
log.warn("部分信息点没有数值:[{}]", codeDetail);
|
|
@@ -145,12 +143,13 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * @param alarmDefine: 报警定义
|
|
|
- * @param dateTime:IOT采集时间
|
|
|
- * @param condition:报警条件
|
|
|
- * @param defineId:报警定义ID
|
|
|
- * @param endResult:报警恢复监测结果
|
|
|
- * @param alarmState: 报警状态时间实体
|
|
|
+ * @param alarmDefine : 报警定义
|
|
|
+ * @param dateTime :IOT采集时间
|
|
|
+ * @param condition :报警条件
|
|
|
+ * @param defineId :报警定义ID
|
|
|
+ * @param endResult :报警恢复监测结果
|
|
|
+ * @param alarmState : 报警状态时间实体
|
|
|
+ * @param paramMap 报警恢复触发值
|
|
|
* @description:当前数据正常判断逻辑
|
|
|
* @exception:
|
|
|
* @author: LuoGuangyi
|
|
@@ -159,7 +158,7 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
* @since: 2020/10/21 16:46
|
|
|
* @version: V1.0
|
|
|
*/
|
|
|
- private void handlerNowDataNormal(AlarmDefine alarmDefine, String dateTime, Condition condition, String defineId, Boolean endResult, AlarmState alarmState) throws InterruptedException {
|
|
|
+ private void handlerNowDataNormal(AlarmDefine alarmDefine, String dateTime, Condition condition, String defineId, Boolean endResult, AlarmState alarmState, HashMap paramMap) throws InterruptedException {
|
|
|
//当前数据正常,报警状态为正常:清空之前的报警计时,重置回默认状态
|
|
|
if (AlarmState.State.NORMAL.getType().equals(alarmState.getState())) {
|
|
|
alarmState = new AlarmState(defineId);
|
|
@@ -178,33 +177,64 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
int uphold = condition.getEndUphold();
|
|
|
//超过报警恢复设置的持续时间
|
|
|
if (DateUtils.betweenTwoTimeSecond(endTime, dateTime) >= uphold) {
|
|
|
- log.error("产生一条报警恢复消息");
|
|
|
- NettyMessage<JSONObject> nettyMessage = new NettyMessage<>();
|
|
|
+ log.error("产生一条报警恢复消息[{}]>[{}]",DateUtils.betweenTwoTimeSecond(endTime, dateTime),uphold);
|
|
|
+ NettyMessage<AlarmRecord> nettyMessage = new NettyMessage<>();
|
|
|
nettyMessage.setOpCode(6);
|
|
|
- JSONObject result = new JSONObject();
|
|
|
- Optional<ZktAlarmRecordDO> alarmRecordDO = alarmRecordRepository.findById(AlarmInfoCache.getAlarmDefineId(alarmDefine));
|
|
|
- if (alarmRecordDO.isPresent()){
|
|
|
- result.put("id", alarmRecordDO.get().getAlarmId());
|
|
|
- result.put("state", "2");
|
|
|
- result.put("groupCode", groupCode);
|
|
|
- result.put("projectId", projectId);
|
|
|
- nettyMessage.setContent(Arrays.asList(result));
|
|
|
- //{"id","123", "state":1, "groupCode":"wd", "projectId":"Pj123"}
|
|
|
+ ZktAlarmRecordDO alarmRecordDO = alarmRecordRepository.findById(AlarmInfoCache.getAlarmDefineId(alarmDefine)).orElse(new ZktAlarmRecordDO());
|
|
|
+ alarmRecordDO.setDefinitionId(defineId);
|
|
|
+ alarmRecordDO.setObjId(alarmDefine.getObjId());
|
|
|
+ alarmRecordDO.setItemCode(alarmDefine.getItemCode());
|
|
|
+ alarmRecordDO.setState("2");
|
|
|
+ alarmRecordDO.setEndTime(DateUtils.parseDate(dateTime));
|
|
|
+ alarmRecordDO.setEndInfo(JSONObject.toJSONString(paramMap));
|
|
|
+ //更新报警状态
|
|
|
+ alarmRecordRepository.save(alarmRecordDO);
|
|
|
+ String alarmId = alarmRecordDO.getAlarmId();
|
|
|
+ //报警恢复参数
|
|
|
+ AlarmRecord alarmResumeRecord = AlarmRecord.builder()
|
|
|
+ .state(2)
|
|
|
+ .groupCode(groupCode)
|
|
|
+ .projectId(projectId)
|
|
|
+ .endTime(DateUtils.parseDate(dateTime))
|
|
|
+ .endInfo(JSONObject.toJSONString(paramMap))
|
|
|
+ .build();
|
|
|
+ //如果有报警ID,直接报警恢复
|
|
|
+ if(StringUtils.isNotEmpty(alarmId)) {
|
|
|
+ alarmResumeRecord.setId(alarmId);
|
|
|
+ nettyMessage.setContent(Arrays.asList(alarmResumeRecord));
|
|
|
+ //{"id","123", "state":1, "groupCode":"wd", "projectId":"Pj123","endTime":"","endInfo":""}
|
|
|
groupNettyClient.sendMessage(nettyMessage.toString());
|
|
|
- log.error("产生一条取消报警过期定时任务的消息");
|
|
|
- String jobName = AlarmInfoCache.getAlarmDefineId(alarmDefine);
|
|
|
+ }else {
|
|
|
+ //如果没有报警ID,定时任务再次测试
|
|
|
+ JobDataMap jobDataMap = new JobDataMap();
|
|
|
+ jobDataMap.put("alarmRecord", alarmRecordDO.toString());
|
|
|
+ jobDataMap.put("refire", "0");
|
|
|
+ jobDataMap.put("endTime", dateTime);
|
|
|
+ jobDataMap.put("endInfo", JSONObject.toJSONString(paramMap));
|
|
|
+ jobDataMap.put("defineId", defineId);
|
|
|
+ //恢复
|
|
|
+ jobDataMap.put("state", "2");
|
|
|
+ log.info(JSONObject.toJSONString(jobDataMap));
|
|
|
+ String jobName = defineId;
|
|
|
ExpireAlarmMessage em = new ExpireAlarmMessage();
|
|
|
- //取消过期消息
|
|
|
- em.setType("2");
|
|
|
+ //过期消息
|
|
|
+ em.setType("1");
|
|
|
+ em.setStartTime(DateUtil.offsetMinute(new Date(),3).toJdkDate());
|
|
|
+ em.setJobDataMap(jobDataMap);
|
|
|
em.setJobName(jobName);
|
|
|
- em.setJobGroupName("expire");
|
|
|
+ em.setJobGroupName("resume");
|
|
|
ExpireAlarmQueue.getExpireAlarmMessageQueue().produce(em);
|
|
|
- //报警恢复,报警状态重置回默认
|
|
|
- alarmState.reset();
|
|
|
- }else {
|
|
|
- log.warn("找不到该条报警状态的信息,可能是该条报警已经屏蔽");
|
|
|
-
|
|
|
}
|
|
|
+
|
|
|
+ String jobName = AlarmInfoCache.getAlarmDefineId(alarmDefine);
|
|
|
+ ExpireAlarmMessage em = new ExpireAlarmMessage();
|
|
|
+ //取消过期消息
|
|
|
+ em.setType("2");
|
|
|
+ em.setJobName(jobName);
|
|
|
+ em.setJobGroupName("expire");
|
|
|
+ ExpireAlarmQueue.getExpireAlarmMessageQueue().produce(em);
|
|
|
+ //报警恢复,报警状态重置回默认
|
|
|
+ alarmState.reset();
|
|
|
}
|
|
|
}
|
|
|
alarmInfoCache.setAlarmState(defineId, alarmState);
|
|
@@ -272,7 +302,7 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
}
|
|
|
|
|
|
if (timeSecond >= condition.getTriggerUphold()) {
|
|
|
- log.error("大于持续时间了,产生一条报警");
|
|
|
+ log.warn("大于持续时间了,产生一条报警[{}]>[{}]",timeSecond,condition.getTriggerUphold());
|
|
|
AlarmRecord alarmRecord = AlarmRecord.builder()
|
|
|
.category(alarmDefine.getCategory())
|
|
|
.concern(alarmDefine.getConcern())
|
|
@@ -322,6 +352,8 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
jobDataMap.put("refire", "0");
|
|
|
jobDataMap.put("expireTime", DateUtils.format(expireDateTime));
|
|
|
jobDataMap.put("defineId", defineId);
|
|
|
+ //过期
|
|
|
+ jobDataMap.put("state", "3");
|
|
|
String jobName = defineId;
|
|
|
ExpireAlarmMessage em = new ExpireAlarmMessage();
|
|
|
//过期消息
|