Sfoglia il codice sorgente

告警:记录存储机制阶段提交

yf_zn 9 mesi fa
parent
commit
bf3db8b92f

+ 7 - 2
src/main/java/com/yunfeiyun/agmp/iots/warn/mapper/IotWarnBussinessMapper.java

@@ -2,6 +2,7 @@ package com.yunfeiyun.agmp.iots.warn.mapper;
 
 import com.yunfeiyun.agmp.iot.common.domain.IotWarncount;
 import com.yunfeiyun.agmp.iot.common.domain.IotWarnlog;
+import org.apache.ibatis.annotations.Param;
 
 public interface IotWarnBussinessMapper {
     /**
@@ -11,7 +12,7 @@ public interface IotWarnBussinessMapper {
      * @param configId
      * @return
      */
-    IotWarncount selectIotWarnCountByDevAndConfig(String devId, String configId);
+    IotWarncount selectIotWarnCountByDevAndConfig(@Param("devId") String devId, @Param("wcBid") String configId);
 
     /**
      * 增加重复次数
@@ -20,7 +21,7 @@ public interface IotWarnBussinessMapper {
      * @param configId
      * @return
      */
-    int incrementReCount(String devId, String configId);
+    int incrementReCount(@Param("devId") String devId, @Param("wcBid") String configId);
 
 
     /**
@@ -36,4 +37,8 @@ public interface IotWarnBussinessMapper {
      * @return
      */
     int insertWarnRecord(IotWarnlog iotWarnlog);
+
+    int updateIncrementReCount(@Param("devId") String devId, @Param("configId") String configId);
+
+    int insertIncrementReCount(IotWarncount iotWarncount);
 }

+ 10 - 2
src/main/java/com/yunfeiyun/agmp/iots/warn/model/WarnResult.java

@@ -1,5 +1,6 @@
 package com.yunfeiyun.agmp.iots.warn.model;
 
+import com.yunfeiyun.agmp.iot.common.domain.IotWarnconfig;
 import lombok.Data;
 
 /**
@@ -31,10 +32,17 @@ public class WarnResult {
      * 配置的重复次数阀值
      */
     private int targetReCount;
+
+    private String tid;
+    /**
+     * 设备型号id
+     */
+    private String devtypeBid;
+
     /**
-     * 配置对象,待定,尽量先不存对象,将必要的存储定义该类中
+     * 配置对象
      */
