Bladeren bron

告警系统增加

liwei19941102 2 jaren geleden
bovenliggende
commit
764125343c

+ 5 - 0
ruoyi-system/src/main/java/com/ruoyi/data/mapper/TblBreakdownMapper.java

@@ -1,9 +1,12 @@
 package com.ruoyi.data.mapper;
 
 import com.ruoyi.data.domain.TblBreakdown;
+import com.ruoyi.data.domain.TblWarn;
 import com.ruoyi.data.domain.vo.TblBreakdownVo;
 import com.ruoyi.common.core.mapper.BaseMapperPlus;
 
+import java.util.List;
+
 /**
  * 故障管理Mapper接口
  *
@@ -12,4 +15,6 @@ import com.ruoyi.common.core.mapper.BaseMapperPlus;
  */
 public interface TblBreakdownMapper extends BaseMapperPlus<TblBreakdownMapper, TblBreakdown, TblBreakdownVo> {
 
+    public List<TblBreakdown> getBreakdownList(TblBreakdown tblBreakdown);
+
 }

+ 4 - 0
ruoyi-system/src/main/java/com/ruoyi/data/mapper/TblWarnMapper.java

@@ -4,6 +4,8 @@ import com.ruoyi.data.domain.TblWarn;
 import com.ruoyi.data.domain.vo.TblWarnVo;
 import com.ruoyi.common.core.mapper.BaseMapperPlus;
 
+import java.util.List;
+
 /**
  * 告警管理Mapper接口
  *
@@ -12,4 +14,6 @@ import com.ruoyi.common.core.mapper.BaseMapperPlus;
  */
 public interface TblWarnMapper extends BaseMapperPlus<TblWarnMapper, TblWarn, TblWarnVo> {
 
+    public List<TblWarn> getWarnDeviceList(TblWarn tblWarn);
+
 }

+ 63 - 4
ruoyi-system/src/main/java/com/ruoyi/data/service/impl/MqttServiceImpl.java

@@ -2,6 +2,7 @@ package com.ruoyi.data.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSON;
 import cn.hutool.json.JSONArray;
 import cn.hutool.core.lang.UUID;
 import cn.hutool.json.JSONObject;
