Browse Source

化验室的报警也增加升高趋势判断 水质的进出水都加上该判断

wangmiaomiao 8 months ago
parent
commit
cdc7661711
1 changed files with 100 additions and 2 deletions
  1. 100 2
      slibra-quartz/src/main/java/com/slibra/quartz/task/AsyncTask.java

+ 100 - 2
slibra-quartz/src/main/java/com/slibra/quartz/task/AsyncTask.java

@@ -1713,6 +1713,18 @@ public class AsyncTask {
         }else{//有告警信息
             Date nowDate = DateUtils.getNowDate();
             if(CollectionUtils.isEmpty(tXinyiWarningRecords)){//之前没有告警记录
+                //2024年7月18日16:23:11  新增逻辑,查询是否有连续升高的趋势,如果有才需要报警
+                List<TXinyiIndustry> tXinyiIndustries = this.xinyiIndustryMapper.selectNIndustry(INT_3);
+                if(CollectionUtils.isEmpty(tXinyiIndustries) || tXinyiIndustries.size() < 3){
+                    log.error("处理生化报警时,获取最近的3条工业库数据失败~~~~~~~");
+                    return;
+                }
+                TXinyiIndustry tXinyiIndustry1 = tXinyiIndustries.get(INDEX_1);//前一个小时
+                TXinyiIndustry tXinyiIndustry2 = tXinyiIndustries.get(INDEX_2);//前两个小时
+                if(!this.judgeContinuousIndustry(tXinyiIndustry1, tXinyiIndustry2, category)){
+                    log.info("虽然当前超标了,但是没有连续升高趋势,所以不报警,当前没有报警出来的数据为{}\n,前一个小时数据为{}\n前两个小时数据为{}", JSON.toJSONString(tXinyiWarningRecord), JSON.toJSONString(tXinyiIndustry1), JSON.toJSONString(tXinyiIndustry2));
+                    return;
+                }
                 //保存到数据库中
                 //2024年7月15日11:06:16 因为只有一个告警记录,但是如果一直报警,现在报警时间取的是更新时间,兼容第一次报警处理
                 tXinyiWarningRecord.setUpdateTime(nowDate);
@@ -1819,8 +1831,9 @@ public class AsyncTask {
                 }
                 TXinyiIndustry tXinyiIndustry1 = tXinyiIndustries.get(INDEX_1);//前一个小时
                 TXinyiIndustry tXinyiIndustry2 = tXinyiIndustries.get(INDEX_2);//前两个小时
-                if(!this.judgeContinuous(tXinyiIndustry1, tXinyiIndustry2, category)){
+                if(!this.judgeContinuousIndustry(tXinyiIndustry1, tXinyiIndustry2, category)){
                     log.info("虽然当前超标了,但是没有连续升高趋势,所以不报警,当前没有报警出来的数据为{}\n,前一个小时数据为{}\n前两个小时数据为{}", JSON.toJSONString(tXinyiWarningRecord), JSON.toJSONString(tXinyiIndustry1), JSON.toJSONString(tXinyiIndustry2));
+                    return;
                 }
                 //保存到数据库中
                 //2024年7月15日11:06:16 因为只有一个告警记录,但是如果一直报警,现在报警时间取的是更新时间,兼容第一次报警处理
@@ -1859,7 +1872,7 @@ public class AsyncTask {
         }
     }
 
-    private boolean judgeContinuous(TXinyiIndustry tXinyiIndustry1, TXinyiIndustry tXinyiIndustry2, String category) {
+    private boolean judgeContinuousIndustry(TXinyiIndustry tXinyiIndustry1, TXinyiIndustry tXinyiIndustry2, String category) {
         boolean result = false;//默认不超标
         if(BusinessEnum.WarningCategoryEnum.CS_COD.getCode().equals(category)){
             BigDecimal csCod1 = tXinyiIndustry1.getCsCod();
@@ -2106,6 +2119,18 @@ public class AsyncTask {
         }else{//有告警信息
             Date nowDate = DateUtils.getNowDate();
             if(CollectionUtils.isEmpty(tXinyiWarningRecords)){//之前没有告警记录
+                //2024年7月18日16:23:11  新增逻辑,查询是否有连续升高的趋势,如果有才需要报警
+                List<TXinyiRobot> tXinyiRobots = this.xinyiRobotMapper.selectNRobot(INT_3);
+                if(CollectionUtils.isEmpty(tXinyiRobots) || tXinyiRobots.size() < 3){
+                    log.error("处理连续检测报警时,获取最近的3条化验数据失败~~~~~~~");
+                    return;
+                }
+                TXinyiRobot tXinyiRobot1 = tXinyiRobots.get(INDEX_1);//前一个小时
+                TXinyiRobot tXinyiRobot2 = tXinyiRobots.get(INDEX_2);//前两个小时
+                if(!this.judgeContinuousRobot(tXinyiRobot1, tXinyiRobot2, category)){
+                    log.info("虽然当前超标了,但是没有连续升高趋势,所以不报警,当前没有报警出来的数据为{}\n,前一个小时数据为{}\n前两个小时数据为{}", JSON.toJSONString(tXinyiWarningRecord), JSON.toJSONString(tXinyiIndustry1), JSON.toJSONString(tXinyiIndustry2));
+                    return;
+                }
                 //保存到数据库中
                 //2024年7月15日11:06:16 因为只有一个告警记录,但是如果一直报警,现在报警时间取的是更新时间,兼容第一次报警处理
                 tXinyiWarningRecord.setUpdateTime(nowDate);
@@ -2144,6 +2169,79 @@ public class AsyncTask {
 
     }
 
+    private boolean judgeContinuousRobot(TXinyiRobot tXinyiRobot1, TXinyiRobot tXinyiRobot2, String category) {
+        boolean result = false;//默认不超标
+        if(BusinessEnum.WarningCategoryEnum.ROBOT_XSY_1.getCode().equals(category)){
+            BigDecimal no3Hlj1Jqr1 = tXinyiRobot1.getNo3Hlj1Jqr();
+            BigDecimal no3Hlj1Jqr2 = tXinyiRobot2.getNo3Hlj1Jqr();
+            if(!Objects.isNull(no3Hlj1Jqr1) && !Objects.isNull(no3Hlj1Jqr2) && no3Hlj1Jqr1.compareTo(no3Hlj1Jqr2) > INT_0)
+                result = true;
+        }else if(BusinessEnum.WarningCategoryEnum.ROBOT_XSY_2.getCode().equals(category)){
+            BigDecimal no3Hlj2Jqr1 = tXinyiRobot1.getNo3Hlj2Jqr();
+            BigDecimal no3Hlj2Jqr2 = tXinyiRobot2.getNo3Hlj2Jqr();
+            if(!Objects.isNull(no3Hlj2Jqr1) && !Objects.isNull(no3Hlj2Jqr2) && no3Hlj2Jqr1.compareTo(no3Hlj2Jqr2) > INT_0)
+                result = true;
+        }else if(BusinessEnum.WarningCategoryEnum.ROBOT_ECCZLSY.getCode().equals(category)){
+            BigDecimal tpRccJqr1 = tXinyiRobot1.getTpRccJqr();
+            BigDecimal tpRccJqr2 = tXinyiRobot2.getTpRccJqr();
+            if(!Objects.isNull(tpRccJqr1) && !Objects.isNull(tpRccJqr2) && tpRccJqr1.compareTo(tpRccJqr2) > INT_0)
+                result = true;
+        }else if(BusinessEnum.WarningCategoryEnum.ROBOT_ANDAN_1.getCode().equals(category)){
+            //计算1
+            BigDecimal no3Qyc1Jqr1 = tXinyiRobot1.getNo3Qyc1Jqr();
+            BigDecimal nh31Jqr1 = tXinyiRobot1.getNh31Jqr();
+            BigDecimal no3Hlj1Jqr1 = tXinyiRobot1.getNo3Hlj1Jqr();
+            if(Objects.isNull(no3Qyc1Jqr1))
+                no3Qyc1Jqr1 = BigDecimal.ZERO;
+            if(Objects.isNull(nh31Jqr1))
+                nh31Jqr1 = BigDecimal.ZERO;
+            if(Objects.isNull(no3Hlj1Jqr1))
+                no3Hlj1Jqr1 = BigDecimal.ZERO;
+            BigDecimal anDan1 = no3Qyc1Jqr1.add(nh31Jqr1).subtract(no3Hlj1Jqr1);
+            //计算2
+            BigDecimal no3Qyc1Jqr2 = tXinyiRobot2.getNo3Qyc1Jqr();
+            BigDecimal nh31Jqr2 = tXinyiRobot2.getNh31Jqr();
+            BigDecimal no3Hlj1Jqr2 = tXinyiRobot2.getNo3Hlj1Jqr();
+            if(Objects.isNull(no3Qyc1Jqr2))
+                no3Qyc1Jqr2 = BigDecimal.ZERO;
+            if(Objects.isNull(nh31Jqr2))
+                nh31Jqr2 = BigDecimal.ZERO;
+            if(Objects.isNull(no3Hlj1Jqr2))
+                no3Hlj1Jqr2 = BigDecimal.ZERO;
+            BigDecimal anDan2 = no3Qyc1Jqr2.add(nh31Jqr2).subtract(no3Hlj1Jqr2);
+            if(anDan1.compareTo(anDan2) > INT_0)
+                result = true;
+        }else if(BusinessEnum.WarningCategoryEnum.ROBOT_ANDAN_2.getCode().equals(category)){
+            //计算1
+            BigDecimal no3Qyc1Jqr1 = tXinyiRobot1.getNo3Qyc2Jqr();
+            BigDecimal nh31Jqr1 = tXinyiRobot1.getNh32Jqr();
+            BigDecimal no3Hlj1Jqr1 = tXinyiRobot1.getNo3Hlj2Jqr();
+            if(Objects.isNull(no3Qyc1Jqr1))
+                no3Qyc1Jqr1 = BigDecimal.ZERO;
+            if(Objects.isNull(nh31Jqr1))
+                nh31Jqr1 = BigDecimal.ZERO;
+            if(Objects.isNull(no3Hlj1Jqr1))
+                no3Hlj1Jqr1 = BigDecimal.ZERO;
+            BigDecimal anDan1 = no3Qyc1Jqr1.add(nh31Jqr1).subtract(no3Hlj1Jqr1);
+            //计算2
+            BigDecimal no3Qyc1Jqr2 = tXinyiRobot2.getNo3Qyc2Jqr();
+            BigDecimal nh31Jqr2 = tXinyiRobot2.getNh32Jqr();
+            BigDecimal no3Hlj1Jqr2 = tXinyiRobot2.getNo3Hlj2Jqr();
+            if(Objects.isNull(no3Qyc1Jqr2))
+                no3Qyc1Jqr2 = BigDecimal.ZERO;
+            if(Objects.isNull(nh31Jqr2))
+                nh31Jqr2 = BigDecimal.ZERO;
+            if(Objects.isNull(no3Hlj1Jqr2))
+                no3Hlj1Jqr2 = BigDecimal.ZERO;
+            BigDecimal anDan2 = no3Qyc1Jqr2.add(nh31Jqr2).subtract(no3Hlj1Jqr2);
+            if(anDan1.compareTo(anDan2) > INT_0)
+                result = true;
+        }else{
+            log.error("暂时还不支持的报警类型~~~~");
+        }
+        return result;
+    }
+
     /**
      *
      * 大宽表的数据处理