|
@@ -62,7 +62,16 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
*/
|
|
|
@Value("${project.id}")
|
|
|
String projectId;
|
|
|
-
|
|
|
+ /**
|
|
|
+ * @description:处理iot采集数据
|
|
|
+ * @exception:
|
|
|
+ * @author: LuoGuangyi
|
|
|
+ * @company: Persagy Technology Co.,Ltd
|
|
|
+ * @param msg:
|
|
|
+ * @return: void
|
|
|
+ * @since: 2020/10/27 14:28
|
|
|
+ * @version: V1.0
|
|
|
+ */
|
|
|
@Override
|
|
|
public void handleIOTData(String msg) throws SchedulerException, InterruptedException {
|
|
|
String[] split = msg.split(";");
|
|
@@ -71,7 +80,10 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
}
|
|
|
//返回的信息点个数
|
|
|
int nums = (split.length) / 4;
|
|
|
- log.info("接收信息length:[{}]数据为:{}", nums,msg);
|
|
|
+ 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];
|
|
@@ -85,6 +97,7 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
Condition condition = alarmDefine.getCondition();
|
|
|
List<JSONObject> codeDetail = condition.getInfoCodes();
|
|
|
boolean match = codeDetail.stream().allMatch(p -> currentDataCache.hasKey(p.getString("meterId"), p.getString("funcId")));
|
|
|
+ //报警定义的所有信息点都有采集数值,具备判断条件
|
|
|
if (match) {
|
|
|
String defineId = AlarmInfoCache.getAlarmDefineId(alarmDefine);
|
|
|
String trigger = condition.getTrigger();
|
|
@@ -98,8 +111,7 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
Expression endExp = AviatorEvaluator.compile(end, true);
|
|
|
Boolean triggerResult = (Boolean) triggerExp.execute(paramMap);
|
|
|
Boolean endResult = (Boolean) endExp.execute(paramMap);
|
|
|
- System.out.println("triggerResult:" + triggerResult);
|
|
|
- System.out.println("endResult:" + endResult);
|
|
|
+ log.info("triggerResult:[{}],endResult:[{}]" , triggerResult,endResult);
|
|
|
if (triggerResult && endResult) {
|
|
|
log.warn("报警触发条件和报警恢复条件同时满足,请检查,报警定义详情【{}】", alarmDefine.toString());
|
|
|
}
|
|
@@ -160,35 +172,36 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
endTime = dateTime;
|
|
|
}
|
|
|
alarmState.setAlarmEndTime(endTime);
|
|
|
- alarmState.setAlarmStartTime("");
|
|
|
//设置开始恢复时间
|
|
|
int uphold = condition.getEndUphold();
|
|
|
//超过报警恢复设置的持续时间
|
|
|
- if (DateUtils.betweenTwoTimeSecond(endTime, dateTime) >= 0) {
|
|
|
+ if (DateUtils.betweenTwoTimeSecond(endTime, dateTime) >= uphold) {
|
|
|
log.error("产生一条报警恢复消息");
|
|
|
NettyMessage<JSONObject> nettyMessage = new NettyMessage<>();
|
|
|
nettyMessage.setOpCode(6);
|
|
|
JSONObject result = new JSONObject();
|
|
|
- ZktAlarmRecordDO alarmRecordDO = alarmRecordRepository.findById(AlarmInfoCache.getAlarmDefineId(alarmDefine)).orElse(new ZktAlarmRecordDO());
|
|
|
- //TODO : 为空处理
|
|
|
- result.put("id", alarmRecordDO.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"}
|
|
|
- groupNettyClient.sendMessage(nettyMessage.toString());
|
|
|
-
|
|
|
- log.error("产生一条取消报警过期定时任务的消息");
|
|
|
- String jobName = AlarmInfoCache.getAlarmDefineId(alarmDefine);
|
|
|
- ExpireAlarmMessage em = new ExpireAlarmMessage();
|
|
|
- //取消过期消息
|
|
|
- em.setType("2");
|
|
|
- em.setJobName(jobName);
|
|
|
- em.setJobGroupName("expire");
|
|
|
- ExpireAlarmQueue.getExpireAlarmMessageQueue().produce(em);
|
|
|
- //报警恢复,报警状态重置回默认
|
|
|
- alarmState.reset();
|
|
|
+ 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"}
|
|
|
+ groupNettyClient.sendMessage(nettyMessage.toString());
|
|
|
+ log.error("产生一条取消报警过期定时任务的消息");
|
|
|
+ String jobName = AlarmInfoCache.getAlarmDefineId(alarmDefine);
|
|
|
+ ExpireAlarmMessage em = new ExpireAlarmMessage();
|
|
|
+ //取消过期消息
|
|
|
+ em.setType("2");
|
|
|
+ em.setJobName(jobName);
|
|
|
+ em.setJobGroupName("expire");
|
|
|
+ ExpireAlarmQueue.getExpireAlarmMessageQueue().produce(em);
|
|
|
+ //报警恢复,报警状态重置回默认
|
|
|
+ alarmState.reset();
|
|
|
+ }else {
|
|
|
+ log.warn("找不到该条报警状态的信息");
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
alarmInfoCache.setAlarmState(defineId, alarmState);
|
|
@@ -241,6 +254,9 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
long timeSecond = 0;
|
|
|
if (StringUtil.isNotEmpty(alarmState.getAlarmStartTime())) {
|
|
|
timeSecond = DateUtils.betweenTwoTimeSecond(alarmState.getAlarmStartTime(), dateTime);
|
|
|
+ }else {
|
|
|
+ //设置开始报警时间
|
|
|
+ alarmState.setAlarmStartTime(dateTime);
|
|
|
}
|
|
|
LocalDateTime expireDateTime = null;
|
|
|
Date expireDate = null;
|
|
@@ -251,8 +267,7 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
expireDateTime = LocalDateTime.of(LocalDate.now(), localTime);
|
|
|
expireDate = DateUtils.localDateTime2Date(expireDateTime);
|
|
|
}
|
|
|
- //设置开始报警时间
|
|
|
- alarmState.setAlarmStartTime(dateTime);
|
|
|
+
|
|
|
if (timeSecond >= condition.getTriggerUphold()) {
|
|
|
log.error("大于持续时间了,产生一条报警");
|
|
|
AlarmRecord alarmRecord = AlarmRecord.builder()
|
|
@@ -288,7 +303,8 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
//过期时间
|
|
|
log.error("产生一条定时过期报警消息");
|
|
|
String alarmId = alarmRecordRepository.findById(defineId).orElse(new ZktAlarmRecordDO()).getAlarmId();
|
|
|
- ZktAlarmRecordDO alarmRecordDO = ZktAlarmRecordDO.builder().alarmTime(alarmState.getAlarmStartTime())
|
|
|
+ ZktAlarmRecordDO alarmRecordDO = ZktAlarmRecordDO.builder()
|
|
|
+ .alarmTime(alarmState.getAlarmStartTime())
|
|
|
.effectEndTime(DateUtils.format(expireDateTime))
|
|
|
.definitionId(defineId)
|
|
|
.itemCode(alarmDefine.getItemCode())
|
|
@@ -301,7 +317,8 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
|
|
|
jobDataMap.put("alarmRecord", alarmRecordDO.toString());
|
|
|
jobDataMap.put("refire", "0");
|
|
|
jobDataMap.put("expireTime", DateUtils.format(expireDateTime));
|
|
|
- String jobName = AlarmInfoCache.getAlarmDefineId(alarmDefine);
|
|
|
+ jobDataMap.put("defineId", defineId);
|
|
|
+ String jobName = defineId;
|
|
|
ExpireAlarmMessage em = new ExpireAlarmMessage();
|
|
|
//过期消息
|
|
|
em.setType("1");
|