Browse Source

更新边缘端报警定义

lgy 4 năm trước cách đây
mục cha
commit
3cece711f2

+ 18 - 10
src/main/java/com/persagy/cache/AlarmInfoCache.java

@@ -9,12 +9,14 @@ import com.googlecode.aviator.Expression;
 import com.persagy.entity.AlarmDefine;
 import com.persagy.entity.AlarmState;
 import com.persagy.entity.Condition;
+import com.persagy.utils.StringUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.stream.Collectors;
 
@@ -129,6 +131,9 @@ public class AlarmInfoCache {
      * @version: V1.0
      */
     public void putAlarmDefinitionById(String definitionId, AlarmDefine alarmDefine) {
+        if("0".equals(alarmDefine.getOpen())){
+            return;
+        }
         Condition condition = alarmDefine.getCondition();
         List<JSONObject> infoCodes = condition.getInfoCodes();
         if(CollectionUtil.isEmpty(infoCodes)) {
@@ -225,21 +230,24 @@ public class AlarmInfoCache {
      * @exception:
      * @author: LuoGuangyi
      * @company: Persagy Technology Co.,Ltd
-     * @param alarmDefine:
+     * @param ad:  要删除掉的报警定义
      * @return: void
      * @since: 2020/10/26 20:34
      * @version: V1.0
      */
-    public void clearAlarmDefine(AlarmDefine alarmDefine) {
-        String defineId = getAlarmDefineId(alarmDefine);
+    public void clearAlarmDefine(AlarmDefine ad) {
+        String defineId = getAlarmDefineId(ad);
+        AlarmDefine alarmDefine = alarmDefineMap.get(defineId);
+        if(!Objects.isNull(alarmDefine)) {
+            List<JSONObject> infoCodes = alarmDefine.getCondition().getInfoCodes();
+            infoCodes.stream().forEach(info->{
+                String meterId = info.getString("meterId");
+                String funcId = info.getString("funcId");
+                List<AlarmDefine> AlarmDefineList = infoAlarmMap.getOrDefault(getKey(meterId, funcId),new ArrayList<>());
+                infoAlarmMap.put(getKey(meterId, funcId), AlarmDefineList.stream().filter(adTmp -> !getAlarmDefineId(adTmp).equals(defineId)).collect(Collectors.toList()));
+            });
+        }
         alarmDefineMap.remove(defineId);
-        List<JSONObject> infoCodes = alarmDefine.getCondition().getInfoCodes();
-        infoCodes.stream().forEach(info->{
-            String meterId = info.getString("meterId");
-            String funcId = info.getString("funcId");
-            List<AlarmDefine> AlarmDefineList = infoAlarmMap.getOrDefault(getKey(meterId, funcId),new ArrayList<>());
-            infoAlarmMap.put(getKey(meterId, funcId), AlarmDefineList.stream().filter(ad -> !getAlarmDefineId(ad).equals(defineId)).collect(Collectors.toList()));
-        });
     }
     /**
      * @description:获取报警定义id,

+ 7 - 0
src/main/java/com/persagy/client/GroupNettyClientHandler.java

@@ -131,6 +131,13 @@ public class GroupNettyClientHandler extends ChannelInboundHandlerAdapter {
                 if (CollectionUtil.isNotEmpty(definesList)) {
                     alarmDefineService.listSomeAlarmDefine(definesList);
                 }
+            } else if (message.getOpCode() == 10) {
+                NettyMessage<AlarmDefine> AlarmDefineMessage = JSONObject.parseObject(String.valueOf(msg), new TypeReference<NettyMessage<AlarmDefine>>() {
+                });
+                List<AlarmDefine> definesList = AlarmDefineMessage.getContent();
+                if (CollectionUtil.isNotEmpty(definesList)) {
+                    alarmDefineService.deleteAlarmDefine(definesList);
+                }
             }else if (message.getOpCode() == 8) {
                 log.info("-----过期消息----[{}]",message);
                 //{"id":"","objId":"","itemCode":""}  id为报警记录ID

+ 5 - 1
src/main/java/com/persagy/entity/AlarmDefine.java

@@ -47,6 +47,10 @@ public class AlarmDefine {
      */
     private String objId;
     /**
+     * 对象类型
+     */
+    private String classCode;
+    /**
      * 项目ID
      */
     private String projectId;
@@ -76,7 +80,7 @@ public class AlarmDefine {
      */
     private String remark;
     /**
-     * 屏蔽状态
+     * 屏蔽状态 1-生效 0-屏蔽
      */
     private int open;
     /**

+ 5 - 0
src/main/java/com/persagy/entity/AlarmRecord.java

@@ -46,6 +46,11 @@ public class AlarmRecord implements Serializable {
      */
     @ApiModelProperty(value = "对象id")
     private String objId;
+    /**
+     * 对象id
+     */
+    @ApiModelProperty(value = "对象类型")
+    private String classCode;
 
     /**
      * 严重程度

+ 2 - 1
src/main/java/com/persagy/entity/NettyMessage.java

@@ -24,9 +24,10 @@ public class NettyMessage<T> {
      * 4-边缘端获取报警定义、
      * 5-边缘端主动推送报警记录、
      * 6-边缘端主动更新报警记录状态、
-     * 7-云端推送修改的报警定义给边缘端(增量报警定义)、
+     * 7-云端推送修改的报警定义给边缘端(增量新增修改报警定义)、
      * 8-云端把报警记录的id推送到边缘端
      * 9-边缘端取报警定义,云端推送给边缘端的标记(全量报警定义)
+     * 10-云端推送删除的报警定义给边缘端(增量删除报警定义)、
      */
     @JSONField()
     private int opCode;

+ 2 - 2
src/main/java/com/persagy/job/AlarmExpireJob.java

@@ -48,7 +48,7 @@ public class AlarmExpireJob extends QuartzJobBean {
      */
     private String expireTime;
     /**
-     * 过期时间
+     * 报警定义标识(itemcode+objId)
      */
     private String defineId;
     /**
@@ -80,7 +80,7 @@ public class AlarmExpireJob extends QuartzJobBean {
                     mergedJobDataMap.put("refire",String.valueOf(StringUtil.getInt(refire)+1));
                     reFireJob(context,mergedJobDataMap);
                 }
-                log.info("报警恢复参数为:",zktAlarmRecordDO.toString());
+                log.info("报警参数为:",zktAlarmRecordDO.toString());
                 NettyMessage<JSONObject> nettyMessage = new NettyMessage<>();
                 nettyMessage.setStreamId(nums.getAndIncrement());
                 nettyMessage.setOpCode(6);

+ 2 - 0
src/main/java/com/persagy/service/AlarmDefineService.java

@@ -15,4 +15,6 @@ public interface AlarmDefineService {
     List listAllAlarmDefine(List<AlarmDefine> definesList);
 
     void listSomeAlarmDefine(List<AlarmDefine> alarmDefineList);
+
+    void deleteAlarmDefine(List<AlarmDefine> alarmDefineList);
 }

+ 17 - 0
src/main/java/com/persagy/service/impl/AlarmDefineServiceImpl.java

@@ -99,4 +99,21 @@ public class AlarmDefineServiceImpl implements AlarmDefineService {
             alarmInfoCache.putAlarmDefinitionById(alarmDefine);
         }
     }
+
+    /**
+     * @description:根据标号功能号删除报警定义
+     * @exception:
+     * @author: LuoGuangyi
+     * @company: Persagy Technology Co.,Ltd
+     * @param alarmDefineList:
+     * @return: void
+     * @since: 2020/10/29 18:26
+     * @version: V1.0
+     */
+    @Override
+    public void deleteAlarmDefine(List<AlarmDefine> alarmDefineList) {
+        for (AlarmDefine alarmDefine : alarmDefineList) {
+            alarmInfoCache.clearAlarmDefine(alarmDefine);
+        }
+    }
 }

+ 5 - 1
src/main/java/com/persagy/service/impl/AlarmHandleServiceImpl.java

@@ -1,6 +1,8 @@
 package com.persagy.service.impl;
 
+import cn.hutool.core.collection.CollectionUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.google.common.collect.Maps;
 import com.googlecode.aviator.AviatorEvaluator;
 import com.googlecode.aviator.Expression;
 import com.persagy.cache.AlarmInfoCache;
@@ -200,7 +202,8 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
                         //报警恢复,报警状态重置回默认
                         alarmState.reset();
                     }else {
-                        log.warn("找不到该条报警状态的信息");
+                        log.warn("找不到该条报警状态的信息,可能是该条报警已经屏蔽");
+
                     }
                 }
             }
@@ -284,6 +287,7 @@ public class AlarmHandleServiceImpl implements AlarmHandleService {
                             .groupCode(groupCode)
                             .itemCode(alarmDefine.getItemCode())
                             .objId(alarmDefine.getObjId())
+                            .classCode(alarmDefine.getClassCode())
                             .createUser(systemId)
                             .build();
                     NettyMessage<AlarmRecord> nettyMessage = new NettyMessage<>();

+ 1 - 1
src/main/resources/application.yml

@@ -39,7 +39,7 @@ spring:
 group:
   code: wd   #标识哪个接团 比如万达使用wd
   alarm:
-    host: 39.102.43.179     #netty IP 127.0.0.1
+    host: 127.0.0.1 #39.102.43.179     #netty IP 127.0.0.1
     port: 9986          #netty 端口9986
 terminal:  #边缘端IOT采集程序地址
   alarm:  # 拼接后的地址为ws://host:port/suffix

+ 10 - 10
src/main/resources/zkt_alarm_tables_mysql_innodb.sql

@@ -178,15 +178,15 @@ CREATE INDEX IDX_ZKT_ALARM_FT_JG ON ZKT_ALARM_FIRED_TRIGGERS(SCHED_NAME,JOB_GROU
 CREATE INDEX IDX_ZKT_ALARM_FT_T_G ON ZKT_ALARM_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP);
 CREATE INDEX IDX_ZKT_ALARM_FT_TG ON ZKT_ALARM_FIRED_TRIGGERS(SCHED_NAME,TRIGGER_GROUP);
 CREATE TABLE `zkt_alarm_record`  (
-  `definition_id` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '报警定义ID',
-  `item_code` varchar(42) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '报警条目编码',
-  `obj_id` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '报警对象ID',
-  `state` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '报警定义对应最新一条报警记录状态',
-  `alarm_id` varchar(42) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '报警定义对应最新一条报警记录ID',
-  `alarm_time` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '报警时间',
-  `effect_end_time` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '报警生效结束时间(报警过期时间)',
-  `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
-  `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '报警名称',
-  PRIMARY KEY (`definition_id`) USING BTREE
+                                     `definition_id` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '' COMMENT '报警定义ID',
+                                     `item_code` varchar(42) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '报警条目编码',
+                                     `obj_id` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '报警对象ID',
+                                     `state` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '报警定义对应最新一条报警记录状态',
+                                     `alarm_id` varchar(42) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '报警定义对应最新一条报警记录ID',
+                                     `alarm_time` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '报警时间',
+                                     `effect_end_time` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '报警生效结束时间(报警过期时间)',
+                                     `remark` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '备注',
+                                     `name` varchar(100) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '报警名称',
+                                     PRIMARY KEY (`definition_id`) USING BTREE
 ) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '报警记录ID' ROW_FORMAT = Dynamic;
 commit;