Bladeren bron

工业库报警和化验库报警逻辑调整

王苗苗 1 maand geleden
bovenliggende
commit
21f31c07a6

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

@@ -17,6 +17,7 @@ public class MyConstants {
     public static final String PROD_ENVIRONMENT = "prod-abandon";
     public static final String DENGBAO_ENVIRONMENT = "dengbao";
     public static final String DEV_ENVIRONMENT = "dev";
+    public static final String DEV_LOCAL = "local";
 
 
     public static final String INDUSTRY_INTERFACE_ADDR = "http://192.168.40.23:4568/api/v1/khquerydata";

+ 306 - 174
slibra-quartz/src/main/java/com/slibra/quartz/task/AsyncTask.java

@@ -98,11 +98,11 @@ public class AsyncTask {
      * @param normConfig
      * @param xinyiCalculate
      */
-    @Async("customizeExecutor")
+//    @Async("customizeExecutor")
     public void handleWarning(TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, TXinyiCalculate xinyiCalculate){
         //2024年08月09日14:26:29  为了节省费用,测试环境关闭报警并增加手动触发报警操作
         if(PROD_ENVIRONMENT.equalsIgnoreCase(environment) || DENGBAO_ENVIRONMENT.equalsIgnoreCase(environment)
-            || DEV_ENVIRONMENT.equalsIgnoreCase(environment)){
+            || DEV_ENVIRONMENT.equalsIgnoreCase(environment) || DEV_LOCAL.equalsIgnoreCase(environment)){
             log.info("进入了定时任务处理工业库报警的具体逻辑处理");
             //新的逻辑:
             //只要当前获取的工业库数据和当前时间
@@ -131,7 +131,7 @@ public class AsyncTask {
                 //2025年02月20日10:52:31 在具体的报警类型中增加新的判断 仪表故障 数据异常等
                 this.handleSZWarning(tXinyiIndustry, normConfig);
                 //2024年5月28日14:14:26  下面是新增的 生化报警处理
-                this.handleSHWarning(tXinyiIndustry, normConfig, xinyiCalculate);
+//                this.handleSHWarning(tXinyiIndustry, normConfig, xinyiCalculate);
             }else{
                 //查询是否有正在工业库的同步任务失败的报警,有的话,什么都不做; 没有的话,新增该类型报警
                 if(CollectionUtils.isEmpty(tXinyiWarningRecords)){
@@ -149,7 +149,8 @@ public class AsyncTask {
                     log.info("工业库报警的时候,发现同步工业库任务挂掉了,并且已经有该类型报警了,不做任何处理");
                 }
                 //将其他类型的报警全部关闭
-                closeOtherWarningsBySymbol(null);
+                //2025年02月27日17:09:56 此场景不关闭其他报警
+//                closeOtherWarningsBySymbol(null);
             }
 
         }
@@ -1414,164 +1415,157 @@ public class AsyncTask {
         BigDecimal cscodGkz = normConfig.getCscodGkz();
         BigDecimal jsSlq = tXinyiIndustry.getJsSlq();
         BigDecimal jsslSjz = normConfig.getJsslSjz();
+        BigDecimal cszlBzz = normConfig.getCszlBzz();
+        BigDecimal cszlGkz = normConfig.getCszlGkz();
+        BigDecimal cszzBzz = normConfig.getCszzBzz();
+        BigDecimal cszzGkz = normConfig.getCszzGkz();
+        BigDecimal csadBzz = normConfig.getCsadBzz();
+        BigDecimal csadGkz = normConfig.getCsadGkz();
+        BigDecimal csSSBzz = normConfig.getCsssBzz();
+        BigDecimal csssGkz = normConfig.getCsssGkz();
+        BigDecimal jszlSjz = normConfig.getJszlSjz();
+        BigDecimal jszdSjz = normConfig.getJszdSjz();
+        BigDecimal jscodSjz = normConfig.getJscodSjz();
+        BigDecimal jsadSjz = normConfig.getJsadSjz();
+        BigDecimal jsSSSjz = normConfig.getJsssSjz();
+
         //2025年02月20日11:19:17 累计的断点数量
         int breakpointCount = 0;
         int noChange = 0;
         List<TXinyiWarningRecord> breakPointList = new ArrayList<>();//断点集合
         List<TXinyiWarningRecord> noChangeList = new ArrayList<>();//连续不变集合
-        if(!Objects.isNull(cscodBzz)){
-            WarningMoreExceed warningMoreExceed = handleXinYiWarningsCsMore(cscodBzz, csCod, cscodGkz, CS_COD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsCod(), jsslSjz, normConfig.getJscodSjz()));
-            if(warningMoreExceed.isBreakpoint()){
-                breakpointCount++;
-                breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
-            }
-            if(warningMoreExceed.isNoChange()){
-                noChange++;
-                noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
-            }
+        //2025年02月27日16:17:47 标识进出水的指标是否可以进行后续的报警
+        boolean csCodExecute = true;
+        boolean csZLExecute = true;
+        boolean csZDExecute = true;
+        boolean csADExecute = true;
+        boolean csSSExecute = true;
+        boolean jsZLExecute = true;
+        boolean jsCodExecute = true;
+        boolean jsZDExecute = true;
+        boolean jsADExecute = true;
+        boolean jsSSExecute = true;
+
+        //出水cod超标报警
+        WarningMoreExceed warningMoreExceed = handleXinYiWarningsCsMore(csCod, CS_COD.getCode());
+        if(warningMoreExceed.isBreakpoint()){
+            breakpointCount++;
+            breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
+        }
+        if(warningMoreExceed.isNoChange()){
+            noChange++;
+            noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
         }
 
         //出水总磷超标报警
         BigDecimal csTp = tXinyiIndustry.getCsTp();
-        BigDecimal cszlBzz = normConfig.getCszlBzz();
-        BigDecimal cszlGkz = normConfig.getCszlGkz();
-        if(!Objects.isNull(cszlBzz)){
-            WarningMoreExceed warningMoreExceed = handleXinYiWarningsCsMore(cszlBzz, csTp, cszlGkz, BusinessEnum.WarningCategoryEnum.CS_ZL.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTp(), jsslSjz, normConfig.getJszlSjz()));
-            if(warningMoreExceed.isBreakpoint()){
-                breakpointCount++;
-                breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
-            }
-            if(warningMoreExceed.isNoChange()){
-                noChange++;
-                noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
-            }
+        warningMoreExceed = handleXinYiWarningsCsMore(csTp, BusinessEnum.WarningCategoryEnum.CS_ZL.getCode());
+        if(warningMoreExceed.isBreakpoint()){
+            breakpointCount++;
+            breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
+        }
+        if(warningMoreExceed.isNoChange()){
+            noChange++;
+            noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
         }
 
 
         //出水总氮超标报警
         BigDecimal csTn = tXinyiIndustry.getCsTn();
-        BigDecimal cszzBzz = normConfig.getCszzBzz();
-        BigDecimal cszzGkz = normConfig.getCszzGkz();
-        if(!Objects.isNull(cszzBzz)){
-            WarningMoreExceed warningMoreExceed = handleXinYiWarningsCsMore(cszzBzz, csTn, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_ZD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
-            if(warningMoreExceed.isBreakpoint()){
-                breakpointCount++;
-                breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
-            }
-            if(warningMoreExceed.isNoChange()){
-                noChange++;
-                noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
-            }
+        warningMoreExceed = handleXinYiWarningsCsMore(csTn, BusinessEnum.WarningCategoryEnum.CS_ZD.getCode());
+        if(warningMoreExceed.isBreakpoint()){
+            breakpointCount++;
+            breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
+        }
+        if(warningMoreExceed.isNoChange()){
+            noChange++;
+            noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
         }
 
         //出水氨氮超标报警
         BigDecimal csNh3 = tXinyiIndustry.getCsNh3();
-        BigDecimal csadBzz = normConfig.getCsadBzz();
-        BigDecimal csadGkz = normConfig.getCsadGkz();
-        if(!Objects.isNull(csadBzz)){
-            WarningMoreExceed warningMoreExceed = handleXinYiWarningsCsMore(csadBzz, csNh3, csadGkz, BusinessEnum.WarningCategoryEnum.CS_AD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsNh3(), jsslSjz, normConfig.getJsadSjz()));
-            if(warningMoreExceed.isBreakpoint()){
-                breakpointCount++;
-                breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
-            }
-            if(warningMoreExceed.isNoChange()){
-                noChange++;
-                noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
-            }
-
+        warningMoreExceed = handleXinYiWarningsCsMore(csNh3, BusinessEnum.WarningCategoryEnum.CS_AD.getCode());
+        if(warningMoreExceed.isBreakpoint()){
+            breakpointCount++;
+            breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
+        }
+        if(warningMoreExceed.isNoChange()){
+            noChange++;
+            noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
         }
 
         //出水SS超标报警
         BigDecimal csSS = tXinyiIndustry.getCsSs();
-        BigDecimal csSSBzz = normConfig.getCsssBzz();
-        BigDecimal csssGkz = normConfig.getCsssGkz();
-        if(!Objects.isNull(csSSBzz)){
-            WarningMoreExceed warningMoreExceed = handleXinYiWarningsCsMore(csSSBzz, csSS, csssGkz, BusinessEnum.WarningCategoryEnum.CS_SS.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsSs(), jsslSjz, normConfig.getJsssSjz()));
-            if(warningMoreExceed.isBreakpoint()){
-                breakpointCount++;
-                breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
-            }
-            if(warningMoreExceed.isNoChange()){
-                noChange++;
-                noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
-            }
+        warningMoreExceed = handleXinYiWarningsCsMore(csSS, BusinessEnum.WarningCategoryEnum.CS_SS.getCode());
+        if(warningMoreExceed.isBreakpoint()){
+            breakpointCount++;
+            breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
+        }
+        if(warningMoreExceed.isNoChange()){
+            noChange++;
+            noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
         }
 
 
         //进水相关报警
         //进水总磷超标报警
         BigDecimal jsTp = tXinyiIndustry.getJsTp();
-        BigDecimal jszlSjz = normConfig.getJszlSjz();
-        if(!Objects.isNull(jszlSjz)){
-            WarningMoreExceed warningMoreExceed = handleXinYiWarningRecordJSMore(jszlSjz, jsTp, BusinessEnum.WarningCategoryEnum.JS_ZL.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTp(), jsslSjz, normConfig.getJszlSjz()));
-            if(warningMoreExceed.isBreakpoint()){
-                breakpointCount++;
-                breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
-            }
-            if(warningMoreExceed.isNoChange()){
-                noChange++;
-                noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
-            }
+        warningMoreExceed = handleXinYiWarningRecordJSMore(jsTp, BusinessEnum.WarningCategoryEnum.JS_ZL.getCode());
+        if(warningMoreExceed.isBreakpoint()){
+            breakpointCount++;
+            breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
+        }
+        if(warningMoreExceed.isNoChange()){
+            noChange++;
+            noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
         }
 
         //进水COD超标报警
         BigDecimal jsCod = tXinyiIndustry.getJsCod();
-        BigDecimal jscodSjz = normConfig.getJscodSjz();
-        if(!Objects.isNull(jscodSjz)){
-            WarningMoreExceed warningMoreExceed = handleXinYiWarningRecordJSMore(jscodSjz, jsCod, BusinessEnum.WarningCategoryEnum.JS_COD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsCod(), jsslSjz, normConfig.getJscodSjz()));
-            if(warningMoreExceed.isBreakpoint()){
-                breakpointCount++;
-                breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
-            }
-            if(warningMoreExceed.isNoChange()){
-                noChange++;
-                noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
-            }
+        warningMoreExceed = handleXinYiWarningRecordJSMore(jsCod, BusinessEnum.WarningCategoryEnum.JS_COD.getCode());
+        if(warningMoreExceed.isBreakpoint()){
+            breakpointCount++;
+            breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
+        }
+        if(warningMoreExceed.isNoChange()){
+            noChange++;
+            noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
         }
 
         //进水总氮超标报警
         BigDecimal jsTn = tXinyiIndustry.getJsTn();
-        BigDecimal jszdSjz = normConfig.getJszdSjz();
-        if(!Objects.isNull(jszdSjz)){
-            WarningMoreExceed warningMoreExceed = handleXinYiWarningRecordJSMore(jszdSjz, jsTn, BusinessEnum.WarningCategoryEnum.JS_ZD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
-            if(warningMoreExceed.isBreakpoint()){
-                breakpointCount++;
-                breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
-            }
-            if(warningMoreExceed.isNoChange()){
-                noChange++;
-                noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
-            }
+        warningMoreExceed = handleXinYiWarningRecordJSMore(jsTn, BusinessEnum.WarningCategoryEnum.JS_ZD.getCode());
+        if(warningMoreExceed.isBreakpoint()){
+            breakpointCount++;
+            breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
+        }
+        if(warningMoreExceed.isNoChange()){
+            noChange++;
+            noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
         }
 
         //进水氨氮超标报警
         BigDecimal jsNh3 = tXinyiIndustry.getJsNh3();
-        BigDecimal jsadSjz = normConfig.getJsadSjz();
-        if(!Objects.isNull(jsadSjz)){
-            WarningMoreExceed warningMoreExceed = handleXinYiWarningRecordJSMore(jsadSjz, jsNh3, BusinessEnum.WarningCategoryEnum.JS_AD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsNh3(), jsslSjz, normConfig.getJsadSjz()));
-            if(warningMoreExceed.isBreakpoint()){
-                breakpointCount++;
-                breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
-            }
-            if(warningMoreExceed.isNoChange()){
-                noChange++;
-                noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
-            }
+        warningMoreExceed = handleXinYiWarningRecordJSMore(jsNh3, BusinessEnum.WarningCategoryEnum.JS_AD.getCode());
+        if(warningMoreExceed.isBreakpoint()){
+            breakpointCount++;
+            breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
+        }
+        if(warningMoreExceed.isNoChange()){
+            noChange++;
+            noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
         }
 
         //进水SS超标报警
         BigDecimal jsSS = tXinyiIndustry.getJsSs();
-        BigDecimal jsSSSjz = normConfig.getJsssSjz();
-        if(!Objects.isNull(jsSSSjz)){
-            WarningMoreExceed warningMoreExceed = handleXinYiWarningRecordJSMore(jsSSSjz, jsSS, BusinessEnum.WarningCategoryEnum.JS_SS.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsSs(), jsslSjz, normConfig.getJsssSjz()));
-            if(warningMoreExceed.isBreakpoint()){
-                breakpointCount++;
-                breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
-            }
-            if(warningMoreExceed.isNoChange()){
-                noChange++;
-                noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
-            }
+        warningMoreExceed = handleXinYiWarningRecordJSMore(jsSS, BusinessEnum.WarningCategoryEnum.JS_SS.getCode());
+        if(warningMoreExceed.isBreakpoint()){
+            breakpointCount++;
+            breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
+        }
+        if(warningMoreExceed.isNoChange()){
+            noChange++;
+            noChangeList.add(warningMoreExceed.getNoChangeWarningRecord());
         }
 
         //下面是处理多个指标的 【断点】和 连续不变的报警
@@ -1599,9 +1593,35 @@ public class AsyncTask {
             }else{
                 log.info("工业库报警的时候,发现存在仪表故障(断点不变单个指标)的报警,并且已经有该类型报警了,不做任何处理");
             }
+            //额外判断当前的异常是哪个指标,并处理标识
+            if(BusinessEnum.WarningCategoryEnum.CS_COD.getCode().equals(category)){
+                csCodExecute = false;
+            }else if(BusinessEnum.WarningCategoryEnum.CS_ZL.getCode().equals(category)){
+                csZLExecute = false;
+            }else if(BusinessEnum.WarningCategoryEnum.CS_ZD.getCode().equals(category)){
+                csZDExecute = false;
+            }else if(BusinessEnum.WarningCategoryEnum.CS_AD.getCode().equals(category)){
+                csADExecute = false;
+            }else if(BusinessEnum.WarningCategoryEnum.CS_SS.getCode().equals(category)){
+                csSSExecute = false;
+            }else if(BusinessEnum.WarningCategoryEnum.JS_ZL.getCode().equals(category)){
+                jsZLExecute = false;
+            }else if(BusinessEnum.WarningCategoryEnum.JS_COD.getCode().equals(category)){
+                jsCodExecute = false;
+            }else if(BusinessEnum.WarningCategoryEnum.JS_ZD.getCode().equals(category)){
+                jsZDExecute = false;
+            }else if(BusinessEnum.WarningCategoryEnum.JS_AD.getCode().equals(category)){
+                jsADExecute = false;
+            }else if(BusinessEnum.WarningCategoryEnum.JS_SS.getCode().equals(category)){
+                jsSSExecute = false;
+            }else{
+                log.error("处理是否后续报警的报警类型是不支持的类型");
+                throw new ServiceException("处理是否后续报警的报警类型是不支持的类型");
+            }
         }else{
             //将其他类型的报警全部关闭
-            closeOtherWarningsBySymbol(BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE_GYK.getCode());
+            //2025年02月27日17:09:56 此场景不关闭其他报警
+//            closeOtherWarningsBySymbol(BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE_GYK.getCode());
             //再新增新的类型的报警
             if(CollectionUtils.isEmpty(tXinyiWarningRecords)){
                 //插入该类型报警
@@ -1646,9 +1666,35 @@ public class AsyncTask {
             }else{
                 log.info("工业库报警的时候,发现存在仪表故障(连续不变单个指标)的报警,并且已经有该类型报警了,不做任何处理");
             }
+            //额外判断当前的异常是哪个指标,并处理标识
+            if(BusinessEnum.WarningCategoryEnum.CS_COD.getCode().equals(category)){
+                csCodExecute = false;
+            }else if(BusinessEnum.WarningCategoryEnum.CS_ZL.getCode().equals(category)){
+                csZLExecute = false;
+            }else if(BusinessEnum.WarningCategoryEnum.CS_ZD.getCode().equals(category)){
+                csZDExecute = false;
+            }else if(BusinessEnum.WarningCategoryEnum.CS_AD.getCode().equals(category)){
+                csADExecute = false;
+            }else if(BusinessEnum.WarningCategoryEnum.CS_SS.getCode().equals(category)){
+                csSSExecute = false;
+            }else if(BusinessEnum.WarningCategoryEnum.JS_ZL.getCode().equals(category)){
+                jsZLExecute = false;
+            }else if(BusinessEnum.WarningCategoryEnum.JS_COD.getCode().equals(category)){
+                jsCodExecute = false;
+            }else if(BusinessEnum.WarningCategoryEnum.JS_ZD.getCode().equals(category)){
+                jsZDExecute = false;
+            }else if(BusinessEnum.WarningCategoryEnum.JS_AD.getCode().equals(category)){
+                jsADExecute = false;
+            }else if(BusinessEnum.WarningCategoryEnum.JS_SS.getCode().equals(category)){
+                jsSSExecute = false;
+            }else{
+                log.error("处理是否后续报警的报警类型是不支持的类型");
+                throw new ServiceException("处理是否后续报警的报警类型是不支持的类型");
+            }
         }else{
             //将其他类型的报警全部关闭
-            closeOtherWarningsBySymbol(BusinessEnum.WarningSymbolEnum.YBGZ_LX_MORE.getCode());
+            //2025年02月27日17:09:56 此场景不关闭其他报警
+//            closeOtherWarningsBySymbol(BusinessEnum.WarningSymbolEnum.YBGZ_LX_MORE.getCode());
             //触发 多个连续不变报警
             if(CollectionUtils.isEmpty(tXinyiWarningNoChangeMoreRecords)){
                 //插入该类型报警
@@ -1671,25 +1717,52 @@ public class AsyncTask {
         }
 
         //开始走正常的水质报警 + 突变
-        handleXinYiWarningsCsOrigin(cscodBzz, csCod, cscodGkz, CS_COD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsCod(), jsslSjz, normConfig.getJscodSjz()));
-
-        handleXinYiWarningsCsOrigin(cszlBzz, csTp, cszlGkz, BusinessEnum.WarningCategoryEnum.CS_ZL.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTp(), jsslSjz, normConfig.getJszlSjz()));
-
-        handleXinYiWarningsCsOrigin(cszzBzz, csTn, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_ZD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
-
-        handleXinYiWarningsCsOrigin(csadBzz, csNh3, csadGkz, BusinessEnum.WarningCategoryEnum.CS_AD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsNh3(), jsslSjz, normConfig.getJsadSjz()));
-
-        handleXinYiWarningsCsOrigin(csSSBzz, csSS, csssGkz, BusinessEnum.WarningCategoryEnum.CS_SS.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsSs(), jsslSjz, normConfig.getJsssSjz()));
-
-        handleXinYiWarningRecordJSOrigin(jszlSjz, jsTp, BusinessEnum.WarningCategoryEnum.JS_ZL.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTp(), jsslSjz, normConfig.getJszlSjz()));
-
-        handleXinYiWarningRecordJSOrigin(jscodSjz, jsCod, BusinessEnum.WarningCategoryEnum.JS_COD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsCod(), jsslSjz, normConfig.getJscodSjz()));
-
-        handleXinYiWarningRecordJSOrigin(jszdSjz, jsTn, BusinessEnum.WarningCategoryEnum.JS_ZD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
-
-        handleXinYiWarningRecordJSOrigin(jsadSjz, jsNh3, BusinessEnum.WarningCategoryEnum.JS_AD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsNh3(), jsslSjz, normConfig.getJsadSjz()));
-
-        handleXinYiWarningRecordJSOrigin(jsSSSjz, jsSS, BusinessEnum.WarningCategoryEnum.JS_SS.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsSs(), jsslSjz, normConfig.getJsssSjz()));
+        //2025年02月27日15:33:39 加上校验:此次的检查指标必须是不存在断点且不存在连续不变才执行下面的报警。
+
+        //没有断点,且没有连续不变,全部执行
+        /*if(breakpointCount < 1 && noChange < 1){
+            handleXinYiWarningsCsOrigin(cscodBzz, csCod, cscodGkz, CS_COD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsCod(), jsslSjz, normConfig.getJscodSjz()));
+            handleXinYiWarningsCsOrigin(cszlBzz, csTp, cszlGkz, BusinessEnum.WarningCategoryEnum.CS_ZL.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTp(), jsslSjz, normConfig.getJszlSjz()));
+            handleXinYiWarningsCsOrigin(cszzBzz, csTn, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_ZD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
+            handleXinYiWarningsCsOrigin(csadBzz, csNh3, csadGkz, BusinessEnum.WarningCategoryEnum.CS_AD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsNh3(), jsslSjz, normConfig.getJsadSjz()));
+            handleXinYiWarningsCsOrigin(csSSBzz, csSS, csssGkz, BusinessEnum.WarningCategoryEnum.CS_SS.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsSs(), jsslSjz, normConfig.getJsssSjz()));
+            handleXinYiWarningRecordJSOrigin(jszlSjz, jsTp, BusinessEnum.WarningCategoryEnum.JS_ZL.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTp(), jsslSjz, normConfig.getJszlSjz()));
+            handleXinYiWarningRecordJSOrigin(jscodSjz, jsCod, BusinessEnum.WarningCategoryEnum.JS_COD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsCod(), jsslSjz, normConfig.getJscodSjz()));
+            handleXinYiWarningRecordJSOrigin(jszdSjz, jsTn, BusinessEnum.WarningCategoryEnum.JS_ZD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
+            handleXinYiWarningRecordJSOrigin(jsadSjz, jsNh3, BusinessEnum.WarningCategoryEnum.JS_AD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsNh3(), jsslSjz, normConfig.getJsadSjz()));
+            handleXinYiWarningRecordJSOrigin(jsSSSjz, jsSS, BusinessEnum.WarningCategoryEnum.JS_SS.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsSs(), jsslSjz, normConfig.getJsssSjz()));
+        }*/
+        //如果只有单一的报警,只有该指标不再进行报警,其他的指标还是要报警的
+        /*if(breakpointCount == 1 && noChange == 0){//只有断点
+        }
+        if(breakpointCount == 0 && noChange == 1){//只有连续不变
+        }
+        if(breakpointCount == 1 && noChange == 1){//既有断点,又有连续不变 【可能是相同的指标,也可能是不同的指标】
+        }*/
+        //综合上面3中情况,断点和连续不变的,2个报警类型至少有一个报警,且只能有一个指标报警
+        //上述逻辑存在bug:如果是不同的指标 比如出水cod断点 出水ss连续不变 则无法处理。 所以决定进出水的指标是否报警,需要每个知道都要单独记录,只要存在异常项就不能再走 异常升高/偏低/普通的报警了
+
+        //后续的指标是否往下进行,用新的逻辑:
+        if(csCodExecute && !Objects.isNull(cscodBzz) && cscodBzz.compareTo(BigDecimal.ZERO) > 0 && !Objects.isNull(cscodGkz) && cscodGkz.compareTo(BigDecimal.ZERO) > 0)
+            handleXinYiWarningsCsOrigin(cscodBzz, csCod, cscodGkz, CS_COD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsCod(), jsslSjz, normConfig.getJscodSjz()));
+        if(csZLExecute && !Objects.isNull(cszlBzz) && cszlBzz.compareTo(BigDecimal.ZERO) > 0 && !Objects.isNull(cszlGkz) && cszlGkz.compareTo(BigDecimal.ZERO) > 0)
+            handleXinYiWarningsCsOrigin(cszlBzz, csTp, cszlGkz, BusinessEnum.WarningCategoryEnum.CS_ZL.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTp(), jsslSjz, normConfig.getJszlSjz()));
+        if(csZDExecute && !Objects.isNull(cszzBzz) && cszzBzz.compareTo(BigDecimal.ZERO) > 0 && !Objects.isNull(cszzGkz) && cszzGkz.compareTo(BigDecimal.ZERO) > 0)
+            handleXinYiWarningsCsOrigin(cszzBzz, csTn, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_ZD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
+        if(csADExecute && !Objects.isNull(csadBzz) && csadBzz.compareTo(BigDecimal.ZERO) > 0 && !Objects.isNull(csadGkz) && csadGkz.compareTo(BigDecimal.ZERO) > 0)
+            handleXinYiWarningsCsOrigin(csadBzz, csNh3, csadGkz, BusinessEnum.WarningCategoryEnum.CS_AD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsNh3(), jsslSjz, normConfig.getJsadSjz()));
+        if(csSSExecute && !Objects.isNull(csSSBzz) && csSSBzz.compareTo(BigDecimal.ZERO) > 0 && !Objects.isNull(csssGkz) && csssGkz.compareTo(BigDecimal.ZERO) > 0)
+            handleXinYiWarningsCsOrigin(csSSBzz, csSS, csssGkz, BusinessEnum.WarningCategoryEnum.CS_SS.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsSs(), jsslSjz, normConfig.getJsssSjz()));
+        if(jsZLExecute && !Objects.isNull(jszlSjz) && jszlSjz.compareTo(BigDecimal.ZERO) > 0)
+            handleXinYiWarningRecordJSOrigin(jszlSjz, jsTp, BusinessEnum.WarningCategoryEnum.JS_ZL.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTp(), jsslSjz, normConfig.getJszlSjz()));
+        if(jsCodExecute && !Objects.isNull(jscodSjz) && jscodSjz.compareTo(BigDecimal.ZERO) > 0)
+            handleXinYiWarningRecordJSOrigin(jscodSjz, jsCod, BusinessEnum.WarningCategoryEnum.JS_COD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsCod(), jsslSjz, normConfig.getJscodSjz()));
+        if(jsZDExecute && !Objects.isNull(jszdSjz) && jszdSjz.compareTo(BigDecimal.ZERO) > 0)
+            handleXinYiWarningRecordJSOrigin(jszdSjz, jsTn, BusinessEnum.WarningCategoryEnum.JS_ZD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
+        if(jsADExecute && !Objects.isNull(jsadSjz) && jsadSjz.compareTo(BigDecimal.ZERO) > 0)
+            handleXinYiWarningRecordJSOrigin(jsadSjz, jsNh3, BusinessEnum.WarningCategoryEnum.JS_AD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsNh3(), jsslSjz, normConfig.getJsadSjz()));
+        if(jsSSExecute && !Objects.isNull(jsSSSjz) && jsSSSjz.compareTo(BigDecimal.ZERO) > 0)
+            handleXinYiWarningRecordJSOrigin(jsSSSjz, jsSS, BusinessEnum.WarningCategoryEnum.JS_SS.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsSs(), jsslSjz, normConfig.getJsssSjz()));
 
     }
 