@@ -67,6 +68,10 @@ public class MqttServiceImpl implements MqttService {
 
     private final ITblRuleExecuteService iTblRuleExecuteService;
 
+    private final TblWarnMapper tblWarnMapper;
+
+    private final TblBreakdownMapper tblBreakdownMapper;
+
     @Value("${mqtt.url}")
     private String mqttUrl;
 
@@ -300,9 +305,36 @@ public class MqttServiceImpl implements MqttService {
                       warn.setVal(bo.getValue());
                       warn.setEquipmentId(tblEquipment.getId());
                       warn.setEquipmentName(tblEquipment.getName());
-                      warn.setContent("设备"+tblEquipment.getName()+"传感器"+tblSensor.getName()+"数据异常,请注意");
+                      warn.setContent("设备"+tblEquipment.getName()+"传感器"+tblSensor.getName()+vo.getRemark());
                       warn.setAlarmTime(new Date());
-                      iTblWarnService.insertByBo(warn);
+                      if(StringUtils.isNotBlank(vo.getExpr1()) && vo.getExpr1() != null){
+                          JSONObject  jsonObject =  new JSONObject(vo.getExpr1());
+                          if(StringUtils.isNotBlank(jsonObject.getStr("postpone")) && jsonObject.getStr("postpone") != null){
+                              Long postpone = Long.valueOf(jsonObject.getStr("postpone"));
+                              try{
+                                  Thread.sleep(postpone);
+                              }catch (Exception e){
+                                  e.printStackTrace();
+                              }
+                          }
+                          if(jsonObject.getStr("frequency") != null && jsonObject.getStr("interval") != null && jsonObject.getStr("invalidation") != null){
+                              TblWarn tblWarn = new TblWarn();
+                              tblWarn.setEquipmentId(tblEquipment.getId());
+                              tblWarn.setStatus(jsonObject.getStr("interval"));
+                              List<TblWarn> warnList = tblWarnMapper.getWarnDeviceList(tblWarn);
+                              Integer frequency = Integer.valueOf(jsonObject.getStr("frequency"));
+                              Integer interval = Integer.valueOf(jsonObject.getStr("interval"));
+                              Integer invalidation = Integer.valueOf(jsonObject.getStr("invalidation"));
+                              Integer time = frequency*interval + invalidation + 100;
+                              tblWarn.setStatus(String.valueOf(time));
+                              List<TblWarn> totalWarnList = tblWarnMapper.getWarnDeviceList(tblWarn);
+                              if(warnList.size() == 0 && totalWarnList.size() < frequency){
+                                      iTblWarnService.insertByBo(warn);
+                              }
+                          }
+                      }else{
+                          iTblWarnService.insertByBo(warn);
+                      }
                 } else if (vo.getExecuteAction().equals("breakbown")) {
                     TblBreakdownBo tblBreakdownBo = new TblBreakdownBo();
                     TblEquipmentSbookVo tblEquipment = equipmentSbookService.queryById(tblSensor.getDeviceId());
@@ -310,9 +342,36 @@ public class MqttServiceImpl implements MqttService {
                     tblBreakdownBo.setVal(bo.getValue());
                     tblBreakdownBo.setEquipmentId(tblEquipment.getId());
                     tblBreakdownBo.setEquipmentName(tblEquipment.getName());
-                    tblBreakdownBo.setContent("设备"+tblEquipment.getName()+"传感器"+tblSensor.getName()+"故障,请注意");
+                    tblBreakdownBo.setContent("设备"+tblEquipment.getName()+"传感器"+tblSensor.getName()+vo.getRemark());
                     tblBreakdownBo.setFaultTime(new Date());
-                    iTblBreakdownService.insertByBo(tblBreakdownBo);
+                    if(StringUtils.isNotBlank(vo.getExpr1()) && vo.getExpr1() != null){
+                        JSONObject  jsonObject =  new JSONObject(vo.getExpr1());
+                        if(StringUtils.isNotBlank(jsonObject.getStr("postpone")) && jsonObject.getStr("postpone") != null){
+                            Long postpone = Long.valueOf(jsonObject.getStr("postpone"));
+                            try{
+                                Thread.sleep(postpone);
+                            }catch (Exception e){
+                                e.printStackTrace();
+                            }
+                        }
+                        if(jsonObject.getStr("frequency") != null && jsonObject.getStr("interval") != null && jsonObject.getStr("invalidation") != null){
+                            TblBreakdown tblBreakdown = new TblBreakdown();
+                            tblBreakdown.setEquipmentId(tblEquipment.getId());
+                            tblBreakdown.setStatus(jsonObject.getStr("interval"));
+                            List<TblBreakdown> breakList = tblBreakdownMapper.getBreakdownList(tblBreakdown);
+                            Integer frequency = Integer.valueOf(jsonObject.getStr("frequency"));
+                            Integer interval = Integer.valueOf(jsonObject.getStr("interval"));
+                            Integer invalidation = Integer.valueOf(jsonObject.getStr("invalidation"));
+                            Integer time = frequency*interval + invalidation + 100;
+                            tblBreakdown.setStatus(String.valueOf(time));
+                            List<TblBreakdown> totalbreakList = tblBreakdownMapper.getBreakdownList(tblBreakdown);
+                            if(breakList.size() == 0 && totalbreakList.size() < frequency){
+                                iTblBreakdownService.insertByBo(tblBreakdownBo);
+                            }
+                        }
+                    }else{
+                        iTblBreakdownService.insertByBo(tblBreakdownBo);
+                    }
                 }
             }
     }

+ 12 - 0
ruoyi-system/src/main/resources/mapper/data/TblBreakdownMapper.xml

@@ -24,5 +24,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="updateTime" column="update_time"/>
     </resultMap>
 
+    <select id="getBreakdownList" parameterType="TblBreakdown" resultMap="TblBreakdownResult">
+        SELECT
+           *
+        FROM
+        tbl_breakdown
+        <where>
+            --               间隔时间
+            AND TIMESTAMPDIFF(SECOND,fault_time,NOW()) &lt; #{status} + 0
+            AND equipment_id = #{equipmentId}
+        </where>
+    </select>
+
 
 </mapper>

+ 12 - 0
ruoyi-system/src/main/resources/mapper/data/TblWarnMapper.xml

@@ -24,5 +24,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="updateTime" column="update_time"/>
     </resultMap>
 
+    <select id="getWarnDeviceList" parameterType="TblWarn" resultMap="TblWarnResult">
+        SELECT
+            *
+        FROM
+            tbl_warn
+        <where>
+--               间隔时间
+              AND TIMESTAMPDIFF(SECOND,alarm_time,NOW()) &lt; #{status} + 0
+              AND equipment_id = #{equipmentId}
+        </where>
+    </select>
+
 
 </mapper>