-    private Object config;
+    private IotWarnconfig config;
 
     public WarnResult(boolean isTriggered, String message) {
         this.isTriggered = isTriggered;

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

@@ -1,8 +1,11 @@
 package com.yunfeiyun.agmp.iots.warn.service;
 
+import com.yunfeiyun.agmp.common.utils.DateUtils;
+import com.yunfeiyun.agmp.common.utils.uuid.IdUtils;
 import com.yunfeiyun.agmp.iot.common.domain.IotWarncount;
 import com.yunfeiyun.agmp.iot.common.domain.IotWarnlog;
 import com.yunfeiyun.agmp.iots.warn.mapper.IotWarnBussinessMapper;
+import com.yunfeiyun.agmp.iots.warn.model.WarnResult;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -22,7 +25,7 @@ public class IotWarnBussinessService {
     public Long selectIotWarnCountByDevAndConfig(String devId, String configId) {
         IotWarncount iotWarncount = iotWarncountMapper.selectIotWarnCountByDevAndConfig(devId, configId);
         if (iotWarncount == null) {
-
+            return 0L;
         }
         return iotWarncount.getWctCount();
     }
@@ -30,12 +33,29 @@ public class IotWarnBussinessService {
     /**
      * 增加重复次数
      *
+     * @param reCount  null 代表需要添加,有值代表需要更新
      * @param devId
      * @param configId
      * @return
      */
-    int incrementReCount(String devId, String configId) {
-        return iotWarncountMapper.incrementReCount(devId, configId);
+    int incrementReCount(Long reCount, String devId, String configId, String tid) {
+        if (reCount == null) {
+            return iotWarncountMapper.updateIncrementReCount(devId, configId);
+        } else {
+            //从新添加,就是从0变为1
+            IotWarncount iotWarncount = new IotWarncount();
+            iotWarncount.setWctBid(IdUtils.fastUUID());
+            iotWarncount.setDevBid(devId);
+            iotWarncount.setWcBid(configId);
+            iotWarncount.setLastUpdateTime(DateUtils.dateTimeNow());
+            iotWarncount.setWctCount(1L);
+            iotWarncount.setTid(tid);
+            return iotWarncountMapper.insertIncrementReCount(iotWarncount);
+        }
+    }
+
+    int incrementReCount(Long reCount, WarnResult warnResult) {
+        return incrementReCount(reCount, warnResult.getDevId(), warnResult.getConfigId(), warnResult.getTid());
     }
 
     /**

+ 39 - 14
src/main/java/com/yunfeiyun/agmp/iots/warn/service/ReCountService.java

@@ -1,5 +1,9 @@
 package com.yunfeiyun.agmp.iots.warn.service;
 
+import com.yunfeiyun.agmp.common.utils.DateUtils;
+import com.yunfeiyun.agmp.common.utils.uuid.IdUtils;
+import com.yunfeiyun.agmp.iot.common.domain.IotWarnconfig;
+import com.yunfeiyun.agmp.iot.common.domain.IotWarnlog;
 import com.yunfeiyun.agmp.iots.warn.model.WarnResult;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -18,25 +22,29 @@ public class ReCountService {
      * @param warnResult
      */
     public void handlerMessage(WarnResult warnResult) {
+        // 注意必要字段必须传过来
         // 触发了预警,进行校验处理
         if (warnResult.isTriggered()) {
             // 当前的获取重复次数
             Long reCount = iotWarnBussinessService.selectIotWarnCountByDevAndConfig(warnResult.getDevId(), warnResult.getConfigId());
-            // 加 1
             // 设定的重复次数阀值
             int targetReCount = warnResult.getTargetReCount();
-            //达到阀值,进入产生预警记录
-            if (reCount + 1 > targetReCount) {
-                // 超多阀值,直接存储
-            } else if (reCount + 1 == targetReCount) {
-                // 达到阀值,直接存储,并增加数值
-                iotWarnBussinessService.incrementReCount(warnResult.getDevId(), warnResult.getConfigId());
+            // 当前重复的次数
+            int thisReCount = reCount == null ? 0 : reCount.intValue();
+            // 达到阀值,进入产生预警记录
+            if (thisReCount + 1 > targetReCount) {
+                // 已经达到阀值,直接存储,次数也不用增加了
+                iotWarnBussinessService.insertWarnRecord(buildWarnMessage(warnResult));
+            } else if (thisReCount + 1 == targetReCount) {
+                // 初次达到阀值,并增加数值
+                iotWarnBussinessService.incrementReCount(reCount, warnResult);
+                // 存储预警
+                iotWarnBussinessService.insertWarnRecord(buildWarnMessage(warnResult));
             } else {
-                //没法达到阀值
-                iotWarnBussinessService.incrementReCount(warnResult.getDevId(), warnResult.getConfigId());
+                //没达到阀值,只增加数值
+                iotWarnBussinessService.incrementReCount(reCount, warnResult);
             }
 
-
         } else {
             //没有触发,则清除之前的
             cleanReCount(warnResult.getDevId(), warnResult.getConfigId());
@@ -44,9 +52,26 @@ public class ReCountService {
 
     }
 
-
-    public void incrementReCount(WarnResult warnResult) {
-
+    /**
+     * 构建告警信息
+     *
+     * @param warnResult
+     * @return
+     */
+    IotWarnlog buildWarnMessage(WarnResult warnResult) {
+        IotWarnconfig config = warnResult.getConfig();
+        IotWarnlog iotWarnlog = new IotWarnlog();
+        iotWarnlog.setWlBid(IdUtils.fastUUID());
+        iotWarnlog.setWlName(config.getWcName());
+        iotWarnlog.setWlLevel(config.getWcLevel());
+        iotWarnlog.setWlContent(warnResult.getMessage());
+        iotWarnlog.setDevtypeBid(warnResult.getDevtypeBid());
+        iotWarnlog.setDevBid(warnResult.getDevId());
+        iotWarnlog.setStatus("0");
+        iotWarnlog.setWlCreateddate(DateUtils.dateTimeNow());
+        iotWarnlog.setWlData(warnResult.getReportData());
+        iotWarnlog.setTid(config.getTid());
+        return iotWarnlog;
     }
 
     /**
@@ -67,6 +92,6 @@ public class ReCountService {
      * 清空重复次数
      */
     public void resetAllReCount() {
-
+        iotWarnBussinessService.resetReCount();
     }
 }

+ 59 - 6
src/main/resources/mapper/IotWarnBusinessMapper.xml

@@ -4,20 +4,73 @@
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.yunfeiyun.agmp.iots.warn.mapper.IotWarnBussinessMapper">
 
-    <insert id="insertWarnRecord">
-
+    <insert id="insertWarnRecord" parameterType="IotWarnlog" useGeneratedKeys="true" keyProperty="id">
+        insert into IotWarnlog
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="wlBid != null">wlBid,</if>
+            <if test="wlName != null">wlName,</if>
+            <if test="wlType != null">wlType,</if>
+            <if test="wlContent != null">wlContent,</if>
+            <if test="wlLevel != null">wlLevel,</if>
+            <if test="devtypeBid != null">devtypeBid,</if>
+            <if test="devBid != null">devBid,</if>
+            <if test="status != null">status,</if>
+            <if test="wlDealuserid != null">wlDealuserid,</if>
+            <if test="wlDealresult != null">wlDealresult,</if>
+            <if test="wlDealtime != null">wlDealtime,</if>
+            <if test="wlCreateddate != null">wlCreateddate,</if>
+            <if test="wlData != null">wlData,</if>
+            <if test="tid != null and tid != ''">tid,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="wlBid != null">#{wlBid},</if>
+            <if test="wlName != null">#{wlName},</if>
+            <if test="wlType != null">#{wlType},</if>
+            <if test="wlContent != null">#{wlContent},</if>
+            <if test="wlLevel != null">#{wlLevel},</if>
+            <if test="devtypeBid != null">#{devtypeBid},</if>
+            <if test="devBid != null">#{devBid},</if>
+            <if test="status != null">#{status},</if>
+            <if test="wlDealuserid != null">#{wlDealuserid},</if>
+            <if test="wlDealresult != null">#{wlDealresult},</if>
+            <if test="wlDealtime != null">#{wlDealtime},</if>
+            <if test="wlCreateddate != null">#{wlCreateddate},</if>
+            <if test="wlData != null">#{wlData},</if>
+            <if test="tid != null and tid != ''">#{tid},</if>
+        </trim>
+    </insert>
+    <insert id="insertIncrementReCount" parameterType="IotWarncount" useGeneratedKeys="true" keyProperty="id">
+        insert into IotWarncount
+        <trim prefix="(" suffix=")" suffixOverrides=",">
+            <if test="wctBid != null">wctBid,</if>
+            <if test="wcBid != null">wcBid,</if>
+            <if test="devBid != null">devBid,</if>
+            <if test="wctCount != null">wctCount,</if>
+            <if test="lastUpdateTime != null">lastUpdateTime,</if>
+            <if test="tid != null and tid != ''">tid,</if>
+        </trim>
+        <trim prefix="values (" suffix=")" suffixOverrides=",">
+            <if test="wctBid != null">#{wctBid},</if>
+            <if test="wcBid != null">#{wcBid},</if>
+            <if test="devBid != null">#{devBid},</if>
+            <if test="wctCount != null">#{wctCount},</if>
+            <if test="lastUpdateTime != null">#{lastUpdateTime},</if>
+            <if test="tid != null and tid != ''">#{tid},</if>
+        </trim>
     </insert>
     <update id="incrementReCount">
-
+             update IotWarncount set wctCount=wctCount+1 where devBid=#{devBid} and wcBid=#{wcBid};
     </update>
 
     <update id="resetReCount">
-
+        update IotWarncount set wctCount=0;
+    </update>
+    <update id="updateIncrementReCount">
+             update IotWarncount set wctCount=wctCount+1 where devBid=#{devBid} and wcBid=#{wcBid};
     </update>
-
 
     <select id="selectIotWarnCountByDevAndConfig"
             resultType="com.yunfeiyun.agmp.iot.common.domain.IotWarncount">
-
+        select  * from IotWarncount where devBid=#{devBid} and wcBid=#{wcBid};
     </select>
 </mapper>