Ver código fonte

报警优先级处理 报警的时候,关闭其他类型的报警

王苗苗 1 mês atrás
pai
commit
efe332f318

+ 53 - 7
slibra-quartz/src/main/java/com/slibra/quartz/task/AsyncTask.java

@@ -116,11 +116,6 @@ public class AsyncTask {
                 log.error("将工业库的化验时间转换date类型异常");
                 throw new RuntimeException(e.getMessage());
             }
-            //2025年02月21日09:53:28  再额外增加一个逻辑:因为定时任务支持手动执行,需要先同步数据再报警,假如没有同步到数据就先执行了报警,也就是报警时间【工业库数据的最后一天时间】 > 当前时间
-            if(!tXinyiIndustry.getCreatedTime().before(nowDate)){
-                log.error("执行工业库报警失败,手动执行的时候,必须先要同步工业库数据才可以再执行报警任务");
-                throw new ServiceException("执行工业库报警失败,手动执行的时候,必须先要同步工业库数据才可以再执行报警任务");
-            }
             //查询工业库同步任务失败的报警正在进行的数据
             TXinyiWarningRecord warningRecord = TXinyiWarningRecord.builder().symbol(BusinessEnum.WarningSymbolEnum.INDUSTRY_SYNC_ERROR.getCode()).status(0).build();
             List<TXinyiWarningRecord> tXinyiWarningRecords = this.xinyiWarningRecordMapper.selectTXinyiWarningRecordList(warningRecord);
@@ -157,11 +152,48 @@ public class AsyncTask {
                 }else{
                     log.info("工业库报警的时候,发现同步工业库任务挂掉了,并且已经有该类型报警了,不做任何处理");
                 }
+                //将其他类型的报警全部关闭
+                closeOtherWarningsBySymbol(null);
             }
 
         }
     }
 
