Преглед изворни кода

告警阶段提交:自动补充离线告警

yf_zn пре 9 месеци
родитељ
комит
9cd3f3cc66

+ 8 - 0
src/main/java/com/yunfeiyun/agmp/iots/AgmpIotsApplication.java

@@ -2,6 +2,7 @@ package com.yunfeiyun.agmp.iots;
 
 
 import com.yunfeiyun.agmp.common.utils.spring.SpringUtils;
 import com.yunfeiyun.agmp.common.utils.spring.SpringUtils;
 import com.yunfeiyun.agmp.iots.core.manager.ConnectionManager;
 import com.yunfeiyun.agmp.iots.core.manager.ConnectionManager;
+import com.yunfeiyun.agmp.iots.warn.service.WarnService;
 import org.mybatis.spring.annotation.MapperScan;
 import org.mybatis.spring.annotation.MapperScan;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
@@ -28,6 +29,13 @@ public class AgmpIotsApplication {
     public static void main(String[] args) {
     public static void main(String[] args) {
         SpringApplication.run(AgmpIotsApplication.class, args);
         SpringApplication.run(AgmpIotsApplication.class, args);
         log.info("物联网服务子系统启动成功");
         log.info("物联网服务子系统启动成功");
+        //启动后检查离线配置,没有则自动添加
+        try {
+            log.info("【告警】检查租户 离线配置 {}");
+            SpringUtils.getBean(WarnService.class).checkTenantOfflineConfig();
+        } catch (Exception e) {
+            log.info("【告警】检查租户 离线配置 异常", e);
+        }
         //便启动边订阅收到消息处理导致启动太慢,启动之后再进行连接创建和链接
         //便启动边订阅收到消息处理导致启动太慢,启动之后再进行连接创建和链接
         log.info("【链接建立初始化】【执行】");
         log.info("【链接建立初始化】【执行】");
         long st = System.currentTimeMillis();
         long st = System.currentTimeMillis();

+ 5 - 0
src/main/java/com/yunfeiyun/agmp/iots/warn/mapper/IotWarnBussinessMapper.java

@@ -53,4 +53,9 @@ public interface IotWarnBussinessMapper {
     int resetReCountByDevIdAndConfigId(@Param("devBid") String devBid, @Param("wcBid") String configId);
     int resetReCountByDevIdAndConfigId(@Param("devBid") String devBid, @Param("wcBid") String configId);
 
 
     IotWarnconfig selectIotWarnOfflineConfigInfo(@Param("tid") String tid);
     IotWarnconfig selectIotWarnOfflineConfigInfo(@Param("tid") String tid);
+
+    List<String> selectAllTid();
+
+    int insertIotOfflineWarnconfig(IotWarnconfig iotWarnconfig);
+
 }
 }

+ 23 - 3
src/main/java/com/yunfeiyun/agmp/iots/warn/service/IotWarnBussinessService.java

@@ -4,6 +4,7 @@ import com.yunfeiyun.agmp.common.enums.RedisCacheKey;
 import com.yunfeiyun.agmp.common.framework.manager.RedisCacheManager;
 import com.yunfeiyun.agmp.common.framework.manager.RedisCacheManager;
 import com.yunfeiyun.agmp.common.utils.DateUtils;
 import com.yunfeiyun.agmp.common.utils.DateUtils;
 import com.yunfeiyun.agmp.common.utils.uuid.IdUtils;
 import com.yunfeiyun.agmp.common.utils.uuid.IdUtils;
+import com.yunfeiyun.agmp.common.web.system.domain.SysConfig;
 import com.yunfeiyun.agmp.iot.common.domain.IotWarnconfig;
 import com.yunfeiyun.agmp.iot.common.domain.IotWarnconfig;
 import com.yunfeiyun.agmp.iot.common.domain.IotWarncount;
 import com.yunfeiyun.agmp.iot.common.domain.IotWarncount;
 import com.yunfeiyun.agmp.iot.common.domain.IotWarnlog;
 import com.yunfeiyun.agmp.iot.common.domain.IotWarnlog;
@@ -81,9 +82,9 @@ public class IotWarnBussinessService {
         for (IotWarncount iotWarncount : iotWarncounts) {
         for (IotWarncount iotWarncount : iotWarncounts) {
             try {
             try {
                 redisCacheManager.deleteObject(RedisCacheKey.IOT_WARN_RE_COUNTS, iotWarncount.getWcBid() + ":" + iotWarncount.getDevBid());
                 redisCacheManager.deleteObject(RedisCacheKey.IOT_WARN_RE_COUNTS, iotWarncount.getWcBid() + ":" + iotWarncount.getDevBid());
-                log.info("重置所有重复次数:配置id:{},设备id{},成功", iotWarncount.getWcBid() , iotWarncount.getDevBid());
+                log.info("重置所有重复次数:配置id:{},设备id{},成功", iotWarncount.getWcBid(), iotWarncount.getDevBid());
             } catch (Exception e) {
             } catch (Exception e) {
-                log.info("重置所有重复次数:配置id:{},设备id{},异常:{}", iotWarncount.getWcBid() , iotWarncount.getDevBid(), e);
+                log.info("重置所有重复次数:配置id:{},设备id{},异常:{}", iotWarncount.getWcBid(), iotWarncount.getDevBid(), e);
             }
             }
         }
         }
         int result = iotWarncountMapper.resetReCount();
         int result = iotWarncountMapper.resetReCount();
@@ -112,8 +113,9 @@ public class IotWarnBussinessService {
         log.info("查询到 {} 条预警配置信息", list.size());
         log.info("查询到 {} 条预警配置信息", list.size());
         return list;
         return list;
     }
     }
+
     public IotWarnconfig selectIotWarnOfflineConfigInfo(String tid) {
     public IotWarnconfig selectIotWarnOfflineConfigInfo(String tid) {
-        log.info("查询预警配置信息列表");
+        log.info("查询预警离线配置tid:{}", tid);
         IotWarnconfig list = iotWarncountMapper.selectIotWarnOfflineConfigInfo(tid);
         IotWarnconfig list = iotWarncountMapper.selectIotWarnOfflineConfigInfo(tid);
         return list;
         return list;
     }
     }
@@ -132,4 +134,22 @@ public class IotWarnBussinessService {
         log.info("构建完成,共包含 {} 个不同的配置ID", warnConfigInfoMap.size());
         log.info("构建完成,共包含 {} 个不同的配置ID", warnConfigInfoMap.size());
         return warnConfigInfoMap;
         return warnConfigInfoMap;
     }
     }
+
+    public List<String> selectAllTid() {
+        return iotWarncountMapper.selectAllTid();
+    }
+
+    public int insertIotOfflineWarnConfig(String tid) {
+        IotWarnconfig iotWarnconfig = new IotWarnconfig();
+        iotWarnconfig.setWcBid(IdUtils.fastUUID());
+        iotWarnconfig.setWcName("离线告警");
+        iotWarnconfig.setWcDesc("离线告警");
+        iotWarnconfig.setWcStatus("0");
+        iotWarnconfig.setWcLevel("0");
+        iotWarnconfig.setWcTouchtype("1");
+        iotWarnconfig.setWcCreator("system");
+        iotWarnconfig.setWcCreateddate(DateUtils.dateTimeNow());
+        iotWarnconfig.setTid(tid);
+        return iotWarncountMapper.insertIotOfflineWarnconfig(iotWarnconfig);
+    }
 }
 }

