Browse Source

预测预警 化验室报警逻辑调整

wangmiaomiao 10 tháng trước cách đây
mục cha
commit
3c6461e7ed

+ 4 - 1
slibra-common/src/main/java/com/slibra/common/constant/MyConstants.java

@@ -31,7 +31,9 @@ public class MyConstants {
     public static final String NUMBER_2 = "2";
     public static final Double DOUBLE_75 = 75D;
     public static final int NUMBER_SCALE_4 = 4;
-    public static final BigDecimal ROBOT_HY_DIVIDE = new BigDecimal("0.8");
+//    public static final BigDecimal ROBOT_HY_DIVIDE = new BigDecimal("0.8");
+    //2024年7月11日17:10:19  改成不除了,所以这里改成1
+    public static final BigDecimal ROBOT_HY_DIVIDE = new BigDecimal(1);
     public static final BigDecimal BigDecimal_100  = new BigDecimal(100);
     public static final BigDecimal GSLSONE_LAST = BigDecimal.valueOf(0.02 * 1.3 * 40 * 2);
     public static final BigDecimal GSLSTWO_LAST = BigDecimal.valueOf(0.016 * 1.1 * 41 * 2);
@@ -72,6 +74,7 @@ public class MyConstants {
     public static final String WARNING_DEFAULT_QUESTION= "在线仪表数据异常";
     public static final String WARNING_DEFAULT_CREATE = "task-job";
     public static final String DEFAULT_ID_IDENTIFIER = "@@id@@";
+    public static final String ZLSY = "zlsy";//正磷酸盐
     public static final int MAX_COUNT = 30;
     public static final int INT_2 = 2;
     public static final int INT_10000 = 10000;//10秒钟

+ 11 - 6
slibra-common/src/main/java/com/slibra/common/enums/BusinessEnum.java

@@ -21,6 +21,11 @@ public class BusinessEnum {
         JS_ZL("进水总磷", "进水总磷"),
         JS_AD("进水氨氮", "进水氨氮"),
 
+        //----2024年7月11日17:25:11  新增的 化验室报警类型----
+        ROBOT_XSY_1("#1好氧硝酸盐", "#1好氧硝酸盐"),
+        ROBOT_XSY_2("#2好氧硝酸盐", "#2好氧硝酸盐"),
+        ROBOT_ECCZLSY("二沉池正磷酸盐", "二沉池正磷酸盐"),
+
         //生化报警
         NHLB("内回流比", "内回流比"),
         WHLB("外回流比", "外回流比"),
@@ -34,13 +39,13 @@ public class BusinessEnum {
         HYQDO_ONE("好氧区DO#1", "好氧区DO#1"),
         HYQDO_TWO("好氧区DO#2", "好氧区DO#2"),
         QSB("气水比", "气水比"),
-        CS_COD_YC("出水COD", "出水COD"),
-        CS_SS_YC("出水SS", "出水SS"),
+        CS_COD_YC("cod", "cod"),
+        CS_SS_YC("ss", "ss"),
         CS_TN_YC("出水总氮", "出水总氮"),
-        CS_TP_YC("出水总磷", "出水总磷 "),
-        CS_AD_YC("出水氨氮", "出水氨氮"),
-        CS_XSY_1_YC("硝酸盐#1", "硝酸盐#1"),
-        CS_XSY_2_YC("硝酸盐#2", "硝酸盐#2"),
+        CS_TP_YC("二沉池正磷酸盐", "二沉池正磷酸盐 "),
+        CS_AD_YC("氨氮", "氨氮"),
+        CS_XSY_1_YC("#1好氧硝酸盐", "#1好氧硝酸盐"),
+        CS_XSY_2_YC("#2好氧硝酸盐", "#2好氧硝酸盐"),
         WNND_MLSS_1("污泥浓度MLSS#1", "污泥浓度MLSS#1"),
         WNND_MLSS_2("污泥浓度MLSS#2", "污泥浓度MLSS#2"),
         HFXWNNDZB("挥发性污泥浓度占比(MLVSS/MLSS)", "挥发性污泥浓度占比(MLVSS/MLSS)"),

+ 32 - 6
slibra-quartz/src/main/java/com/slibra/quartz/task/AsyncTask.java

@@ -457,7 +457,7 @@ public class AsyncTask {
 //            csTp = tpRccJqr;
         }
         if(!Objects.isNull(no3Hlj1Jqr) && !Objects.isNull(no3Hlj2Jqr))
-            csTn = (no3Hlj1Jqr.add(no3Hlj2Jqr)).divide(new BigDecimal(2), NUMBER_SCALE_4, RoundingMode.HALF_UP).divide(ROBOT_HY_DIVIDE, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+            csTn = (no3Hlj1Jqr.add(no3Hlj2Jqr)).divide(DECIMAL_2, NUMBER_SCALE_4, RoundingMode.HALF_UP).divide(ROBOT_HY_DIVIDE, NUMBER_SCALE_4, RoundingMode.HALF_UP);
 
         //时间段1
         List<TXinyiForecastComparison> tXinyiForecastComparisons1 = this.xinyiForecastComparisonMapper.selectTXinyiForecastComparisonList(TXinyiForecastComparison.builder().forecastTimeOne(testHour).build());
@@ -501,7 +501,9 @@ public class AsyncTask {
                 }
 
                 //2024年6月20日11:14:42  总磷的真实值也从化验室获取
-                if("tp".equals(tXinyiForecastComparison.getCategory())){
+                //2024年7月11日17:08:51 tp改名字了。。。
+                if("tp".equalsIgnoreCase(tXinyiForecastComparison.getCategory())
+                    || ZLSY.equalsIgnoreCase(tXinyiForecastComparison.getCategory())){
                     tXinyiForecastComparison.setRealOne(csTp);
                     if(!Objects.isNull(csTp) && csTp.compareTo(BigDecimal.ZERO) > 0){
                         if(!Objects.isNull(hsForecastOne)){
@@ -561,7 +563,9 @@ public class AsyncTask {
                 }
 
                 //2024年6月20日11:14:42  总磷的真实值也从化验室获取
-                if("tp".equals(tXinyiForecastComparison.getCategory())){
+                //2024年7月11日17:08:51 tp改名字了。。。
+                if("tp".equalsIgnoreCase(tXinyiForecastComparison.getCategory())
+                        || ZLSY.equalsIgnoreCase(tXinyiForecastComparison.getCategory())){
                     tXinyiForecastComparison.setRealTwo(csTp);
                     if(!Objects.isNull(csTp) && csTp.compareTo(BigDecimal.ZERO) > 0){
                         if(!Objects.isNull(hsForecastTwo)){
@@ -621,7 +625,9 @@ public class AsyncTask {
                 }
 
                 //2024年6月20日11:14:42  总磷的真实值也从化验室获取
-                if("tp".equals(tXinyiForecastComparison.getCategory())){
+                //2024年7月11日17:08:51 tp改名字了。。。
+                if("tp".equalsIgnoreCase(tXinyiForecastComparison.getCategory())
+                        || ZLSY.equalsIgnoreCase(tXinyiForecastComparison.getCategory())){
                     tXinyiForecastComparison.setRealThree(csTp);
                     if(!Objects.isNull(csTp) && csTp.compareTo(BigDecimal.ZERO) > 0){
                         if(!Objects.isNull(hsForecastThree)){
@@ -1779,9 +1785,10 @@ public class AsyncTask {
 
         //处理数据
         for (TXinyiRobot tXinyiRobot : uniqueList) {
+            //2024年7月11日17:27:32 化验室报警项原有总氮和总氮改为 1#好氧硝酸盐、2#好氧硝酸盐、二沉池正磷酸盐
             //处理总氮和总磷报警
             //总氮
-            BigDecimal no3Hlj1Jqr = tXinyiRobot.getNo3Hlj1Jqr();
+            /*BigDecimal no3Hlj1Jqr = tXinyiRobot.getNo3Hlj1Jqr();
             BigDecimal no3Hlj2Jqr = tXinyiRobot.getNo3Hlj2Jqr();
             if(!Objects.isNull(no3Hlj1Jqr) && !Objects.isNull(no3Hlj2Jqr)){
                 BigDecimal csTn = (no3Hlj1Jqr.add(no3Hlj2Jqr)).divide((new BigDecimal("2").multiply(ROBOT_HY_DIVIDE)), NUMBER_SCALE_4, RoundingMode.HALF_UP);
@@ -1790,6 +1797,25 @@ public class AsyncTask {
                 if(!Objects.isNull(cszzBzz)){
                     handleXinYiWarningsRobot(cszzBzz, csTn, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_ZD.getCode(), tXinyiIndustry, normConfig);
                 }
+            }*/
+            //#1好氧硝酸盐
+            BigDecimal no3Hlj1Jqr = tXinyiRobot.getNo3Hlj1Jqr();
+            if(!Objects.isNull(no3Hlj1Jqr)){
+                BigDecimal cszzBzz = normConfig.getCszzBzz();
+                BigDecimal cszzGkz = normConfig.getCszzGkz();
+                if(!Objects.isNull(cszzBzz)){
+                    handleXinYiWarningsRobot(cszzBzz, no3Hlj1Jqr, cszzGkz, BusinessEnum.WarningCategoryEnum.ROBOT_XSY_1.getCode(), tXinyiIndustry, normConfig);
+                }
+            }
+
+            //#2好氧硝酸盐
+            BigDecimal no3Hlj2Jqr = tXinyiRobot.getNo3Hlj2Jqr();
+            if(!Objects.isNull(no3Hlj2Jqr)){
+                BigDecimal cszzBzz = normConfig.getCszzBzz();
+                BigDecimal cszzGkz = normConfig.getCszzGkz();
+                if(!Objects.isNull(cszzBzz)){
+                    handleXinYiWarningsRobot(cszzBzz, no3Hlj2Jqr, cszzGkz, BusinessEnum.WarningCategoryEnum.ROBOT_XSY_2.getCode(), tXinyiIndustry, normConfig);
+                }
             }
 
             //总磷
@@ -1799,7 +1825,7 @@ public class AsyncTask {
                 BigDecimal cszlBzz = normConfig.getCszlBzz();
                 BigDecimal cszlGkz = normConfig.getCszlGkz();
                 if(!Objects.isNull(cszlBzz)){
-                    handleXinYiWarningsRobot(cszlBzz, csTp, cszlGkz, BusinessEnum.WarningCategoryEnum.CS_ZL.getCode(), tXinyiIndustry, normConfig);
+                    handleXinYiWarningsRobot(cszlBzz, csTp, cszlGkz, BusinessEnum.WarningCategoryEnum.ROBOT_ECCZLSY.getCode(), tXinyiIndustry, normConfig);
                 }
             }
 

+ 33 - 12
slibra-quartz/src/main/java/com/slibra/quartz/task/RyTask.java

@@ -121,7 +121,8 @@ public class RyTask
      * 出水总氮 的预测:使用 (xsy1 + xsy2) /2 /0.8 做为出水总氮的结果
      *
      */
-    public static final String[] predictorArr = {"出水COD", "出水SS", "出水总磷", "出水氨氮"};
+//    public static final String[] predictorArr = {"出水COD", "出水SS", "出水总磷", "出水氨氮"};
+    public static final String[] predictorArr = {"出水COD", "出水SS", "出水总磷", "出水氨氮", "xsy1", "xsy2"};
     public static final String[] predictorArrSpecial = {"xsy1", "xsy2"};
 
     /**
@@ -676,7 +677,8 @@ public class RyTask
         List<TXinyiIndustry> tXinyiIndustries6 = this.xinyiIndustryMapper.selectNIndustry(6);
         List<TXinyiRobot> tXinyiRobots6 = this.xinyiRobotMapper.selectNRobot(6);
         //先处理xsy1 和 xsy2 合并成一个数据
-        this.predictorSpecial(tXinyiIndustries6, tXinyiRobots6);
+//        this.predictorSpecial(tXinyiIndustries6, tXinyiRobots6);
+        //2024年7月11日16:55:27  xsy1 和 xsy2 又不合并了。。。 再次分开处理
         for (int i = 0; i < predictorArr.length; i++) {
             String result = getPredictor(predictorArr[i]);
             if(StringUtils.isBlank(result) || "error".equals(result)){
@@ -898,7 +900,8 @@ public class RyTask
         //2024年6月18日13:41:10 统一格式,否则查询不到结果
         //2024年6月18日10:36:49 增加预测记录,预测准确度计算等
         TXinyiForecastComparison tXinyiForecastComparison = new TXinyiForecastComparison();
-        tXinyiForecastComparison.setCategory(task);
+        //2024年7月11日17:04:11 TP改为zlsy
+        tXinyiForecastComparison.setCategory("tp".equalsIgnoreCase(task) ? ZLSY : task);
         tXinyiForecastComparison.setForecastTimeOne(dates[0].replaceAll("-", "/") + " " + hours[0]);
         tXinyiForecastComparison.setForecastTimeTwo(dates[1].replaceAll("-", "/") + " " + hours[1]);
         tXinyiForecastComparison.setForecastTimeThree(dates[2].replaceAll("-", "/") + " " + hours[2]);
@@ -1101,11 +1104,11 @@ public class RyTask
                 chartsDataList.add(chartBasic);
             }
             handleXinYiWarningsYC(csadBzz, split, csadGkz, BusinessEnum.WarningCategoryEnum.CS_AD_YC.getCode(), hour, normConfig,tXinyiIndustry.getCsNh3(), tXinyiIndustry, chartsDataList, date);
-        }/*else if("xsy1".equals(task)){
+        }else if("xsy1".equals(task)){
             //2024年6月21日14:57:02 红杉的出水总氮预测改成 不用工业库的,用化验科的两个xsy 相关指标
             //同时调用跃渊的预测接口 保存记录值
             try {
-                String result = HttpUtil.get("http://10.0.3.52:10003/system/forecast?type=3&time=" + DateUtil.format(DateUtils.getNowDate(), DateUtils.YYYY_MM_DD_HH), INT_10);
+                String result = HttpUtil.get("http://10.0.3.52:10003/system/forecast?type=3&time=" + DateUtil.format(DateUtils.getNowDate(), DateUtils.YYYY_MM_DD_HH), INT_10000);
                 if(!StringUtils.isBlank(result)){
                     JSONArray array = JSON.parseArray(result);
                     tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
@@ -1116,8 +1119,11 @@ public class RyTask
                 log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
             }
             // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
-            BigDecimal cscodBzz = new BigDecimal(XIAOSUANYAN_BZK);
-            BigDecimal cscodGkz = new BigDecimal(XIAOSUANYAN_GKZ);
+            /*BigDecimal cscodBzz = new BigDecimal(XIAOSUANYAN_BZK);
+            BigDecimal cscodGkz = new BigDecimal(XIAOSUANYAN_GKZ);*/
+            //2024年7月11日17:19:47  1#好氧硝酸盐、2#好氧硝酸盐使用总氮标准值和管控值来预警
+            BigDecimal cszzBzz = normConfig.getCszzBzz();
+            BigDecimal cszzGkz = normConfig.getCszzGkz();
             //处理展示数据
             for (int i = 0; i < tXinyiRobots6.size(); i++) {
                 TXinyiRobot tXinyiRobotTemp = tXinyiRobots6.get(5 - i);
@@ -1133,11 +1139,26 @@ public class RyTask
                 chartBasic.setVal(new BigDecimal(val));
                 chartsDataList.add(chartBasic);
             }
-            handleXinYiWarningsYC(cscodBzz, split, cscodGkz, BusinessEnum.WarningCategoryEnum.CS_XSY_1_YC.getCode(), hour, normConfig,tXinyiIndustry.getCsCod(), tXinyiIndustry, chartsDataList, date);
+            handleXinYiWarningsYC(cszzBzz, split, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_XSY_1_YC.getCode(), hour, normConfig,tXinyiIndustry.getCsCod(), tXinyiIndustry, chartsDataList, date);
         }else if("xsy2".equals(task)){
+            //同时调用跃渊的预测接口 保存记录值
+            try {
+                String result = HttpUtil.get("http://10.0.3.52:10003/system/forecast?type=3&time=" + DateUtil.format(DateUtils.getNowDate(), DateUtils.YYYY_MM_DD_HH), INT_10000);
+                if(!StringUtils.isBlank(result)){
+                    JSONArray array = JSON.parseArray(result);
+                    tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
+                    tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
+                    tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
+                }
+            } catch (Exception e) {
+                log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
+            }
             // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
-            BigDecimal cscodBzz = new BigDecimal(XIAOSUANYAN_BZK);
-            BigDecimal cscodGkz = new BigDecimal(XIAOSUANYAN_GKZ);
+            /*BigDecimal cscodBzz = new BigDecimal(XIAOSUANYAN_BZK);
+            BigDecimal cscodGkz = new BigDecimal(XIAOSUANYAN_GKZ);*/
+            //2024年7月11日17:19:47  1#好氧硝酸盐、2#好氧硝酸盐使用总氮标准值和管控值来预警
+            BigDecimal cszzBzz = normConfig.getCszzBzz();
+            BigDecimal cszzGkz = normConfig.getCszzGkz();
             //处理展示数据
             for (int i = 0; i < tXinyiRobots6.size(); i++) {
                 TXinyiRobot tXinyiRobotTemp = tXinyiRobots6.get(5 - i);
@@ -1153,8 +1174,8 @@ public class RyTask
                 chartBasic.setVal(new BigDecimal(val));
                 chartsDataList.add(chartBasic);
             }
-            handleXinYiWarningsYC(cscodBzz, split, cscodGkz, BusinessEnum.WarningCategoryEnum.CS_XSY_2_YC.getCode(), hour, normConfig,tXinyiIndustry.getCsCod(), tXinyiIndustry, chartsDataList, date);
-        }*/else {
+            handleXinYiWarningsYC(cszzBzz, split, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_XSY_2_YC.getCode(), hour, normConfig,tXinyiIndustry.getCsCod(), tXinyiIndustry, chartsDataList, date);
+        }else {
             log.error("暂未支持的类型{}", task);
         }
         //插入到数据库