Sfoglia il codice sorgente

本地决策内容调整-改成markdown格式 判断异常升高逻辑调整,不再连续2个小时超标

王苗苗 3 settimane fa
parent
commit
a2826da171

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

@@ -423,21 +423,65 @@ public class MyConstants {
     public static final String LOGIN_SECRET_KEY = "qwertasdfg159753";
 
     //断点且多个水质都发生断点解决方案
+    //2025年03月06日09:49:32 方案改成markdown格式
     public static final String SINGLE_BREAKPOINT_ANSWER_PREFIX = "数据发生断点问题,经排查网络连接没有问题,但可能是现场的";
     public static final String SINGLE_BREAKPOINT_ANSWER_SUFFIX = "仪表出现了故障,或者仪表的数据输出模块可能存在问题。这些问题可能导致仪表无法正确传输数据,需要检查仪表及其连接部分,确保数据能够正常采集和传输。";
+    public static final String SINGLE_BREAKPOINT_ANSWER_REPLACE = "## 解决方案 ##\n" +
+            "## 一、数据表现 ##\n" +
+            "**@@@0浓度**:`0`mg/L\n" +
+            "**@@@0变化趋势**:连续发生数据断点/缺失;\n" +
+            "## 二、原因分析 ##\n" +
+            "@@@0在线仪表发生数据断点缺失问题,相关其他仪表数据均正常变化,排除数据传输和组态软件问题。定位为@@@0仪表可能存在故障。\n" +
+            "## 三、解决方案##\n" +
+            "建议检查@@@0仪表是否有故障情况,同时检查仪表的输出模块是否工作正常,确保数据的采集和传输。";
 
     public static final String MORE_BREAKPOINT_ANSWER = "数据发生断点问题,经排查可能是中控上位机系统出现了故障,或者数据传输网络和相关设备存在问题,也有可能是仪表站房发生了停电故障。这些因素都可能影响系统的正常运行,建议检查上位机系统、网络设备以及仪表站房的电力供应,确保各个环节都正常工作。";
 
+    public static final String MORE_BREAKPOINT_ANSWER_REPLACE = "## 解决方案 ##\n" +
+            "## 一、数据表现 ##\n" +
+            "**@@@0浓度**:`0`mg/L\n" +
+            "**@@@0变化趋势**:连续发生数据断点/缺失;\n" +
+            "## 二、原因分析 ##\n" +
+            "@@@0在线仪表发生数据断点缺失问题,相关其他仪表数据也发现问题。定位为数据传输网络或相关设备出现了问题,或者中控上位机系统本身存在故障。\n" +
+            "## 三、解决方案##\n" +
+            "建议检查网络连接、设备状态以及中控上位机系统,确保它们正常工作以避免数据丢失或系统故障。";
+
+
     public static final String SINGLE_NO_CHANGE_ANSWER_ONE = "数据发生连续不变,经排查";
     public static final String SINGLE_NO_CHANGE_ANSWER_TWO = "仪表可能存在堵塞或故障,或者仪表的数据输出模块可能出现问题,这可能导致数据无法正常传输。建议检查";
     public static final String SINGLE_NO_CHANGE_ANSWER_THREE = "仪表是否有堵塞情况,同时检查仪表的输出模块是否工作正常,确保数据的准确采集和传输。";
 
+    public static final String SINGLE_NO_CHANGE_ANSWER_REPLACE = "## 解决方案 ##\n" +
+            "## 一、数据表现 ##\n" +
+            "**@@@0浓度**:`0.17`mg/L\n" +
+            "**@@@0变化趋势**:连续多个时段数据不变;\n" +
+            "## 二、原因分析 ##\n" +
+            "@@@0在线仪表连续数据不变,相关其他仪表数据均正常变化,排除数据传输和组态软件问题。定位为@@@0仪表可能存在堵塞或故障。\n" +
+            "## 三、解决方案##\n" +
+            "建议检查@@@0仪表是否有堵塞情况,同时检查仪表的输出模块是否工作正常,确保数据的准确采集和传输。";
+
     public static final String MORE_NO_CHANGE_ANSWER = "数据发生连续不变,经排查可能是数据传输网络或相关设备出现了问题,或者中控上位机系统本身存在故障。这些问题可能影响数据的正常传输和系统的稳定运行。建议检查网络连接、设备状态以及中控上位机系统,确保它们正常工作以避免数据丢失或系统故障。";
 
+    public static final String MORE_NO_CHANGE_ANSWER_REPLACE = "## 解决方案 ##\n" +
+            "## 一、数据表现 ##\n" +
+            "**@@@0浓度**:`@@@1`mg/L\n" +
+            "**@@@0变化趋势**:连续多个时段数据不变;\n" +
+            "## 二、原因分析 ##\n" +
+            "@@@0在线仪表连续数据不变,相关其他仪表数据也发现问题。定位为数据传输网络或相关设备出现了问题,或者中控上位机系统本身存在故障。\n" +
+            "## 三、解决方案##\n" +
+            "建议检查网络连接、设备状态以及中控上位机系统,确保它们正常工作以避免数据丢失或系统故障。\n";
 
     public static final String YCSG_ANSWER_ONE = "水质数据发生突变,突变增幅";
     public static final String YCSG_ANSWER_TWO = ",突变前数据";
     public static final String YCSG_ANSWER_THREE = ",建议检查仪表状态或进行人工取样校核。如果问题已经得到解决,请标记为已解决状态,无需进一步处理。但仍建议继续观察,以确保问题不再复发。";
+    public static final String YCSG_ANSWER_REPLACE = "## 解决方案 ##\n" +
+            "## 一、数据表现 ##\n" +
+            "**@@@0浓度**:`@@@1`mg/L\n" +
+            "**@@@0变化趋势**:连续发生单点突变;\n" +
+            "## 二、原因分析 ##\n" +
+            "@@@0在线仪表水质数据发生突变,突变增幅{@@@2};\n" +
+            "## 三、解决方案##\n" +
+            "建议检查仪表状态或进行人工取样校核。如果问题已经得到解决,请标记为已解决状态,无需进一步处理。但仍建议继续观察,以确保问题不再复发。";
 
     public static final double YCSG_VAL_CONF = 0.5D;
     public static final double YCPD_VAL_CONF = 0.7D;

+ 228 - 80
slibra-quartz/src/main/java/com/slibra/quartz/task/AsyncTask.java

@@ -1883,7 +1883,7 @@ public class AsyncTask {
                     tXinyiWarningRecord.setSymbol(BusinessEnum.WarningSymbolEnum.YBGZ_LX_MORE.getCode());
                     this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
                     //同时处理决策 不用调用大模型,本地处理问答
-                    addChatRecordByBreakPointsMore(tXinyiWarningRecord, tXinyiIndustry, normConfig);
+                    addChatRecordByNoChangeMore(tXinyiWarningRecord, tXinyiIndustry, normConfig);
                 }
             }else{//之前存在报警了 所以需要2个集合数据进行匹配,如果新的和原来的一样则不用做任何操作【持续报警】;如果不一样,则新的要报警,老报警要关闭
                 List<TXinyiWarningRecord> noChangeListNew = new ArrayList<>(noChangeList);//断点集合[需要新增的]
@@ -1928,7 +1928,7 @@ public class AsyncTask {
                         tXinyiWarningRecord.setSymbol(BusinessEnum.WarningSymbolEnum.YBGZ_LX_MORE.getCode());
                         this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(tXinyiWarningRecord);
                         //同时处理决策 不用调用大模型,本地处理问答
-                        addChatRecordByBreakPointsMore(tXinyiWarningRecord, tXinyiIndustry, normConfig);
+                        addChatRecordByNoChangeMore(tXinyiWarningRecord, tXinyiIndustry, normConfig);
                     }
                 }
                 //关闭老的报警