+    /**
+     * 将不是此报警类型的报警全部关闭
+     * @param symbol
+     */
+    private void closeOtherWarningsBySymbol(Integer symbol) {
+        List<TXinyiWarningRecord> tXinyiWarningRecords = this.xinyiWarningRecordMapper.getOtherWarningsBySymbol(symbol);
+        if(!CollectionUtils.isEmpty(tXinyiWarningRecords)){
+            for (TXinyiWarningRecord tXinyiWarningRecord : tXinyiWarningRecords) {
+                this.closeWarning(tXinyiWarningRecord);
+            }
+        }
+    }
+
+
+    /**
+     * 将此化验类型的其他的报警全部关闭
+     * @param category
+     */
+    private void closeOtherWarningsByCategory(String category, Integer symbol) {
+        List<TXinyiWarningRecord> tXinyiWarningRecords = this.xinyiWarningRecordMapper.getOtherWarningsByCategory(category, symbol);
+        if(!CollectionUtils.isEmpty(tXinyiWarningRecords)){
+            for (TXinyiWarningRecord tXinyiWarningRecord : tXinyiWarningRecords) {
+                this.closeWarning(tXinyiWarningRecord);
+            }
+        }
+    }
+
+    private void closeWarning(TXinyiWarningRecord tXinyiWarningRecord) {
+        Date nowDate = DateUtils.getNowDate();
+        tXinyiWarningRecord.setStatus(2);
+        tXinyiWarningRecord.setOffTime(nowDate);
+        tXinyiWarningRecord.setUpdateTime(nowDate);
+        tXinyiWarningRecord.setUpdateBy(WARNING_DEFAULT_CREATE);
+        this.xinyiWarningRecordMapper.updateTXinyiWarningRecord(tXinyiWarningRecord);
+    }
 
 
     public void addBigTable(TXinyiIndustry tXinyiIndustry, TXinyiCalculate xinyiCalculate) {
@@ -1549,7 +1581,7 @@ public class AsyncTask {
         Date nowDate = DateUtils.getNowDate();
         TXinyiWarningRecord warningRecord = TXinyiWarningRecord.builder().symbol(BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE.getCode()).status(0).build();
         List<TXinyiWarningRecord> tXinyiWarningRecords = this.xinyiWarningRecordMapper.selectTXinyiWarningRecordList(warningRecord);
-        if(breakpointCount <=1){//不需要连续不变报警 新增
+        if(breakpointCount <=1){//恢复正常 关闭多个断点报警
             if(!CollectionUtils.isEmpty(tXinyiWarningRecords)){
                 TXinyiWarningRecord warningRecordExists = tXinyiWarningRecords.get(0);
                 warningRecordExists.setStatus(2);
@@ -1559,6 +1591,9 @@ public class AsyncTask {
                 this.xinyiWarningRecordMapper.updateTXinyiWarningRecord(warningRecordExists);
             }
         }else{
+            //将其他类型的报警全部关闭
+            closeOtherWarningsBySymbol(BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE.getCode());
+            //再新增新的类型的报警
             if(CollectionUtils.isEmpty(tXinyiWarningRecords)){
                 //插入该类型报警
                 warningRecord.setType(0);
@@ -1580,7 +1615,7 @@ public class AsyncTask {
         //连续不变
         TXinyiWarningRecord warningRecordNoChangeMore = TXinyiWarningRecord.builder().symbol(BusinessEnum.WarningSymbolEnum.YBGZ_LX_MORE.getCode()).status(0).build();
         List<TXinyiWarningRecord> tXinyiWarningNoChangeMoreRecords = this.xinyiWarningRecordMapper.selectTXinyiWarningRecordList(warningRecordNoChangeMore);
-        if(noChange <=1){//不需要连续不变报警 新增
+        if(noChange <=1){//恢复正常,关闭多个连续不变报警
             if(!CollectionUtils.isEmpty(tXinyiWarningNoChangeMoreRecords)){
                 TXinyiWarningRecord warningRecordExists = tXinyiWarningNoChangeMoreRecords.get(0);
                 warningRecordExists.setStatus(2);
@@ -1590,6 +1625,9 @@ public class AsyncTask {
                 this.xinyiWarningRecordMapper.updateTXinyiWarningRecord(warningRecordExists);
             }
         }else{
+            //将其他类型的报警全部关闭
+            closeOtherWarningsBySymbol(BusinessEnum.WarningSymbolEnum.YBGZ_LX_MORE.getCode());
+            //触发 多个连续不变报警
             if(CollectionUtils.isEmpty(tXinyiWarningNoChangeMoreRecords)){
                 //插入该类型报警
                 warningRecordNoChangeMore.setType(0);
@@ -2262,6 +2300,8 @@ public class AsyncTask {
         //是否存在断点
         if(!Objects.isNull(tXinyiIndustry1)){
             if(existsBreakPoints(currentVal, category, tXinyiIndustry1)){
+                //关闭同类型的其他报警
+                closeOtherWarningsByCategory(category, BusinessEnum.WarningSymbolEnum.YBGZ_DD_SINGLE.getCode());
                 breakpoint = true;
                 //触发报警 并且模拟大模型返回决策问答数据
                 if(CollectionUtils.isEmpty(tXinyiWarningRecordsBK)){
@@ -2300,6 +2340,8 @@ public class AsyncTask {
         if(!CollectionUtils.isEmpty(tXinyiIndustries) && tXinyiIndustries.size() == INT_3){
             //2025年02月21日14:20:41 这里要改成当前值和上个小时比较  上个小时和上上个小时比较
             if(existsNoChange(currentVal, category, tXinyiIndustries)){
+                //关闭同类型的其他报警
+                closeOtherWarningsByCategory(category, BusinessEnum.WarningSymbolEnum.YBGZ_LX_SINGLE.getCode());
                 noChange = true;
                 //触发报警 并且模拟大模型返回决策问答数据
                 if(CollectionUtils.isEmpty(tXinyiNoChangeSingleWarningRecords)){
@@ -2339,6 +2381,8 @@ public class AsyncTask {
             //2025年02月21日14:33:37 这里要改成当前值和上个小时比较  上个小时和上上个小时比较
             BigDecimal exceedVal = existsYCSG(currentVal, category, tXinyiIndustries);
             if(!Objects.isNull(exceedVal)){//这里不能只返回一个布尔类型的结果,因为还要获取百分比的值
+                //关闭同类型的其他报警
+                closeOtherWarningsByCategory(category, BusinessEnum.WarningSymbolEnum.SJYC_YCSG.getCode());
                 noChange = true;
                 //触发报警 并且模拟大模型返回决策问答数据
                 if(CollectionUtils.isEmpty(tXinyiNoChangeYCSGRecords)){
@@ -2378,6 +2422,8 @@ public class AsyncTask {
             //2025年02月21日15:05:41 这里只需要比较当前值和标准值的差 以及上个小时的值和标准值的差 所以不用取最近3个小时的
             BigDecimal exceedVal = existsYCPD(currentVal, category, tXinyiIndustry1, csBzz);
             if(!Objects.isNull(exceedVal)){//这里不能只返回一个布尔类型的结果,因为还要获取百分比的值
+                //关闭同类型的其他报警
+                closeOtherWarningsByCategory(category, BusinessEnum.WarningSymbolEnum.SJYC_YCPD.getCode());
                 noChange = true;
                 //触发报警 并且模拟大模型返回决策问答数据
                 if(CollectionUtils.isEmpty(tXinyiNoChangeYCPDRecords)){

+ 10 - 0
slibra-system/src/main/java/com/slibra/business/mapper/TXinyiWarningRecordMapper.java

@@ -2,6 +2,7 @@ package com.slibra.business.mapper;
 
 import java.util.List;
 import com.slibra.business.domain.TXinyiWarningRecord;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * 信义告警记录Mapper接口
@@ -62,4 +63,13 @@ public interface TXinyiWarningRecordMapper
     int getWarningCountByType(int type);
 
     List<TXinyiWarningRecord> homeWarningList();
+
+    /**
+     * 通过报警类型 获取非工业同步失败和化验失败的 全部报警数据
+     * @param symbol
+     * @return
+     */
+    List<TXinyiWarningRecord> getOtherWarningsBySymbol(Integer symbol);
+
+    List<TXinyiWarningRecord> getOtherWarningsByCategory(@Param("category") String category, @Param("symbol") Integer symbol);
 }

+ 19 - 0
slibra-system/src/main/resources/mapper/business/TXinyiWarningRecordMapper.xml

@@ -219,4 +219,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         AND STATUS = 0
         ORDER BY id DESC LIMIT 10
     </select>
+
+    <select id="getOtherWarningsBySymbol" resultMap="TXinyiWarningRecordResult">
+        <include refid="selectTXinyiWarningRecordVo"/>
+        where del_flag = 0
+        AND type = 0
+        AND status = 0
+        AND symbol != 9
+        AND symbol != 10
+        <if test="symbol != null "> and symbol != #{symbol}</if>
+    </select>
+
+    <select id="getOtherWarningsByCategory" resultMap="TXinyiWarningRecordResult">
+        <include refid="selectTXinyiWarningRecordVo"/>
+        where del_flag = 0
+        AND type = 0
+        AND status = 0
+        AND category = #{category}
+        and symbol != #{symbol}
+    </select>
 </mapper>