+ 55 - 12
ruoyi-ui-vue3/src/views/rules/add.vue

@@ -237,8 +237,20 @@
         <el-form-item label="执行动作" label-width="140px">
           <el-input v-model="ruleExecuteParam.executeAction" placeholder="请输入执行动作" />
         </el-form-item>
-        <el-form-item label="备注" label-width="140px">
-          <el-input v-model="ruleExecuteParam.remark" placeholder="请输入备注" />
+        <el-form-item label="告警模板" label-width="140px">
+          <el-input v-model="ruleExecuteParam.remark" placeholder="请输入告警模板" />
+        </el-form-item>
+        <el-form-item label="告警处理默认时效" label-width="140px">
+          <el-input v-model="ruleExt.invalidation" placeholder="请输入告警处理默认时效" />
+        </el-form-item>
+        <el-form-item label="告警重复推送频次" label-width="140px">
+          <el-input v-model="ruleExt.frequency" placeholder="请输入告警重复推送频次" />
+        </el-form-item>
+        <el-form-item label="告警重复推送间隔" label-width="140px">
+          <el-input v-model="ruleExt.interval" placeholder="请输入告警重复推送间隔" />
+        </el-form-item>
+        <el-form-item label="告警延时默认间隔" label-width="140px">
+          <el-input v-model="ruleExt.postpone" placeholder="请输入告警延时默认间隔" />
         </el-form-item>
       </el-form>
       <template #footer>
@@ -288,6 +300,13 @@ const ruleFilterParam = ref({
   formula: ''
 })
 
+const ruleExt = ref({
+  interval: null,
+  postpone: null,
+  frequency: null,
+  invalidation: null
+})
+
 const ruleExecuteParam = ref({
   id: null,
   ruleId: null,
@@ -295,7 +314,8 @@ const ruleExecuteParam = ref({
   name: '',
   equipmentId: "",
   executeAction: "",
-  remark: ''
+  remark: '',
+  expr1: ''
 })
 
 const filterObj = ref({ id: null, name: "" })
@@ -312,12 +332,9 @@ const ruleParam = ref({
   description: "",
   remark: ""
 })
-const getEquipmentSbookList = () => {
+const getEquipmentSbookList = async () => {
   listEquipmentSbook({ pageSize: 10000 }).then(res => {
     deviceList.value = res.rows
-    if (objId != null) {
-      getDetail();
-    }
   })
 }
 
@@ -331,7 +348,6 @@ const getDeviceName = (item) => {
 }
 
 const selectEquipment = (value) => {
-  console.log(value);
   var obj = {
     deviceId: value,
     pageSize: 10000
@@ -390,6 +406,7 @@ const saveRuleFilter = () => {
 }
 
 const saveRuleExecute = () => {
+  ruleExecuteParam.value.expr1 = JSON.stringify(ruleExt.value);
   if (ruleExecuteParam.value.id != null) {
     ruleExecuteParam.value.ruleId = objId;
     ruleExecuteParam.value.filterId = filterObj.value.id
@@ -415,6 +432,16 @@ const goupdateExecute = (item) => {
   dialogExTitle.value = "修改执行动作"
   getRuleExecute(item.id).then(res => {
     ruleExecuteParam.value = res.data
+    if (res.data.expr1 != null) {
+      ruleExt.value = JSON.parse(res.data.expr1);
+    } else {
+      ruleExt.value = {
+        interval: null,
+        postpone: null,
+        frequency: null,
+        invalidation: null
+      }
+    }
     dialogFormExVisible.value = true;
   })
 }
@@ -477,7 +504,14 @@ const goAddRuleEXecute = () => {
     name: '',
     equipmentId: "",
     execute_action: "",
-    remark: ''
+    remark: '',
+    expr1: ''
+  }
+  ruleExt.value = {
+    interval: null,
+    postpone: null,
+    frequency: null,
+    invalidation: null
   }
   if (filterObj.value.id != null) {
     dialogFormExVisible.value = true
@@ -500,11 +534,20 @@ const getRuleExecuteList = () => {
   })
 }
 
-getEquipmentSbookList();
-if (objId != null) {
-  getFilterList();
+const initData = async () =>{
+  await getEquipmentSbookList();
+  if (objId != null) {
+       await getDetail();
+       await getFilterList();
+    }
 }
 
+// getEquipmentSbookList();
+// if (objId != null) {
+//   getFilterList();
+// }
+initData();
+
 </script>
 
 <style lang="scss" scoped>