@@ -2228,17 +2301,12 @@ public class AsyncTask {
     /**
      * 通过输入的值 生成对应类型的报警对象(出水)
      *
-     * @param csBzz
      * @param currentVal
-     * @param csGkz
      * @param category
-     * @param tXinyiIndustry
-     * @param normConfig
-     * @param cwrwfhz
      * 2025年02月20日11:15:05 返回map 分别是是否断点 是否连续不变
      * @return
      */
-    private WarningMoreExceed handleXinYiWarningsCsMore(BigDecimal csBzz, BigDecimal currentVal, BigDecimal csGkz, String category, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, BigDecimal cwrwfhz) {
+    private WarningMoreExceed handleXinYiWarningsCsMore(BigDecimal currentVal, String category) {
         WarningMoreExceed warningMoreExceed = new WarningMoreExceed();
         boolean breakpoint = false;
         boolean noChange = false;
@@ -2360,7 +2428,7 @@ public class AsyncTask {
                     warningRecordYCSG.setType(0);
                     warningRecordYCSG.setCategory(category);
                     warningRecordYCSG.setTime(nowDate);
-                    warningRecordYCSG.setReason(BusinessEnum.WarningSymbolEnum.SJYC_YCSG.getMsg());
+                    warningRecordYCSG.setReason(category + BusinessEnum.WarningSymbolEnum.SJYC_YCSG.getMsg());
                     warningRecordYCSG.setWaterType(BusinessEnum.WaterTypeEnum.CS.getCode());
                     warningRecordYCSG.setSymbol(BusinessEnum.WarningSymbolEnum.SJYC_YCSG.getCode());
                     warningRecordYCSG.setCreateBy(WARNING_DEFAULT_CREATE);
@@ -2397,7 +2465,7 @@ public class AsyncTask {
                     warningRecordYCPD.setType(0);
                     warningRecordYCPD.setCategory(category);
                     warningRecordYCPD.setTime(nowDate);
-                    warningRecordYCPD.setReason(BusinessEnum.WarningSymbolEnum.SJYC_YCPD.getMsg());
+                    warningRecordYCPD.setReason(category + BusinessEnum.WarningSymbolEnum.SJYC_YCPD.getMsg());
                     warningRecordYCPD.setWaterType(BusinessEnum.WaterTypeEnum.CS.getCode());
                     warningRecordYCPD.setSymbol(BusinessEnum.WarningSymbolEnum.SJYC_YCPD.getCode());
                     warningRecordYCPD.setCreateBy(WARNING_DEFAULT_CREATE);
@@ -2596,15 +2664,11 @@ public class AsyncTask {
     /**
      * [工业库]通过输入的值 生成对应类型的报警对象(进水)
      *
-     * @param jsBzz
      * @param currentVal
      * @param category
-     * @param tXinyiIndustry
-     * @param normConfig
-     * @param cwrwfhz
      * @return
      */
-    private WarningMoreExceed handleXinYiWarningRecordJSMore(BigDecimal jsBzz, BigDecimal currentVal, String category, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, BigDecimal cwrwfhz) {
+    private WarningMoreExceed handleXinYiWarningRecordJSMore(BigDecimal currentVal, String category) {
         WarningMoreExceed warningMoreExceed = new WarningMoreExceed();
         boolean breakpoint = false;
         boolean noChange = false;
@@ -2771,7 +2835,7 @@ public class AsyncTask {
                     warningRecordYCSG.setType(0);
                     warningRecordYCSG.setCategory(category);
                     warningRecordYCSG.setTime(nowDate);
-                    warningRecordYCSG.setReason(BusinessEnum.WarningSymbolEnum.SJYC_YCSG.getMsg());
+                    warningRecordYCSG.setReason(category + BusinessEnum.WarningSymbolEnum.SJYC_YCSG.getMsg());
                     warningRecordYCSG.setWaterType(BusinessEnum.WaterTypeEnum.JS.getCode());
                     warningRecordYCSG.setSymbol(BusinessEnum.WarningSymbolEnum.SJYC_YCSG.getCode());
                     warningRecordYCSG.setCreateBy(WARNING_DEFAULT_CREATE);
@@ -2811,7 +2875,7 @@ public class AsyncTask {
                     warningRecordYCPD.setType(0);
                     warningRecordYCPD.setCategory(category);
                     warningRecordYCPD.setTime(nowDate);
-                    warningRecordYCPD.setReason(BusinessEnum.WarningSymbolEnum.SJYC_YCPD.getMsg());
+                    warningRecordYCPD.setReason(category + BusinessEnum.WarningSymbolEnum.SJYC_YCPD.getMsg());
                     warningRecordYCPD.setWaterType(BusinessEnum.WaterTypeEnum.JS.getCode());
                     warningRecordYCPD.setSymbol(BusinessEnum.WarningSymbolEnum.SJYC_YCPD.getCode());
                     warningRecordYCPD.setCreateBy(WARNING_DEFAULT_CREATE);
@@ -3947,7 +4011,8 @@ public class AsyncTask {
                 log.info("化验室报警的时候,发现同步化验室同步定时任务挂掉了,并且已经有该类型报警了,不做任何处理");
             }
             //将其他类型的报警全部关闭
-            closeOtherWarningsBySymbol(null);
+            //2025年02月27日17:35:37 此场景不关闭其他报警
+//            closeOtherWarningsBySymbol(null);
         }
 
 
@@ -3959,6 +4024,12 @@ public class AsyncTask {
         int breakpointCount = 0;
         List<TXinyiWarningRecord> breakPointList = new ArrayList<>();//断点集合
 
+        //判断单指标断点,后续同指标的其他报警是否可以继续执行
+        boolean xsy1Execute = true;
+        boolean xsy2Execute = true;
+        boolean ecczlxyExecute = true;
+        boolean csADExecute = true;
+
         //#1好氧硝酸盐
         BigDecimal no3Hlj1Jqr = tXinyiRobot.getNo3Hlj1Jqr();
         //#2好氧硝酸盐
@@ -3972,26 +4043,35 @@ public class AsyncTask {
         BigDecimal no3Qyc2Jqr = tXinyiRobot.getNo3Qyc2Jqr();
         BigDecimal nh32Jqr = tXinyiRobot.getNh32Jqr();
 
-
-        WarningMoreExceed warningMoreExceed = handleXinYiWarningRecordRobotMore(no3Hlj1Jqr, ROBOT_XSY_1.getCode());
-        if(warningMoreExceed.isBreakpoint()){
-            breakpointCount++;
-            breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
+        WarningMoreExceed warningMoreExceed = null;
+        if(!Objects.isNull(no3Hlj1Jqr)){
+            warningMoreExceed = handleXinYiWarningRecordRobotMore(no3Hlj1Jqr, ROBOT_XSY_1.getCode());
+            if(warningMoreExceed.isBreakpoint()){
+                breakpointCount++;
+                breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
+            }
         }
 
-        warningMoreExceed = handleXinYiWarningRecordRobotMore(no3Hlj2Jqr, ROBOT_XSY_2.getCode());
-        if(warningMoreExceed.isBreakpoint()){
-            breakpointCount++;
-            breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
+
+        if(!Objects.isNull(no3Hlj2Jqr)){
+            warningMoreExceed = handleXinYiWarningRecordRobotMore(no3Hlj2Jqr, ROBOT_XSY_2.getCode());
+            if(warningMoreExceed.isBreakpoint()){
+                breakpointCount++;
+                breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
+            }
         }
 
-        BigDecimal csTp = tpRccJqr.divide(ROBOT_HY_DIVIDE, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-        warningMoreExceed = handleXinYiWarningRecordRobotMore(csTp, ROBOT_ECCZLSY.getCode());
-        if(warningMoreExceed.isBreakpoint()){
-            breakpointCount++;
-            breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
+
+        if(!Objects.isNull(tpRccJqr)){
+            BigDecimal csTp = tpRccJqr.divide(ROBOT_HY_DIVIDE, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+            warningMoreExceed = handleXinYiWarningRecordRobotMore(csTp, ROBOT_ECCZLSY.getCode());
+            if(warningMoreExceed.isBreakpoint()){
+                breakpointCount++;
+                breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
+            }
         }
 
+
         //判断 增加容错
         if(Objects.isNull(no3Qyc1Jqr))
             no3Qyc1Jqr = BigDecimal.ZERO;
@@ -4042,9 +4122,19 @@ public class AsyncTask {
             }else{
                 log.info("化验室报警的时候,发现存在仪表故障(断点不变单个指标)的报警,并且已经有该类型报警了,不做任何处理");
             }
+            //如果出现单指标报警  标识后续同指标是否可以继续报警
+            if(ROBOT_XSY_1.getCode().equals(category))
+                xsy1Execute = false;
+            if(ROBOT_XSY_2.getCode().equals(category))
+                xsy2Execute = false;
+            if(ROBOT_ECCZLSY.getCode().equals(category))
+                ecczlxyExecute = false;
+            if(ROBOT_CS_AD.getCode().equals(category))
+                csADExecute = false;
         }else{
             //将其他类型的报警全部关闭
-            closeOtherWarningsBySymbol(BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE_HYS.getCode());
+            //2025年02月27日17:35:37 此场景不关闭其他报警
+//            closeOtherWarningsBySymbol(BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE_HYS.getCode());
             //再新增新的类型的报警
             if(CollectionUtils.isEmpty(tXinyiWarningRecords)){
                 //插入该类型报警
@@ -4069,7 +4159,49 @@ public class AsyncTask {
 
         //最原始的标准值和管控制报警
         //2025年02月25日15:58:15 需要在最原始的报警里,增加是否出现单点突变 - 异常升高 和 单点突变 - 异常偏低的报警
-        robotOriginWarning(tXinyiRobot, normConfig, tXinyiIndustry);
+//        robotOriginWarning(tXinyiRobot, normConfig, tXinyiIndustry);
+        //这里需要根据是否出现了断点判断,做不同的 其他类型的报警  不能执行所有指标的 因为有可能某个指标是 单指标断点,这种的就不用执行其他报警了
+
+        //总氮的标准值和管控值
+        BigDecimal cszzBzz = normConfig.getCszzBzz();
+        BigDecimal cszzGkz = normConfig.getCszzGkz();
+        //氨氮的标准值和管控值
+        BigDecimal csadBzz = normConfig.getCsadBzz();
+        BigDecimal csadGkz = normConfig.getCsadGkz();
+
+        BigDecimal jsSlq = tXinyiIndustry.getJsSlq();
+        BigDecimal jsslSjz = normConfig.getJsslSjz();
+
+        //#1好氧硝酸盐
+        if(!Objects.isNull(no3Hlj1Jqr) && no3Hlj1Jqr.compareTo(BigDecimal.ZERO) > 0 && xsy1Execute){
+            if(!Objects.isNull(cszzBzz)){
+                handleXinYiWarningsRobotOrigin(cszzBzz, no3Hlj1Jqr, cszzGkz, ROBOT_XSY_1.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
+            }
+        }
+
+        //#2好氧硝酸盐
+        if(!Objects.isNull(no3Hlj2Jqr) && no3Hlj2Jqr.compareTo(BigDecimal.ZERO) > 0 && xsy2Execute){
+            if(!Objects.isNull(cszzBzz)){
+                handleXinYiWarningsRobotOrigin(cszzBzz, no3Hlj2Jqr, cszzGkz, ROBOT_XSY_2.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
+            }
+        }
+
+        //总磷
+        if(!Objects.isNull(tpRccJqr) && tpRccJqr.compareTo(BigDecimal.ZERO) > 0 && ecczlxyExecute){
+            BigDecimal csTp = tpRccJqr.divide(ROBOT_HY_DIVIDE, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+            BigDecimal cszlBzz = normConfig.getCszlBzz();
+            BigDecimal cszlGkz = normConfig.getCszlGkz();
+            if(!Objects.isNull(cszlBzz)){
+                handleXinYiWarningsRobotOrigin(cszlBzz, csTp, cszlGkz, ROBOT_ECCZLSY.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTp(), jsslSjz, normConfig.getJszlSjz()));
+            }
+        }
+
+
+        //2#缺氧出-硝酸盐
+        if(!Objects.isNull(csadBzz) && csADExecute){
+            handleXinYiWarningsRobotOrigin(csadBzz, divide, csadGkz, ROBOT_CS_AD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsNh3(), jsslSjz, normConfig.getJsadSjz()));
+        }
+
     }
 
     private void robotOriginWarning(TXinyiRobot tXinyiRobot, TXinyiNormConfig normConfig, TXinyiIndustry tXinyiIndustry) {
@@ -4180,7 +4312,7 @@ public class AsyncTask {
                     warningRecordYCSG.setType(0);
                     warningRecordYCSG.setCategory(category);
                     warningRecordYCSG.setTime(nowDate);
-                    warningRecordYCSG.setReason(BusinessEnum.WarningSymbolEnum.SJYC_YCSG.getMsg());
+                    warningRecordYCSG.setReason(category + BusinessEnum.WarningSymbolEnum.SJYC_YCSG.getMsg());
                     warningRecordYCSG.setWaterType(BusinessEnum.WaterTypeEnum.CS.getCode());
                     warningRecordYCSG.setSymbol(BusinessEnum.WarningSymbolEnum.SJYC_YCSG.getCode());
                     warningRecordYCSG.setCreateBy(WARNING_DEFAULT_CREATE);
@@ -4217,7 +4349,7 @@ public class AsyncTask {
                     warningRecordYCPD.setType(0);
                     warningRecordYCPD.setCategory(category);
                     warningRecordYCPD.setTime(nowDate);
-                    warningRecordYCPD.setReason(BusinessEnum.WarningSymbolEnum.SJYC_YCPD.getMsg());
+                    warningRecordYCPD.setReason(category + BusinessEnum.WarningSymbolEnum.SJYC_YCPD.getMsg());
                     warningRecordYCPD.setWaterType(BusinessEnum.WaterTypeEnum.CS.getCode());
                     warningRecordYCPD.setSymbol(BusinessEnum.WarningSymbolEnum.SJYC_YCPD.getCode());
                     warningRecordYCPD.setCreateBy(WARNING_DEFAULT_CREATE);
@@ -4278,7 +4410,7 @@ public class AsyncTask {
             tXinyiWarningRecord = null;//这种的无需处理
         }
         //当前状态正常 需要查询历史有无正在报警的数据,如果有,将报警状态改完2(系统自动关闭)
-        List<TXinyiWarningRecord> tXinyiWarningRecords = this.xinyiWarningRecordMapper.selectTXinyiWarningRecordList(TXinyiWarningRecord.builder().delFlag(0).type(0).category(category).warningStatus(0).build());
+        List<TXinyiWarningRecord> tXinyiWarningRecords = this.xinyiWarningRecordMapper.selectTXinyiWarningRecordList(TXinyiWarningRecord.builder().delFlag(0).type(0).category(category).status(0).build());
         if(Objects.isNull(tXinyiWarningRecord)){//数据正常,无告警信息
             if(!CollectionUtils.isEmpty(tXinyiWarningRecords)){
                 log.info( "{}:现在恢复正常,历史报警数据为{}", category,JSON.toJSONString(tXinyiWarningRecords));