@@ -3375,104 +3375,183 @@ public class AsyncTask {
      *
      * 【工业库异常升高】先判断该指标是否超过最大值,如果超过了,返回对应的超过的值; 如果没有超标,返回null。
      * 一个字段返回用作2个地方
+     * 2025年03月06日10:35:30 判断是否超标,不再获取最近3个小时;最近2个小时比较即可。
      * @param currentVal
      * @param category
      * @param industryList
      * @return
      */
     private BigDecimal existsYCSG(BigDecimal currentVal, String category, List<TXinyiIndustry> industryList) {
+//        BigDecimal result = null;//默认不超标
+//        TXinyiIndustry tXinyiIndustry1 = industryList.get(INDEX_1);
+//        TXinyiIndustry tXinyiIndustry2 = industryList.get(INDEX_2);
+//        BigDecimal compareVal = BigDecimal.valueOf(YCSG_VAL_CONF);
+//        if(BusinessEnum.WarningCategoryEnum.CS_COD.getCode().equals(category)){
+//            BigDecimal csCod1 = tXinyiIndustry1.getCsCod();
+//            BigDecimal csCod2 = tXinyiIndustry2.getCsCod();
+//            if(!Objects.isNull(currentVal) && !Objects.isNull(csCod1) && !Objects.isNull(csCod2)){
+//                BigDecimal divide1 = currentVal.subtract(csCod1).divide(csCod1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                BigDecimal divide2 = csCod1.subtract(csCod2).divide(csCod2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+//                    result = divide1;
+//            }
+//        }else if(BusinessEnum.WarningCategoryEnum.CS_SS.getCode().equals(category)){
+//            BigDecimal csSs1 = tXinyiIndustry1.getCsSs();
+//            BigDecimal csSs2 = tXinyiIndustry2.getCsSs();
+//            if(!Objects.isNull(currentVal) && !Objects.isNull(csSs1) && !Objects.isNull(csSs2)){
+//                BigDecimal divide1 = currentVal.subtract(csSs1).divide(csSs1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                BigDecimal divide2 = csSs1.subtract(csSs2).divide(csSs2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+//                    result = divide1;
+//            }
+//        }else if(BusinessEnum.WarningCategoryEnum.CS_ZD.getCode().equals(category)){
+//            BigDecimal csTn1 = tXinyiIndustry1.getCsTn();
+//            BigDecimal csTn2 = tXinyiIndustry2.getCsTn();
+//            if(!Objects.isNull(currentVal) && !Objects.isNull(csTn1)){
+//                BigDecimal divide1 = currentVal.subtract(csTn1).divide(csTn1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                BigDecimal divide2 = csTn1.subtract(csTn2).divide(csTn2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+//                    result = divide1;
+//            }
+//        }else if(BusinessEnum.WarningCategoryEnum.CS_ZL.getCode().equals(category)){
+//            BigDecimal csTp1 = tXinyiIndustry1.getCsTp();
+//            BigDecimal csTp2 = tXinyiIndustry2.getCsTp();
+//            if(!Objects.isNull(currentVal) && !Objects.isNull(csTp1)){
+//                BigDecimal divide1 = currentVal.subtract(csTp1).divide(csTp1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                BigDecimal divide2 = csTp1.subtract(csTp2).divide(csTp2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+//                    result = divide1;
+//            }
+//        }else if(BusinessEnum.WarningCategoryEnum.CS_AD.getCode().equals(category)){
+//            BigDecimal csNh31 = tXinyiIndustry1.getCsNh3();
+//            BigDecimal csNh32 = tXinyiIndustry2.getCsNh3();
+//            if(!Objects.isNull(currentVal) && !Objects.isNull(csNh31)){
+//                BigDecimal divide1 = currentVal.subtract(csNh31).divide(csNh31, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                BigDecimal divide2 = csNh31.subtract(csNh32).divide(csNh32, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+//                    result = divide1;
+//            }
+//        }else if(BusinessEnum.WarningCategoryEnum.JS_COD.getCode().equals(category)){
+//            BigDecimal jsCod1 = tXinyiIndustry1.getJsCod();
+//            BigDecimal jsCod2 = tXinyiIndustry2.getJsCod();
+//            if(!Objects.isNull(currentVal) && !Objects.isNull(jsCod1)){
+//                BigDecimal divide1 = currentVal.subtract(jsCod1).divide(jsCod1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                BigDecimal divide2 = jsCod1.subtract(jsCod2).divide(jsCod2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+//                    result = divide1;
+//            }
+//        }else if(BusinessEnum.WarningCategoryEnum.JS_SS.getCode().equals(category)){
+//            BigDecimal jsSs1 = tXinyiIndustry1.getJsSs();
+//            BigDecimal jsSs2 = tXinyiIndustry2.getJsSs();
+//            if(!Objects.isNull(currentVal) && !Objects.isNull(jsSs1)){
+//                BigDecimal divide1 = currentVal.subtract(jsSs1).divide(jsSs1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                BigDecimal divide2 = jsSs1.subtract(jsSs2).divide(jsSs2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+//                    result = divide1;
+//            }
+//        }else if(BusinessEnum.WarningCategoryEnum.JS_ZD.getCode().equals(category)){
+//            BigDecimal jsTn1 = tXinyiIndustry1.getJsTn();
+//            BigDecimal jsTn2 = tXinyiIndustry2.getJsTn();
+//            if(!Objects.isNull(currentVal) && !Objects.isNull(jsTn1)){
+//                BigDecimal divide1 = currentVal.subtract(jsTn1).divide(jsTn1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                BigDecimal divide2 = jsTn1.subtract(jsTn2).divide(jsTn2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+//                    result = divide1;
+//            }
+//        }else if(BusinessEnum.WarningCategoryEnum.JS_ZL.getCode().equals(category)){
+//            BigDecimal jsTp1 = tXinyiIndustry1.getJsTp();
+//            BigDecimal jsTp2 = tXinyiIndustry2.getJsTp();
+//            if(!Objects.isNull(currentVal) && !Objects.isNull(jsTp1)){
+//                BigDecimal divide1 = currentVal.subtract(jsTp1).divide(jsTp1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                BigDecimal divide2 = jsTp1.subtract(jsTp2).divide(jsTp2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+//                    result = divide1;
+//            }
+//        }else if(BusinessEnum.WarningCategoryEnum.JS_AD.getCode().equals(category)){
+//            BigDecimal jsNh31 = tXinyiIndustry1.getJsNh3();
+//            BigDecimal jsNh32 = tXinyiIndustry2.getJsNh3();
+//            if(!Objects.isNull(currentVal) && !Objects.isNull(jsNh31)){
+//                BigDecimal divide1 = currentVal.subtract(jsNh31).divide(jsNh31, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                BigDecimal divide2 = jsNh31.subtract(jsNh32).divide(jsNh32, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+//                    result = divide1;
+//            }
+//        }else{
+//            log.error("暂时还不支持的报警类型~~~~");
+//        }
+//        return result;
+
         BigDecimal result = null;//默认不超标
         TXinyiIndustry tXinyiIndustry1 = industryList.get(INDEX_1);
-        TXinyiIndustry tXinyiIndustry2 = industryList.get(INDEX_2);
         BigDecimal compareVal = BigDecimal.valueOf(YCSG_VAL_CONF);
         if(BusinessEnum.WarningCategoryEnum.CS_COD.getCode().equals(category)){
             BigDecimal csCod1 = tXinyiIndustry1.getCsCod();
-            BigDecimal csCod2 = tXinyiIndustry2.getCsCod();
-            if(!Objects.isNull(currentVal) && !Objects.isNull(csCod1) && !Objects.isNull(csCod2)){
+            if(!Objects.isNull(currentVal) && !Objects.isNull(csCod1)){
                 BigDecimal divide1 = currentVal.subtract(csCod1).divide(csCod1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                BigDecimal divide2 = csCod1.subtract(csCod2).divide(csCod2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+                if(divide1.compareTo(compareVal) > 0)
                     result = divide1;
             }
         }else if(BusinessEnum.WarningCategoryEnum.CS_SS.getCode().equals(category)){
             BigDecimal csSs1 = tXinyiIndustry1.getCsSs();
-            BigDecimal csSs2 = tXinyiIndustry2.getCsSs();
-            if(!Objects.isNull(currentVal) && !Objects.isNull(csSs1) && !Objects.isNull(csSs2)){
+            if(!Objects.isNull(currentVal) && !Objects.isNull(csSs1)){
                 BigDecimal divide1 = currentVal.subtract(csSs1).divide(csSs1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                BigDecimal divide2 = csSs1.subtract(csSs2).divide(csSs2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+                if(divide1.compareTo(compareVal) > 0)
                     result = divide1;
             }
         }else if(BusinessEnum.WarningCategoryEnum.CS_ZD.getCode().equals(category)){
             BigDecimal csTn1 = tXinyiIndustry1.getCsTn();
-            BigDecimal csTn2 = tXinyiIndustry2.getCsTn();
             if(!Objects.isNull(currentVal) && !Objects.isNull(csTn1)){
                 BigDecimal divide1 = currentVal.subtract(csTn1).divide(csTn1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                BigDecimal divide2 = csTn1.subtract(csTn2).divide(csTn2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+                if(divide1.compareTo(compareVal) > 0)
                     result = divide1;
             }
         }else if(BusinessEnum.WarningCategoryEnum.CS_ZL.getCode().equals(category)){
             BigDecimal csTp1 = tXinyiIndustry1.getCsTp();
-            BigDecimal csTp2 = tXinyiIndustry2.getCsTp();
             if(!Objects.isNull(currentVal) && !Objects.isNull(csTp1)){
                 BigDecimal divide1 = currentVal.subtract(csTp1).divide(csTp1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                BigDecimal divide2 = csTp1.subtract(csTp2).divide(csTp2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+                if(divide1.compareTo(compareVal) > 0)
                     result = divide1;
             }
         }else if(BusinessEnum.WarningCategoryEnum.CS_AD.getCode().equals(category)){
             BigDecimal csNh31 = tXinyiIndustry1.getCsNh3();
-            BigDecimal csNh32 = tXinyiIndustry2.getCsNh3();
             if(!Objects.isNull(currentVal) && !Objects.isNull(csNh31)){
                 BigDecimal divide1 = currentVal.subtract(csNh31).divide(csNh31, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                BigDecimal divide2 = csNh31.subtract(csNh32).divide(csNh32, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+                if(divide1.compareTo(compareVal) > 0)
                     result = divide1;
             }
         }else if(BusinessEnum.WarningCategoryEnum.JS_COD.getCode().equals(category)){
             BigDecimal jsCod1 = tXinyiIndustry1.getJsCod();
-            BigDecimal jsCod2 = tXinyiIndustry2.getJsCod();
             if(!Objects.isNull(currentVal) && !Objects.isNull(jsCod1)){
                 BigDecimal divide1 = currentVal.subtract(jsCod1).divide(jsCod1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                BigDecimal divide2 = jsCod1.subtract(jsCod2).divide(jsCod2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+                if(divide1.compareTo(compareVal) > 0)
                     result = divide1;
             }
         }else if(BusinessEnum.WarningCategoryEnum.JS_SS.getCode().equals(category)){
             BigDecimal jsSs1 = tXinyiIndustry1.getJsSs();
-            BigDecimal jsSs2 = tXinyiIndustry2.getJsSs();
             if(!Objects.isNull(currentVal) && !Objects.isNull(jsSs1)){
                 BigDecimal divide1 = currentVal.subtract(jsSs1).divide(jsSs1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                BigDecimal divide2 = jsSs1.subtract(jsSs2).divide(jsSs2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+                if(divide1.compareTo(compareVal) > 0)
                     result = divide1;
             }
         }else if(BusinessEnum.WarningCategoryEnum.JS_ZD.getCode().equals(category)){
             BigDecimal jsTn1 = tXinyiIndustry1.getJsTn();
-            BigDecimal jsTn2 = tXinyiIndustry2.getJsTn();
             if(!Objects.isNull(currentVal) && !Objects.isNull(jsTn1)){
                 BigDecimal divide1 = currentVal.subtract(jsTn1).divide(jsTn1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                BigDecimal divide2 = jsTn1.subtract(jsTn2).divide(jsTn2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+                if(divide1.compareTo(compareVal) > 0)
                     result = divide1;
             }
         }else if(BusinessEnum.WarningCategoryEnum.JS_ZL.getCode().equals(category)){
             BigDecimal jsTp1 = tXinyiIndustry1.getJsTp();
-            BigDecimal jsTp2 = tXinyiIndustry2.getJsTp();
             if(!Objects.isNull(currentVal) && !Objects.isNull(jsTp1)){
                 BigDecimal divide1 = currentVal.subtract(jsTp1).divide(jsTp1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                BigDecimal divide2 = jsTp1.subtract(jsTp2).divide(jsTp2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+                if(divide1.compareTo(compareVal) > 0)
                     result = divide1;
             }
         }else if(BusinessEnum.WarningCategoryEnum.JS_AD.getCode().equals(category)){
             BigDecimal jsNh31 = tXinyiIndustry1.getJsNh3();
-            BigDecimal jsNh32 = tXinyiIndustry2.getJsNh3();
             if(!Objects.isNull(currentVal) && !Objects.isNull(jsNh31)){
                 BigDecimal divide1 = currentVal.subtract(jsNh31).divide(jsNh31, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                BigDecimal divide2 = jsNh31.subtract(jsNh32).divide(jsNh32, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+                if(divide1.compareTo(compareVal) > 0)
                     result = divide1;
             }
         }else{
@@ -3488,41 +3567,127 @@ public class AsyncTask {
      *
      * 【化验室异常升高】先判断该指标是否超过最大值,如果超过了,返回对应的超过的值; 如果没有超标,返回null。
      * 一个字段返回用作2个地方
+     * 2025年03月06日10:40:54 不再用连续2个小时超标,只判断当前值和上个小时的值比较
      * @param currentVal
      * @param category
      * @param tXinyiRobots
      * @return
      */
     private BigDecimal existsRobotYCSG(BigDecimal currentVal, String category, List<TXinyiRobot> tXinyiRobots) {
+//        BigDecimal result = null;//默认不超标
+//        TXinyiRobot tXinyiRobot1 = tXinyiRobots.get(INDEX_1);
+//        TXinyiRobot tXinyiRobot2 = tXinyiRobots.get(INDEX_2);
+//        BigDecimal compareVal = BigDecimal.valueOf(YCSG_VAL_CONF);
+//        if(BusinessEnum.WarningCategoryEnum.ROBOT_XSY_1.getCode().equals(category)){
+//            BigDecimal no3Hlj1Jqr1 = tXinyiRobot1.getNo3Hlj1Jqr();
+//            BigDecimal no3Hlj1Jqr2 = tXinyiRobot2.getNo3Hlj1Jqr();
+//            if(!Objects.isNull(currentVal) && !Objects.isNull(no3Hlj1Jqr1) && !Objects.isNull(no3Hlj1Jqr2)){
+//                BigDecimal divide1 = currentVal.subtract(no3Hlj1Jqr1).divide(no3Hlj1Jqr1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                BigDecimal divide2 = no3Hlj1Jqr1.subtract(no3Hlj1Jqr2).divide(no3Hlj1Jqr2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+//                    result = divide1;
+//            }
+//        }else if(BusinessEnum.WarningCategoryEnum.ROBOT_XSY_2.getCode().equals(category)){
+//            BigDecimal no3Hlj2Jqr1 = tXinyiRobot1.getNo3Hlj2Jqr();
+//            BigDecimal no3Hlj2Jqr2 = tXinyiRobot2.getNo3Hlj2Jqr();
+//            if(!Objects.isNull(currentVal) && !Objects.isNull(no3Hlj2Jqr1) && !Objects.isNull(no3Hlj2Jqr2)){
+//                BigDecimal divide1 = currentVal.subtract(no3Hlj2Jqr1).divide(no3Hlj2Jqr1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                BigDecimal divide2 = no3Hlj2Jqr1.subtract(no3Hlj2Jqr2).divide(no3Hlj2Jqr2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+//                    result = divide1;
+//            }
+//        }else if(BusinessEnum.WarningCategoryEnum.ROBOT_ECCZLSY.getCode().equals(category)){
+//            BigDecimal tpRccJqr1 = tXinyiRobot1.getTpRccJqr();
+//            BigDecimal tpRccJqr2 = tXinyiRobot2.getTpRccJqr();
+//            if(!Objects.isNull(currentVal) && !Objects.isNull(tpRccJqr1) && !Objects.isNull(tpRccJqr2)){
+//                BigDecimal divide1 = currentVal.subtract(tpRccJqr1).divide(tpRccJqr1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                BigDecimal divide2 = tpRccJqr1.subtract(tpRccJqr2).divide(tpRccJqr2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+//                    result = divide1;
+//            }
+//        }else if(BusinessEnum.WarningCategoryEnum.ROBOT_CS_AD.getCode().equals(category)){//2025年02月25日16:23:08 合并一个指标:出水氨氮 通过计算获得
+//            //计算得到对应的值
+//            //计算1(1池)
+//            BigDecimal no3Qyc1Jqr11 = tXinyiRobot1.getNo3Qyc1Jqr();
+//            BigDecimal nh31Jqr11 = tXinyiRobot1.getNh31Jqr();
+//            BigDecimal no3Hlj1Jqr11 = tXinyiRobot1.getNo3Hlj1Jqr();
+//            if(Objects.isNull(no3Qyc1Jqr11))
+//                no3Qyc1Jqr11 = BigDecimal.ZERO;
+//            if(Objects.isNull(nh31Jqr11))
+//                nh31Jqr11 = BigDecimal.ZERO;
+//            if(Objects.isNull(no3Hlj1Jqr11))
+//                no3Hlj1Jqr11 = BigDecimal.ZERO;
+//            BigDecimal anDan11 = no3Qyc1Jqr11.add(nh31Jqr11).subtract(no3Hlj1Jqr11);
+//            //计算1(2池)
+//            BigDecimal no3Qyc1Jqr12 = tXinyiRobot1.getNo3Qyc2Jqr();
+//            BigDecimal nh31Jqr12 = tXinyiRobot1.getNh32Jqr();
+//            BigDecimal no3Hlj1Jqr12 = tXinyiRobot1.getNo3Hlj2Jqr();
+//            if(Objects.isNull(no3Qyc1Jqr12))
+//                no3Qyc1Jqr12 = BigDecimal.ZERO;
+//            if(Objects.isNull(nh31Jqr12))
+//                nh31Jqr12 = BigDecimal.ZERO;
+//            if(Objects.isNull(no3Hlj1Jqr12))
+//                no3Hlj1Jqr12 = BigDecimal.ZERO;
+//            BigDecimal anDan12 = no3Qyc1Jqr12.add(nh31Jqr12).subtract(no3Hlj1Jqr12);
+//            BigDecimal anDan1 = anDan11.add(anDan12).divide(DECIMAL_2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//
+//            //计算2(1池)
+//            BigDecimal no3Qyc1Jqr21 = tXinyiRobot2.getNo3Qyc1Jqr();
+//            BigDecimal nh31Jqr21 = tXinyiRobot2.getNh31Jqr();
+//            BigDecimal no3Hlj1Jqr21 = tXinyiRobot2.getNo3Hlj1Jqr();
+//            if(Objects.isNull(no3Qyc1Jqr21))
+//                no3Qyc1Jqr21 = BigDecimal.ZERO;
+//            if(Objects.isNull(nh31Jqr21))
+//                nh31Jqr21 = BigDecimal.ZERO;
+//            if(Objects.isNull(no3Hlj1Jqr21))
+//                no3Hlj1Jqr21 = BigDecimal.ZERO;
+//            BigDecimal anDan21 = no3Qyc1Jqr21.add(nh31Jqr21).subtract(no3Hlj1Jqr21);
+//            //计算2(2池)
+//            BigDecimal no3Qyc1Jqr22 = tXinyiRobot2.getNo3Qyc2Jqr();
+//            BigDecimal nh31Jqr22 = tXinyiRobot2.getNh32Jqr();
+//            BigDecimal no3Hlj1Jqr22 = tXinyiRobot2.getNo3Hlj2Jqr();
+//            if(Objects.isNull(no3Qyc1Jqr22))
+//                no3Qyc1Jqr22 = BigDecimal.ZERO;
+//            if(Objects.isNull(nh31Jqr22))
+//                nh31Jqr22 = BigDecimal.ZERO;
+//            if(Objects.isNull(no3Hlj1Jqr22))
+//                no3Hlj1Jqr22 = BigDecimal.ZERO;
+//            BigDecimal anDan22 = no3Qyc1Jqr22.add(nh31Jqr22).subtract(no3Hlj1Jqr22);
+//            BigDecimal anDan2 = anDan21.add(anDan22).divide(DECIMAL_2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//
+//            if(!Objects.isNull(currentVal) && !Objects.isNull(anDan1) && !Objects.isNull(anDan2)){
+//                BigDecimal divide1 = currentVal.subtract(anDan1).divide(anDan1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                BigDecimal divide2 = anDan1.subtract(anDan2).divide(anDan2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
+//                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+//                    result = divide1;
+//            }
+//        }else{
+//            log.error("化验室暂时还不支持的报警类型~~~~");
+//        }
+//        return result;
+
         BigDecimal result = null;//默认不超标
         TXinyiRobot tXinyiRobot1 = tXinyiRobots.get(INDEX_1);
-        TXinyiRobot tXinyiRobot2 = tXinyiRobots.get(INDEX_2);
         BigDecimal compareVal = BigDecimal.valueOf(YCSG_VAL_CONF);
         if(BusinessEnum.WarningCategoryEnum.ROBOT_XSY_1.getCode().equals(category)){
             BigDecimal no3Hlj1Jqr1 = tXinyiRobot1.getNo3Hlj1Jqr();
-            BigDecimal no3Hlj1Jqr2 = tXinyiRobot2.getNo3Hlj1Jqr();
-            if(!Objects.isNull(currentVal) && !Objects.isNull(no3Hlj1Jqr1) && !Objects.isNull(no3Hlj1Jqr2)){
+            if(!Objects.isNull(currentVal) && !Objects.isNull(no3Hlj1Jqr1)){
                 BigDecimal divide1 = currentVal.subtract(no3Hlj1Jqr1).divide(no3Hlj1Jqr1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                BigDecimal divide2 = no3Hlj1Jqr1.subtract(no3Hlj1Jqr2).divide(no3Hlj1Jqr2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+                if(divide1.compareTo(compareVal) > 0)
                     result = divide1;
             }
         }else if(BusinessEnum.WarningCategoryEnum.ROBOT_XSY_2.getCode().equals(category)){
             BigDecimal no3Hlj2Jqr1 = tXinyiRobot1.getNo3Hlj2Jqr();
-            BigDecimal no3Hlj2Jqr2 = tXinyiRobot2.getNo3Hlj2Jqr();
-            if(!Objects.isNull(currentVal) && !Objects.isNull(no3Hlj2Jqr1) && !Objects.isNull(no3Hlj2Jqr2)){
+            if(!Objects.isNull(currentVal) && !Objects.isNull(no3Hlj2Jqr1) ){
                 BigDecimal divide1 = currentVal.subtract(no3Hlj2Jqr1).divide(no3Hlj2Jqr1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                BigDecimal divide2 = no3Hlj2Jqr1.subtract(no3Hlj2Jqr2).divide(no3Hlj2Jqr2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+                if(divide1.compareTo(compareVal) > 0)
                     result = divide1;
             }
         }else if(BusinessEnum.WarningCategoryEnum.ROBOT_ECCZLSY.getCode().equals(category)){
             BigDecimal tpRccJqr1 = tXinyiRobot1.getTpRccJqr();
-            BigDecimal tpRccJqr2 = tXinyiRobot2.getTpRccJqr();
-            if(!Objects.isNull(currentVal) && !Objects.isNull(tpRccJqr1) && !Objects.isNull(tpRccJqr2)){
+            if(!Objects.isNull(currentVal) && !Objects.isNull(tpRccJqr1)){
                 BigDecimal divide1 = currentVal.subtract(tpRccJqr1).divide(tpRccJqr1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                BigDecimal divide2 = tpRccJqr1.subtract(tpRccJqr2).divide(tpRccJqr2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+                if(divide1.compareTo(compareVal) > 0)
                     result = divide1;
             }
         }else if(BusinessEnum.WarningCategoryEnum.ROBOT_CS_AD.getCode().equals(category)){//2025年02月25日16:23:08 合并一个指标:出水氨氮 通过计算获得
@@ -3551,34 +3716,10 @@ public class AsyncTask {
             BigDecimal anDan12 = no3Qyc1Jqr12.add(nh31Jqr12).subtract(no3Hlj1Jqr12);
             BigDecimal anDan1 = anDan11.add(anDan12).divide(DECIMAL_2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
 
-            //计算2(1池)
-            BigDecimal no3Qyc1Jqr21 = tXinyiRobot2.getNo3Qyc1Jqr();
-            BigDecimal nh31Jqr21 = tXinyiRobot2.getNh31Jqr();
-            BigDecimal no3Hlj1Jqr21 = tXinyiRobot2.getNo3Hlj1Jqr();
-            if(Objects.isNull(no3Qyc1Jqr21))
-                no3Qyc1Jqr21 = BigDecimal.ZERO;
-            if(Objects.isNull(nh31Jqr21))
-                nh31Jqr21 = BigDecimal.ZERO;
-            if(Objects.isNull(no3Hlj1Jqr21))
-                no3Hlj1Jqr21 = BigDecimal.ZERO;
-            BigDecimal anDan21 = no3Qyc1Jqr21.add(nh31Jqr21).subtract(no3Hlj1Jqr21);
-            //计算2(2池)
-            BigDecimal no3Qyc1Jqr22 = tXinyiRobot2.getNo3Qyc2Jqr();
-            BigDecimal nh31Jqr22 = tXinyiRobot2.getNh32Jqr();
-            BigDecimal no3Hlj1Jqr22 = tXinyiRobot2.getNo3Hlj2Jqr();
-            if(Objects.isNull(no3Qyc1Jqr22))
-                no3Qyc1Jqr22 = BigDecimal.ZERO;
-            if(Objects.isNull(nh31Jqr22))
-                nh31Jqr22 = BigDecimal.ZERO;
-            if(Objects.isNull(no3Hlj1Jqr22))
-                no3Hlj1Jqr22 = BigDecimal.ZERO;
-            BigDecimal anDan22 = no3Qyc1Jqr22.add(nh31Jqr22).subtract(no3Hlj1Jqr22);
-            BigDecimal anDan2 = anDan21.add(anDan22).divide(DECIMAL_2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
 
-            if(!Objects.isNull(currentVal) && !Objects.isNull(anDan1) && !Objects.isNull(anDan2)){
+            if(!Objects.isNull(currentVal) && !Objects.isNull(anDan1)){
                 BigDecimal divide1 = currentVal.subtract(anDan1).divide(anDan1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                BigDecimal divide2 = anDan1.subtract(anDan2).divide(anDan2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
-                if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
+                if(divide1.compareTo(compareVal) > 0)
                     result = divide1;
             }
         }else{
@@ -3968,7 +4109,8 @@ public class AsyncTask {
         String showVal = this.buildShowValue(warningRecord, tXinyiIndustry, normConfig, DateUtils.getNowDate());
         chatReq.setShowVal(showVal);//前端展示的数据和提问的数据不一致
         chatReq.setQuestion(BusinessEnum.WarningSymbolEnum.SJYC_YCSG.getMsg());//本地问题
-        chatReq.setAnswer(category + YCSG_ANSWER_ONE + exceedVal.multiply(BigDecimal_100) + "%" + YCSG_ANSWER_TWO + warningRecord.getWarningVal() + YCSG_ANSWER_THREE);
+//        chatReq.setAnswer(category + YCSG_ANSWER_ONE + exceedVal.multiply(BigDecimal_100) + "%" + YCSG_ANSWER_TWO + warningRecord.getWarningVal() + YCSG_ANSWER_THREE);
+        chatReq.setAnswer(YCSG_ANSWER_REPLACE.replaceAll("@@@0", category).replaceAll("@@@1", String.valueOf(warningRecord.getWarningVal())).replaceAll("@@@2", exceedVal.multiply(BigDecimal_100) + "%"));
         chatReq.setWarningId(String.valueOf(warningRecord.getId()));
         chatReq.setCounts(1);//问答次数
 
@@ -3990,7 +4132,8 @@ public class AsyncTask {
         String showVal = this.buildShowValue(warningRecord, tXinyiIndustry, normConfig, DateUtils.getNowDate());
         chatReq.setShowVal(showVal);//前端展示的数据和提问的数据不一致
         chatReq.setQuestion(BusinessEnum.WarningSymbolEnum.YBGZ_LX_SINGLE.getMsg());//本地问题
-        chatReq.setAnswer(SINGLE_NO_CHANGE_ANSWER_ONE + category + SINGLE_NO_CHANGE_ANSWER_TWO + category + SINGLE_NO_CHANGE_ANSWER_THREE);
+//        chatReq.setAnswer(SINGLE_NO_CHANGE_ANSWER_ONE + category + SINGLE_NO_CHANGE_ANSWER_TWO + category + SINGLE_NO_CHANGE_ANSWER_THREE);
+        chatReq.setAnswer(SINGLE_NO_CHANGE_ANSWER_REPLACE.replaceAll("@@@0", category));
         chatReq.setWarningId(String.valueOf(warningRecord.getId()));
         chatReq.setCounts(1);//问答次数
 
@@ -4012,7 +4155,8 @@ public class AsyncTask {
         String showVal = this.buildShowValue(warningRecord, tXinyiIndustry, normConfig, DateUtils.getNowDate());
         chatReq.setShowVal(showVal);//前端展示的数据和提问的数据不一致
         chatReq.setQuestion(BusinessEnum.WarningSymbolEnum.YBGZ_DD_SINGLE.getMsg());//本地问题
-        chatReq.setAnswer(SINGLE_BREAKPOINT_ANSWER_PREFIX + category + SINGLE_BREAKPOINT_ANSWER_SUFFIX);
+//        chatReq.setAnswer(SINGLE_BREAKPOINT_ANSWER_PREFIX + category + SINGLE_BREAKPOINT_ANSWER_SUFFIX);
+        chatReq.setAnswer(SINGLE_BREAKPOINT_ANSWER_REPLACE.replaceAll("@@@0", category));
         chatReq.setWarningId(String.valueOf(warningRecord.getId()));
         chatReq.setCounts(1);//问答次数
 
@@ -4035,7 +4179,8 @@ public class AsyncTask {
         String showVal = this.buildShowValue(tXinyiWarningRecord, tXinyiIndustry, normConfig, DateUtils.getNowDate());
         chatReq.setShowVal(showVal);//前端展示的数据和提问的数据不一致
         chatReq.setQuestion(BusinessEnum.WarningSymbolEnum.YBGZ_LX_MORE.getMsg());//本地问题
-        chatReq.setAnswer(MORE_NO_CHANGE_ANSWER);
+//        chatReq.setAnswer(MORE_NO_CHANGE_ANSWER);
+        chatReq.setAnswer(MORE_NO_CHANGE_ANSWER_REPLACE.replaceAll("@@@0", tXinyiWarningRecord.getCategory()).replaceAll("@@@1", String.valueOf(tXinyiWarningRecord.getWarningVal())));
         chatReq.setWarningId(String.valueOf(tXinyiWarningRecord.getId()));
         chatReq.setCounts(1);//问答次数
 
@@ -4057,7 +4202,8 @@ public class AsyncTask {
         String showVal = this.buildShowValue(tXinyiWarningRecord, tXinyiIndustry, normConfig, DateUtils.getNowDate());
         chatReq.setShowVal(showVal);//前端展示的数据和提问的数据不一致
         chatReq.setQuestion(BusinessEnum.WarningSymbolEnum.YBGZ_DD_MORE_GYK.getMsg());//本地问题
-        chatReq.setAnswer(MORE_BREAKPOINT_ANSWER);
+//        chatReq.setAnswer(MORE_BREAKPOINT_ANSWER);
+        chatReq.setAnswer(MORE_BREAKPOINT_ANSWER_REPLACE.replaceAll("@@@0", tXinyiWarningRecord.getCategory()));
         chatReq.setWarningId(String.valueOf(tXinyiWarningRecord.getId()));
         chatReq.setCounts(1);//问答次数
 
@@ -4070,7 +4216,9 @@ public class AsyncTask {
     public static void main(String[] args) {
         System.out.println(CCCDCHRT_LAST);
         System.out.println(GSLS_LAST);
-        System.out.println(BigDecimal.valueOf(1).subtract(null));
+//        System.out.println(BigDecimal.valueOf(1).subtract(null));
+        String s = "asd@@@1dsa@@@1111@@@1222".replaceAll("@@@1", "!");
+        System.out.println(s);
     }
 
     /**