+ 22 - 2
src/main/java/com/yunfeiyun/agmp/iots/warn/service/WarnService.java

@@ -84,7 +84,7 @@ public class WarnService {
     private void processWarningOfflineDataSyn(IotDevice iotDevice, JSONObject data) {
     private void processWarningOfflineDataSyn(IotDevice iotDevice, JSONObject data) {
         try {
         try {
             // 记录开始处理离线数据的日志
             // 记录开始处理离线数据的日志
-            log.info("[设备告警] 开始处理设备{}的离线数据{}", iotDevice.getDevBid(),data);
+            log.info("[设备告警] 开始处理设备{}的离线数据{}", iotDevice.getDevBid(), data);
             // 不是离线的不处理
             // 不是离线的不处理
             if (!IotDeviceStatusTypeEnum.OFFLINE.getCode().equals(iotDevice.getDevStatus())) {
             if (!IotDeviceStatusTypeEnum.OFFLINE.getCode().equals(iotDevice.getDevStatus())) {
                 log.info("[设备告警] 设备{}当前不是离线状态,跳过处理", iotDevice.getDevBid());
                 log.info("[设备告警] 设备{}当前不是离线状态,跳过处理", iotDevice.getDevBid());
@@ -112,7 +112,7 @@ public class WarnService {
                         warnResult.setTriggered(true);
                         warnResult.setTriggered(true);
                         warnResult.setMessage(WarnMessageBuilderUtil.buildWarningOfflineMessage(iotDevice.getDevtypeBid(), iotDevice.getDevCode(), iotDevice.getDevName(), iotDevice.getDevUpdateddate()));
                         warnResult.setMessage(WarnMessageBuilderUtil.buildWarningOfflineMessage(iotDevice.getDevtypeBid(), iotDevice.getDevCode(), iotDevice.getDevName(), iotDevice.getDevUpdateddate()));
                         // 处理警告记录前的日志
                         // 处理警告记录前的日志
-                        log.info("[设备告警] 正在为设备{}处理警告记录:{}", iotDevice.getDevBid(),warnResult);
+                        log.info("[设备告警] 正在为设备{}处理警告记录:{}", iotDevice.getDevBid(), warnResult);
                         handleWarnRecord(warnResult);
                         handleWarnRecord(warnResult);
                     }
                     }
                 } else {
                 } else {
@@ -211,6 +211,26 @@ public class WarnService {
         reCountService.handlerMessage(warnResult);
         reCountService.handlerMessage(warnResult);
     }
     }
 
 
+    /**
+     * 检查租户是否有默认的离线告警信息
+     */
+    public void checkTenantOfflineConfig() {
+        List<String> tids = iotWarnBussinessService.selectAllTid();
+        for (String tid : tids) {
+            log.info("【告警】检查租户 tid:{}离线配置 {}", tid);
+            try {
+                IotWarnconfig iotWarnconfig = iotWarnBussinessService.selectIotWarnOfflineConfigInfo(tid);
+                if (iotWarnconfig == null) {
+                    log.info("【告警】检查租户 tid:{}离线配置不存在,自动添加", tid);
+                    iotWarnBussinessService.insertIotOfflineWarnConfig(tid);
+                    log.info("【告警】检查租户 tid:{}离线配置不存在,自动添加完毕", tid);
+                }
+            } catch (Exception e) {
+                log.error("【告警】检查租户 tid:{}离线配置 {}", tid, e);
+            }
+        }
+    }
+
     private Map<String, IotDevicefactor> getDevicefactorMap(String devBid) {
     private Map<String, IotDevicefactor> getDevicefactorMap(String devBid) {
         IotDevicefactor param = new IotDevicefactor();
         IotDevicefactor param = new IotDevicefactor();
         param.setDevBid(devBid);
         param.setDevBid(devBid);

+ 39 - 1
src/main/resources/mapper/IotWarnBusinessMapper.xml

@@ -100,6 +100,44 @@
         select  * from IotWarncount
         select  * from IotWarncount
     </select>
     </select>
     <select id="selectIotWarnOfflineConfigInfo" resultType="com.yunfeiyun.agmp.iot.common.domain.IotWarnconfig">
     <select id="selectIotWarnOfflineConfigInfo" resultType="com.yunfeiyun.agmp.iot.common.domain.IotWarnconfig">
-        select * from IotWarnconfig where tid = #{tid};
+        select * from IotWarnconfig where tid = #{tid} and wcTouchtype='1';
     </select>
     </select>
+    <select id="selectAllTid" resultType="java.lang.String">
+        select tid from SysUser group by tid
+    </select>
+    <insert id="insertIotOfflineWarnconfig" parameterType="IotWarnconfig" useGeneratedKeys="true" keyProperty="id">
+        insert into IotWarnconfig
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="wcBid != null">wcBid,</if>
+            <if test="wcName != null">wcName,</if>
+            <if test="wcDesc != null">wcDesc,</if>
+            <if test="wcStatus != null">wcStatus,</if>
+            <if test="wcLevel != null">wcLevel,</if>
+            <if test="wcTouchtype != null">wcTouchtype,</if>
+            <if test="wcCondition != null">wcCondition,</if>
+            <if test="devtypeBid != null">devtypeBid,</if>
+            <if test="wcRepeatnum != null">wcRepeatnum,</if>
+            <if test="wcCreator != null">wcCreator,</if>
+            <if test="wcCreateddate != null">wcCreateddate,</if>
+            <if test="wcModifieddate != null">wcModifieddate,</if>
+            <if test="wcModifier != null">wcModifier,</if>
+            <if test="tid != null and tid != ''">tid,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="wcBid != null">#{wcBid},</if>
+            <if test="wcName != null">#{wcName},</if>
+            <if test="wcDesc != null">#{wcDesc},</if>
+            <if test="wcStatus != null">#{wcStatus},</if>
+            <if test="wcLevel != null">#{wcLevel},</if>
+            <if test="wcTouchtype != null">#{wcTouchtype},</if>
+            <if test="wcCondition != null">#{wcCondition},</if>
+            <if test="devtypeBid != null">#{devtypeBid},</if>
+            <if test="wcRepeatnum != null">#{wcRepeatnum},</if>
+            <if test="wcCreator != null">#{wcCreator},</if>
+            <if test="wcCreateddate != null">#{wcCreateddate},</if>
+            <if test="wcModifieddate != null">#{wcModifieddate},</if>
+            <if test="wcModifier != null">#{wcModifier},</if>
+            <if test="tid != null and tid != ''">#{tid},</if>
+        </trim>
+    </insert>
 </mapper>
 </mapper>