Browse Source

临时提交

王苗苗 1 month ago
parent
commit
f38c542fd2

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

@@ -194,6 +194,7 @@ public class MyConstants {
     public static final int INDEX_6 = 6;
     public static final int INDEX_7 = 7;
     public static final int INDEX_8 = 8;
+    public static final int INDEX_9 = 9;
     public static final int INT_2 = 2;
     public static final int INT_3 = 3;
     public static final int INT_4 = 4;
@@ -201,6 +202,7 @@ public class MyConstants {
     public static final int INT_7 = 7;
     public static final int INT_8 = 8;
     public static final int INT_9 = 9;
+    public static final int INT_10 = 10;
     public static final int INT_10000 = 10000;//10秒钟
     public static final int MAX_QUESTION_LENGTH = 5000;
 

+ 2 - 1
slibra-common/src/main/java/com/slibra/common/enums/BusinessEnum.java

@@ -442,7 +442,8 @@ public class BusinessEnum {
 
         CBZZ(0, "超标准值"),
         CGKZ(1, "超管控值"),
-        YBGZ_DD_SINGLE(2, "仪表故障 - 断点"),
+//        YBGZ_DD_SINGLE(2, "仪表故障 - 断点"),
+        YBGZ_DD_SINGLE(2, "仪表故障"),
         YBGZ_DD_MORE_GYK(3, "仪表故障 - 断点"),
         YBGZ_DD_MORE_HYS(4, "仪表故障 - 断点"),
         YBGZ_LX_SINGLE(5, "仪表故障 - 连续不变"),

+ 251 - 22
slibra-quartz/src/main/java/com/slibra/quartz/task/AsyncTask.java

@@ -44,6 +44,7 @@ import java.util.*;
 import java.util.stream.Collectors;
 
 import static com.slibra.common.constant.MyConstants.*;
+import static com.slibra.common.constant.MyConstants.INDEX_5;
 import static com.slibra.common.enums.BusinessEnum.BigModelWarningTypeRemarkEnum.*;
 import static com.slibra.common.enums.BusinessEnum.WarningCategoryEnum.*;
 
@@ -3991,6 +3992,113 @@ public class AsyncTask {
 
 
 
+    /**
+     * 2025年04月21日16:07:55 化验室的设备故障报警逻辑调整: 触发条件:连续6小时以上数值,发生无数据、数据为0、数据相同 -- 出水氨氮
+     * [化验室]通过输入的值 生成对应类型的报警对象(进水)
+     * 化验室只有断点报警,没有连续不变报警(因为化验室数据本身就是4-8个小时一轮 是重复的)
+     * @param tenVals
+     * @param category
+     * @return
+     */
+    private WarningMoreExceed handleXinYiWarningRecordRobotMoreAD(BigDecimal csBzz, List<BigDecimal> tenVals, BigDecimal csGkz, String category, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, BigDecimal cwrwfhz)  {
+        WarningMoreExceed warningMoreExceed = new WarningMoreExceed();
+        boolean breakpoint = false;
+
+        //最新一个小时的值
+        BigDecimal currentVal = tenVals.get(0);
+
+        Date nowDate = DateUtils.getNowDate();
+
+        //2025年02月21日10:32:42 在这里处理额外的其他报警项
+        //该类型的断点历史报警
+        TXinyiWarningRecord warningRecord = TXinyiWarningRecord.builder().type(0).category(category).symbol(BusinessEnum.WarningSymbolEnum.YBGZ_DD_SINGLE.getCode()).status(0).build();
+        //是否存在断点 判断是否存在 硝酸盐设备故障
+        if(existsRobotDeviceErrorAD(category, tenVals)){
+            //关闭同类型的其他报警
+            //2025年02月25日14:45:09 不用在此关闭,因为在后续处理的时候,判断是单一报警还是多指标表报警的时候,都做了对应的关闭。
+//                closeOtherWarningsByCategory(category, BusinessEnum.WarningSymbolEnum.YBGZ_DD_SINGLE.getCode());
+            breakpoint = true;
+            //触发报警 并且模拟大模型返回决策问答数据
+            //插入该类型报警
+            warningRecord.setTime(nowDate);
+            warningRecord.setReason(category + BusinessEnum.WarningSymbolEnum.YBGZ_DD_SINGLE.getMsg());
+            warningRecord.setWaterType(BusinessEnum.WaterTypeEnum.CS.getCode());
+            warningRecord.setSymbol(BusinessEnum.WarningSymbolEnum.YBGZ_DD_SINGLE.getCode());
+            warningRecord.setCreateBy(WARNING_DEFAULT_CREATE);
+            warningRecord.setCreateTime(nowDate);
+            warningRecord.setWarningVal(currentVal);
+            warningRecord.setDesignVal(csBzz);
+            warningRecord.setControlVal(csGkz);
+            warningRecord.setRemark(THREE_HYS_WARNING.getCode());//化验室
+            warningRecord.setCwrwfhz(cwrwfhz);//2025年02月14日10:42:53 具体指标具体计算,由上游传过来。
+            warningRecord.setCwrwxz(getCwrwxzByDetail(currentVal, normConfig, category, false));//根据当前值和类型以及是否超标处理
+            //存起来
+            warningMoreExceed.setBreakPointWarningRecord(warningRecord);
+//                this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(warningRecord);
+            //同时处理决策 不用调用大模型,本地处理问答
+//                addChatRecordByBreakPointsSingle(warningRecord, tXinyiIndustry, normConfig, category);
+        }
+
+        warningMoreExceed.setBreakpoint(breakpoint);
+        return warningMoreExceed;
+    }
+
+
+
+
+    /**
+     * 2025年04月21日16:07:55 化验室的设备故障报警逻辑调整: 触发条件:连续6小时以上数值,发生无数据、数据为0、数据相同 -- 好氧池硝酸盐
+     * [化验室]通过输入的值 生成对应类型的报警对象(进水)
+     * 化验室只有断点报警,没有连续不变报警(因为化验室数据本身就是4-8个小时一轮 是重复的)
+     * @param currentVal
+     * @param category
+     * @return
+     */
+    private WarningMoreExceed handleXinYiWarningRecordRobotMoreXsy(BigDecimal csBzz, BigDecimal currentVal, BigDecimal csGkz, String category, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, BigDecimal cwrwfhz)  {
+        WarningMoreExceed warningMoreExceed = new WarningMoreExceed();
+        boolean breakpoint = false;
+
+        Date nowDate = DateUtils.getNowDate();
+        List<TXinyiRobot> tXinyiRobots = this.xinyiRobotMapper.selectNRobot(INT_6);
+        if(CollectionUtils.isEmpty(tXinyiRobots) || tXinyiRobots.size() < INT_6){
+            log.error("处理连续检测报警时,获取最近的6条化验数据失败~~~~~~~");
+            return new WarningMoreExceed();
+        }
+        //2025年02月21日10:32:42 在这里处理额外的其他报警项
+        //该类型的断点历史报警
+        TXinyiWarningRecord warningRecord = TXinyiWarningRecord.builder().type(0).category(category).symbol(BusinessEnum.WarningSymbolEnum.YBGZ_DD_SINGLE.getCode()).status(0).build();
+        //是否存在断点 判断是否存在 硝酸盐设备故障
+        if(existsRobotDeviceErrorXsy(category, tXinyiRobots)){
+            //关闭同类型的其他报警
+            //2025年02月25日14:45:09 不用在此关闭,因为在后续处理的时候,判断是单一报警还是多指标表报警的时候,都做了对应的关闭。
+//                closeOtherWarningsByCategory(category, BusinessEnum.WarningSymbolEnum.YBGZ_DD_SINGLE.getCode());
+            breakpoint = true;
+            //触发报警 并且模拟大模型返回决策问答数据
+            //插入该类型报警
+            warningRecord.setTime(nowDate);
+            warningRecord.setReason(category + BusinessEnum.WarningSymbolEnum.YBGZ_DD_SINGLE.getMsg());
+            warningRecord.setWaterType(BusinessEnum.WaterTypeEnum.CS.getCode());
+            warningRecord.setSymbol(BusinessEnum.WarningSymbolEnum.YBGZ_DD_SINGLE.getCode());
+            warningRecord.setCreateBy(WARNING_DEFAULT_CREATE);
+            warningRecord.setCreateTime(nowDate);
+            warningRecord.setWarningVal(currentVal);
+            warningRecord.setDesignVal(csBzz);
+            warningRecord.setControlVal(csGkz);
+            warningRecord.setRemark(THREE_HYS_WARNING.getCode());//化验室
+            warningRecord.setCwrwfhz(cwrwfhz);//2025年02月14日10:42:53 具体指标具体计算,由上游传过来。
+            warningRecord.setCwrwxz(getCwrwxzByDetail(currentVal, normConfig, category, false));//根据当前值和类型以及是否超标处理
+            //存起来
+            warningMoreExceed.setBreakPointWarningRecord(warningRecord);
+//                this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(warningRecord);
+            //同时处理决策 不用调用大模型,本地处理问答
+//                addChatRecordByBreakPointsSingle(warningRecord, tXinyiIndustry, normConfig, category);
+        }
+
+        warningMoreExceed.setBreakpoint(breakpoint);
+        return warningMoreExceed;
+    }
+
+
     /**
      * [化验室]通过输入的值 生成对应类型的报警对象(进水)
      * 化验室只有断点报警,没有连续不变报警(因为化验室数据本身就是4-8个小时一轮 是重复的)
@@ -5888,6 +5996,105 @@ public class AsyncTask {
     }
 
 
+
+    /**
+     *2025年04月21日16:17:57 判断好氧硝酸盐是否存在设备故障
+     * 触发条件:连续6小时以上数值,发生无数据、数据为0、数据相同
+     * 判断当前时间和上个时间段的值是否存在断点
+     * @param category
+     * @param tXinyiRobotList
+     * @return
+     */
+    private boolean existsRobotDeviceErrorAD(String category, List<BigDecimal> tXinyiRobotList) {
+        BigDecimal val0 = tXinyiRobotList.get(INDEX_0);
+        BigDecimal val1 = tXinyiRobotList.get(INDEX_1);
+        BigDecimal val2 = tXinyiRobotList.get(INDEX_2);
+        BigDecimal val3 = tXinyiRobotList.get(INDEX_3);
+        BigDecimal val4 = tXinyiRobotList.get(INDEX_4);
+        BigDecimal val5 = tXinyiRobotList.get(INDEX_5);
+        BigDecimal val6 = tXinyiRobotList.get(INDEX_6);
+        BigDecimal val7 = tXinyiRobotList.get(INDEX_7);
+        BigDecimal val8 = tXinyiRobotList.get(INDEX_8);
+        BigDecimal val9 = tXinyiRobotList.get(INDEX_9);
+        if ((Objects.isNull(val0) || BigDecimal.ZERO.compareTo(val0) == 0)
+                && (Objects.isNull(val1) || BigDecimal.ZERO.compareTo(val1) == 0)
+                && (Objects.isNull(val2) || BigDecimal.ZERO.compareTo(val2) == 0)
+                && (Objects.isNull(val3) || BigDecimal.ZERO.compareTo(val3) == 0)
+                && (Objects.isNull(val4) || BigDecimal.ZERO.compareTo(val4) == 0)
+                && (Objects.isNull(val5) || BigDecimal.ZERO.compareTo(val5) == 0)
+                && (Objects.isNull(val6) || BigDecimal.ZERO.compareTo(val6) == 0)
+                && (Objects.isNull(val7) || BigDecimal.ZERO.compareTo(val7) == 0)
+                && (Objects.isNull(val8) || BigDecimal.ZERO.compareTo(val8) == 0)
+                && (Objects.isNull(val9) || BigDecimal.ZERO.compareTo(val9) == 0)
+        )
+            return true;
+        if(!Objects.isNull(val0) && !Objects.isNull(val1) && !Objects.isNull(val2)
+                && !Objects.isNull(val3) && !Objects.isNull(val4) && !Objects.isNull(val5)
+                && !Objects.isNull(val6) && !Objects.isNull(val7) && !Objects.isNull(val8) && !Objects.isNull(val9)
+                && val0.compareTo(val1) == 0 && val0.compareTo(val2) == 0 && val0.compareTo(val3) == 0
+                && val0.compareTo(val4) == 0 && val0.compareTo(val5) == 0 && val0.compareTo(val6) == 0
+                && val0.compareTo(val7) == 0 && val0.compareTo(val8) == 0 && val0.compareTo(val9) == 0
+        )
+            return true;
+        return false;
+    }
+
+
+
+    /**
+     *2025年04月21日16:17:57 判断好氧硝酸盐是否存在设备故障
+     * 触发条件:连续6小时以上数值,发生无数据、数据为0、数据相同
+     * 判断当前时间和上个时间段的值是否存在断点
+     * @param category
+     * @param tXinyiRobotList
+     * @return
+     */
+    private boolean existsRobotDeviceErrorXsy(String category, List<TXinyiRobot> tXinyiRobotList) {
+        if(BusinessEnum.WarningCategoryEnum.ROBOT_XSY_1.getCode().equals(category)){
+            BigDecimal no3Hlj1Jqr0 = tXinyiRobotList.get(INDEX_0).getNo3Hlj1Jqr();
+            BigDecimal no3Hlj1Jqr1 = tXinyiRobotList.get(INDEX_1).getNo3Hlj1Jqr();
+            BigDecimal no3Hlj1Jqr2 = tXinyiRobotList.get(INDEX_2).getNo3Hlj1Jqr();
+            BigDecimal no3Hlj1Jqr3 = tXinyiRobotList.get(INDEX_3).getNo3Hlj1Jqr();
+            BigDecimal no3Hlj1Jqr4 = tXinyiRobotList.get(INDEX_4).getNo3Hlj1Jqr();
+            BigDecimal no3Hlj1Jqr5 = tXinyiRobotList.get(INDEX_5).getNo3Hlj1Jqr();
+            if ((Objects.isNull(no3Hlj1Jqr0) || BigDecimal.ZERO.compareTo(no3Hlj1Jqr0) == 0)
+                && (Objects.isNull(no3Hlj1Jqr1) || BigDecimal.ZERO.compareTo(no3Hlj1Jqr1) == 0)
+                && (Objects.isNull(no3Hlj1Jqr2) || BigDecimal.ZERO.compareTo(no3Hlj1Jqr2) == 0)
+                && (Objects.isNull(no3Hlj1Jqr3) || BigDecimal.ZERO.compareTo(no3Hlj1Jqr3) == 0)
+                && (Objects.isNull(no3Hlj1Jqr4) || BigDecimal.ZERO.compareTo(no3Hlj1Jqr4) == 0)
+                && (Objects.isNull(no3Hlj1Jqr5) || BigDecimal.ZERO.compareTo(no3Hlj1Jqr5) == 0))
+                return true;
+            if(!Objects.isNull(no3Hlj1Jqr0) && !Objects.isNull(no3Hlj1Jqr1) && !Objects.isNull(no3Hlj1Jqr2)
+                    && !Objects.isNull(no3Hlj1Jqr3) && !Objects.isNull(no3Hlj1Jqr4) && !Objects.isNull(no3Hlj1Jqr5)
+                        && no3Hlj1Jqr0.compareTo(no3Hlj1Jqr1) == 0 && no3Hlj1Jqr0.compareTo(no3Hlj1Jqr2) == 0 && no3Hlj1Jqr0.compareTo(no3Hlj1Jqr3) == 0
+                            && no3Hlj1Jqr0.compareTo(no3Hlj1Jqr4) == 0 && no3Hlj1Jqr0.compareTo(no3Hlj1Jqr5) == 0)
+                return true;
+        }else if(BusinessEnum.WarningCategoryEnum.ROBOT_XSY_2.getCode().equals(category)){
+            BigDecimal no3Hlj1Jqr0 = tXinyiRobotList.get(INDEX_0).getNo3Hlj2Jqr();
+            BigDecimal no3Hlj1Jqr1 = tXinyiRobotList.get(INDEX_1).getNo3Hlj2Jqr();
+            BigDecimal no3Hlj1Jqr2 = tXinyiRobotList.get(INDEX_2).getNo3Hlj2Jqr();
+            BigDecimal no3Hlj1Jqr3 = tXinyiRobotList.get(INDEX_3).getNo3Hlj2Jqr();
+            BigDecimal no3Hlj1Jqr4 = tXinyiRobotList.get(INDEX_4).getNo3Hlj2Jqr();
+            BigDecimal no3Hlj1Jqr5 = tXinyiRobotList.get(INDEX_5).getNo3Hlj2Jqr();
+            if ((Objects.isNull(no3Hlj1Jqr0) || BigDecimal.ZERO.compareTo(no3Hlj1Jqr0) == 0)
+                    && (Objects.isNull(no3Hlj1Jqr1) || BigDecimal.ZERO.compareTo(no3Hlj1Jqr1) == 0)
+                    && (Objects.isNull(no3Hlj1Jqr2) || BigDecimal.ZERO.compareTo(no3Hlj1Jqr2) == 0)
+                    && (Objects.isNull(no3Hlj1Jqr3) || BigDecimal.ZERO.compareTo(no3Hlj1Jqr3) == 0)
+                    && (Objects.isNull(no3Hlj1Jqr4) || BigDecimal.ZERO.compareTo(no3Hlj1Jqr4) == 0)
+                    && (Objects.isNull(no3Hlj1Jqr5) || BigDecimal.ZERO.compareTo(no3Hlj1Jqr5) == 0))
+                return true;
+            if(!Objects.isNull(no3Hlj1Jqr0) && !Objects.isNull(no3Hlj1Jqr1) && !Objects.isNull(no3Hlj1Jqr2)
+                    && !Objects.isNull(no3Hlj1Jqr3) && !Objects.isNull(no3Hlj1Jqr4) && !Objects.isNull(no3Hlj1Jqr5)
+                    && no3Hlj1Jqr0.compareTo(no3Hlj1Jqr1) == 0 && no3Hlj1Jqr0.compareTo(no3Hlj1Jqr2) == 0 && no3Hlj1Jqr0.compareTo(no3Hlj1Jqr3) == 0
+                    && no3Hlj1Jqr0.compareTo(no3Hlj1Jqr4) == 0 && no3Hlj1Jqr0.compareTo(no3Hlj1Jqr5) == 0)
+                return true;
+        }else{
+            log.error("化验室暂时还不支持的报警类型~~~~");
+        }
+        return false;
+    }
+
+
     /**
      *
      * 判断当前时间和上个时间段的值是否存在断点
@@ -6680,7 +6887,7 @@ public class AsyncTask {
         boolean csADExecute = true;
 
         //#1好氧硝酸盐
-        BigDecimal no3Hlj1Jqr = tXinyiRobot.getNo3Hlj1Jqr();
+        /*BigDecimal no3Hlj1Jqr = tXinyiRobot.getNo3Hlj1Jqr();
         //#2好氧硝酸盐
         BigDecimal no3Hlj2Jqr = tXinyiRobot.getNo3Hlj2Jqr();
         //1#缺氧出-硝酸盐
@@ -6688,7 +6895,7 @@ public class AsyncTask {
         BigDecimal nh31Jqr = tXinyiRobot.getNh31Jqr();
         //2#缺氧出-硝酸盐
         BigDecimal no3Qyc2Jqr = tXinyiRobot.getNo3Qyc2Jqr();
-        BigDecimal nh32Jqr = tXinyiRobot.getNh32Jqr();
+        BigDecimal nh32Jqr = tXinyiRobot.getNh32Jqr();*/
 
         //总氮的标准值和管控值
         BigDecimal cszzBzz = normConfig.getCszzBzz();
@@ -6702,7 +6909,7 @@ public class AsyncTask {
 
         WarningMoreExceed warningMoreExceed = null;
         if(!Objects.isNull(no3Hlj1Jqr)){
-            warningMoreExceed = handleXinYiWarningRecordRobotMore(cszzBzz, no3Hlj1Jqr, cszzGkz, ROBOT_XSY_1.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
+            warningMoreExceed = handleXinYiWarningRecordRobotMoreXsy(cszzBzz, no3Hlj1Jqr, cszzGkz, ROBOT_XSY_1.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
             if(warningMoreExceed.isBreakpoint()){
                 breakpointCount++;
                 breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
@@ -6711,7 +6918,7 @@ public class AsyncTask {
 
 
         if(!Objects.isNull(no3Hlj2Jqr)){
-            warningMoreExceed = handleXinYiWarningRecordRobotMore(cszzBzz, no3Hlj2Jqr, cszzGkz, ROBOT_XSY_2.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
+            warningMoreExceed = handleXinYiWarningRecordRobotMoreXsy(cszzBzz, no3Hlj2Jqr, cszzGkz, ROBOT_XSY_2.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
             if(warningMoreExceed.isBreakpoint()){
                 breakpointCount++;
                 breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());
@@ -6719,25 +6926,47 @@ public class AsyncTask {
         }
 
 
-        //判断 增加容错
-        if(Objects.isNull(no3Qyc1Jqr))
-            no3Qyc1Jqr = BigDecimal.ZERO;
-        if(Objects.isNull(nh31Jqr))
-            nh31Jqr = BigDecimal.ZERO;
-        if(Objects.isNull(no3Hlj1Jqr))
-            no3Hlj1Jqr = BigDecimal.ZERO;
-        BigDecimal anDan1 = no3Qyc1Jqr.add(nh31Jqr).subtract(no3Hlj1Jqr);
+        //2025年04月21日17:04:28 逻辑调整,需要取最近的十条数据,计算获取到十个值
+        List<BigDecimal> tenVals = new ArrayList<>(10);
+        List<TXinyiRobot> tXinyiRobots = this.xinyiRobotMapper.selectNRobot(INT_10);
+        if(!CollectionUtils.isEmpty(tXinyiRobots) && tXinyiRobots.size() == INT_10){
+            for (TXinyiRobot xinyiRobot : tXinyiRobots) {
+                //判断 增加容错
+                BigDecimal no3Hlj1JqrTemp = tXinyiRobot.getNo3Hlj1Jqr();
+                //#2好氧硝酸盐
+                BigDecimal no3Hlj2JqrTemp = tXinyiRobot.getNo3Hlj2Jqr();
+                //1#缺氧出-硝酸盐
+                BigDecimal no3Qyc1JqrTemp = tXinyiRobot.getNo3Qyc1Jqr();
+                BigDecimal nh31JqrTemp = tXinyiRobot.getNh31Jqr();
+                //2#缺氧出-硝酸盐
+                BigDecimal no3Qyc2JqrTemp = tXinyiRobot.getNo3Qyc2Jqr();
+                BigDecimal nh32JqrTemp = tXinyiRobot.getNh32Jqr();
+                if(Objects.isNull(no3Qyc1JqrTemp))
+                    no3Qyc1JqrTemp = BigDecimal.ZERO;
+                if(Objects.isNull(nh31JqrTemp))
+                    nh31JqrTemp = BigDecimal.ZERO;
+                if(Objects.isNull(no3Hlj1JqrTemp))
+                    no3Hlj1JqrTemp = BigDecimal.ZERO;
+                BigDecimal anDan1 = no3Qyc1JqrTemp.add(nh31JqrTemp).subtract(no3Hlj1JqrTemp);
+
+                //判断 增加容错
+                if(Objects.isNull(no3Qyc2JqrTemp))
+                    no3Qyc2JqrTemp = BigDecimal.ZERO;
+                if(Objects.isNull(nh32JqrTemp))
+                    nh32JqrTemp = BigDecimal.ZERO;
+                if(Objects.isNull(no3Hlj2JqrTemp))
+                    no3Hlj2JqrTemp = BigDecimal.ZERO;
+                BigDecimal anDan2 = no3Qyc2JqrTemp.add(nh32JqrTemp).subtract(no3Hlj2JqrTemp);
+                BigDecimal divide = anDan1.add(anDan2).divide(DECIMAL_2, INT_2, RoundingMode.HALF_UP);
+                //2025年04月21日17:22:30 如果计算结果小于0,当0处理
+                if(divide.compareTo(BigDecimal.ZERO) < 0)
+                    divide = BigDecimal.ZERO;
+                tenVals.add(divide);
+            }
+        }
 
-        //判断 增加容错
-        if(Objects.isNull(no3Qyc2Jqr))
-            no3Qyc2Jqr = BigDecimal.ZERO;
-        if(Objects.isNull(nh32Jqr))
-            nh32Jqr = BigDecimal.ZERO;
-        if(Objects.isNull(no3Hlj2Jqr))
-            no3Hlj2Jqr = BigDecimal.ZERO;
-        BigDecimal anDan2 = no3Qyc2Jqr.add(nh32Jqr).subtract(no3Hlj2Jqr);
-        BigDecimal divide = anDan1.add(anDan2).divide(DECIMAL_2, INT_2, RoundingMode.HALF_UP);
-        warningMoreExceed = handleXinYiWarningRecordRobotMore(csadBzz, divide, csadGkz, ROBOT_CS_AD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsNh3(), jsslSjz, normConfig.getJsadSjz()));
+
+        warningMoreExceed = handleXinYiWarningRecordRobotMoreAD(csadBzz, tenVals, csadGkz, ROBOT_CS_AD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsNh3(), jsslSjz, normConfig.getJsadSjz()));
         if(warningMoreExceed.isBreakpoint()){
             breakpointCount++;
             breakPointList.add(warningMoreExceed.getBreakPointWarningRecord());