3 Commits 0423196d61 ... b7d0ac1130

Author SHA1 Message Date
  王苗苗 b7d0ac1130 机理模型预测 缺氧氨氮 真实值和误差相关处理 2 weeks ago
  王苗苗 cf62baef17 新增 缺氧氨氮1池和2池的 机理模型预测 2 weeks ago
  王苗苗 70c1d6d379 新增小程序获取文档列表 - 按照日期分组接口 2 weeks ago

+ 25 - 0
slibra-admin/src/main/java/com/slibra/web/controller/business/FrontController.java

@@ -164,6 +164,31 @@ public class FrontController extends BaseController {
         return getDataTable(xinyiChatRecordMapper.selectTXinyiChatRecordFirstList(tXinyiChatRecord));
     }
 
+
+    /**
+     * 分页获取大模型的问答记录
+     * @param tXinyiChatRecord
+     * @return
+     */
+    @GetMapping("/bigModel/qa/wx/list")
+    public Map<String, List<TXinyiChatRecord>> wxList(TXinyiChatRecord tXinyiChatRecord)
+    {
+        log.info("进入了 小程序获取问答记录并按日期分组 接口");
+        //获取登录用户信息
+        Long userId = SecurityUtils.getUserId();
+        tXinyiChatRecord.setUserId(String.valueOf(userId));
+        List<TXinyiChatRecord> tXinyiChatRecords = xinyiChatRecordMapper.selectTXinyiChatRecordFirstList(tXinyiChatRecord);
+        if(CollectionUtils.isEmpty(tXinyiChatRecords))
+            return null;
+        //处理日期数据 在程序处理,不在SQL中处理了
+        for (TXinyiChatRecord xinyiChatRecord : tXinyiChatRecords) {
+            Date createTime = xinyiChatRecord.getCreateTime();
+            if(!Objects.isNull(createTime))
+                xinyiChatRecord.setDateStr(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD, createTime));
+        }
+        return tXinyiChatRecords.stream().collect(Collectors.groupingBy(TXinyiChatRecord::getDateStr));
+    }
+
     /**
      * 不分页获取大模型的问答记录
      * @param tXinyiChatRecord

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

@@ -499,6 +499,8 @@ public class BusinessEnum {
         XSY(5, "缺氧硝酸盐"),
         HY_XSY_1(6, "好氧池硝酸盐#1"),
         HY_XSY_2(7, "好氧池硝酸盐#2"),
+        QY_NH3_1(8, "缺氧氨氮#1"),
+        QY_NH3_2(9, "缺氧氨氮#2"),
         ;
 
         private final Integer code;

+ 36 - 0
slibra-quartz/src/main/java/com/slibra/quartz/task/AsyncTask.java

@@ -770,6 +770,12 @@ public class AsyncTask {
                             tXinyiForecastComparison.setYyErrorRateOne((subtract).divide(nh31Jqr, NUMBER_SCALE_4, RoundingMode.HALF_UP));
                             tXinyiForecastComparison.setYyOneSubtract(DecimalUtils.getAbsAndScale(subtract, INT_2));
                         }
+                        //2025年04月08日17:59:29 处理机理模型预测对比
+                        if(!Objects.isNull(jlForecastOne)){
+                            BigDecimal subtract = nh31Jqr.subtract(jlForecastOne);
+                            tXinyiForecastComparison.setJlErrorRateOne((subtract).divide(nh31Jqr, NUMBER_SCALE_4, RoundingMode.HALF_UP));
+                            tXinyiForecastComparison.setJlOneSubtract(DecimalUtils.getAbsAndScale(subtract, INT_2));
+                        }
                     }
                 }
 
@@ -786,6 +792,12 @@ public class AsyncTask {
                             tXinyiForecastComparison.setYyErrorRateOne((subtract).divide(nh32Jqr, NUMBER_SCALE_4, RoundingMode.HALF_UP));
                             tXinyiForecastComparison.setYyOneSubtract(DecimalUtils.getAbsAndScale(subtract, INT_2));
                         }
+                        //2025年04月08日17:59:29 处理机理模型预测对比
+                        if(!Objects.isNull(jlForecastOne)){
+                            BigDecimal subtract = nh32Jqr.subtract(jlForecastOne);
+                            tXinyiForecastComparison.setJlErrorRateOne((subtract).divide(nh32Jqr, NUMBER_SCALE_4, RoundingMode.HALF_UP));
+                            tXinyiForecastComparison.setJlOneSubtract(DecimalUtils.getAbsAndScale(subtract, INT_2));
+                        }
                     }
                 }
 
@@ -929,6 +941,12 @@ public class AsyncTask {
                             tXinyiForecastComparison.setYyErrorRateTwo((subtract).divide(nh31Jqr, NUMBER_SCALE_4, RoundingMode.HALF_UP));
                             tXinyiForecastComparison.setYyTwoSubtract(DecimalUtils.getAbsAndScale(subtract, INT_2));
                         }
+                        //2025年04月08日17:59:29 处理机理模型预测对比
+                        if(!Objects.isNull(jlForecastTwo)){
+                            BigDecimal subtract = nh31Jqr.subtract(jlForecastTwo);
+                            tXinyiForecastComparison.setJlErrorRateTwo((subtract).divide(nh31Jqr, NUMBER_SCALE_4, RoundingMode.HALF_UP));
+                            tXinyiForecastComparison.setJlTwoSubtract(DecimalUtils.getAbsAndScale(subtract, INT_2));
+                        }
                     }
                 }
 
@@ -945,6 +963,12 @@ public class AsyncTask {
                             tXinyiForecastComparison.setYyErrorRateTwo((subtract).divide(nh32Jqr, NUMBER_SCALE_4, RoundingMode.HALF_UP));
                             tXinyiForecastComparison.setYyTwoSubtract(DecimalUtils.getAbsAndScale(subtract, INT_2));
                         }
+                        //2025年04月08日17:59:29 处理机理模型预测对比
+                        if(!Objects.isNull(jlForecastTwo)){
+                            BigDecimal subtract = nh32Jqr.subtract(jlForecastTwo);
+                            tXinyiForecastComparison.setJlErrorRateTwo((subtract).divide(nh32Jqr, NUMBER_SCALE_4, RoundingMode.HALF_UP));
+                            tXinyiForecastComparison.setJlTwoSubtract(DecimalUtils.getAbsAndScale(subtract, INT_2));
+                        }
                     }
                 }
 
@@ -1087,6 +1111,12 @@ public class AsyncTask {
                             tXinyiForecastComparison.setYyErrorRateThree((subtract).divide(nh31Jqr, NUMBER_SCALE_4, RoundingMode.HALF_UP));
                             tXinyiForecastComparison.setYyThreeSubtract(DecimalUtils.getAbsAndScale(subtract, INT_2));
                         }
+                        //2025年04月08日17:59:29 处理机理模型预测对比
+                        if(!Objects.isNull(jlForecastThree)){
+                            BigDecimal subtract = nh31Jqr.subtract(jlForecastThree);
+                            tXinyiForecastComparison.setJlErrorRateThree((subtract).divide(nh31Jqr, NUMBER_SCALE_4, RoundingMode.HALF_UP));
+                            tXinyiForecastComparison.setJlThreeSubtract(DecimalUtils.getAbsAndScale(subtract, INT_2));
+                        }
                     }
                 }
 
@@ -1103,6 +1133,12 @@ public class AsyncTask {
                             tXinyiForecastComparison.setYyErrorRateThree((subtract).divide(nh32Jqr, NUMBER_SCALE_4, RoundingMode.HALF_UP));
                             tXinyiForecastComparison.setYyThreeSubtract(DecimalUtils.getAbsAndScale(subtract, INT_2));
                         }
+                        //2025年04月08日17:59:29 处理机理模型预测对比
+                        if(!Objects.isNull(jlForecastThree)){
+                            BigDecimal subtract = nh32Jqr.subtract(jlForecastThree);
+                            tXinyiForecastComparison.setJlErrorRateThree((subtract).divide(nh32Jqr, NUMBER_SCALE_4, RoundingMode.HALF_UP));
+                            tXinyiForecastComparison.setJlThreeSubtract(DecimalUtils.getAbsAndScale(subtract, INT_2));
+                        }
                     }
                 }
 

+ 142 - 0
slibra-quartz/src/main/java/com/slibra/quartz/task/RyTask.java

@@ -1813,6 +1813,12 @@ public class RyTask
             } catch (Exception e) {
                 log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
             }*/
+            //2025年04月08日17:47:54 额外记录基地模型预测的值
+            try {
+                this.updateJDModelPredictQyNh31(tXinyiForecastComparison);
+            } catch (Exception e) {
+                log.error("处理 基地模型-缺氧氨氮#1预测的值的时候出现异常,异常信息为{}", e.getMessage());
+            }
             // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
             /*BigDecimal cscodBzz = new BigDecimal(XIAOSUANYAN_BZK);
             BigDecimal cscodGkz = new BigDecimal(XIAOSUANYAN_GKZ);*/
@@ -1848,6 +1854,12 @@ public class RyTask
             } catch (Exception e) {
                 log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
             }*/
+            //2025年04月08日17:47:54 额外记录基地模型预测的值
+            try {
+                this.updateJDModelPredictQyNh32(tXinyiForecastComparison);
+            } catch (Exception e) {
+                log.error("处理 基地模型-缺氧氨氮#2预测的值的时候出现异常,异常信息为{}", e.getMessage());
+            }
             // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
             /*BigDecimal cscodBzz = new BigDecimal(XIAOSUANYAN_BZK);
             BigDecimal cscodGkz = new BigDecimal(XIAOSUANYAN_GKZ);*/
@@ -2077,6 +2089,136 @@ public class RyTask
         }
     }
 
+
+    /**
+     * 额外通过计算处理要保存的预测对象-机理模型缺氧氨氮1池
+     * @param tXinyiForecastComparison
+     */
+    private void updateJDModelPredictQyNh31(TXinyiForecastComparison tXinyiForecastComparison) {
+        //现获取基地模型的配置 如果没有执行返回
+        TPredictConf tPredictConfReq = new TPredictConf();
+        tPredictConfReq.setType(BusinessEnum.JLModelPredictEnum.QY_NH3_1.getCode());
+        List<TPredictConf> tPredictConfs = this.tpredictConfMapper.selectTPredictConfList(tPredictConfReq);
+        if(CollectionUtils.isEmpty(tPredictConfs)){
+            log.error("获取缺氧硝酸盐#1机理模型预测参数配置失败,无法处理");
+            return;
+        }
+        if(tPredictConfs.size() > 1){
+            log.error("获取缺氧硝酸盐#1机理模型预测参数配置查询多条配置信息,无法处理");
+            return;
+        }
+        //配置的值
+        TPredictConf tPredictConf = tPredictConfs.get(0);
+        BigDecimal a = Objects.isNull(tPredictConf.getA()) ? BigDecimal.valueOf(12.00) : tPredictConf.getA();
+        BigDecimal b = Objects.isNull(tPredictConf.getB()) ? BigDecimal.valueOf(59.20) : tPredictConf.getB();
+        int xMin = Objects.isNull(tPredictConf.getxMin()) ? 1 : tPredictConf.getxMin();
+        int xMax = Objects.isNull(tPredictConf.getxMax()) ? 4 : tPredictConf.getxMax();
+        int y1Min = Objects.isNull(tPredictConf.getY1Min()) ? 1 : tPredictConf.getY1Min();
+        int y1Max = Objects.isNull(tPredictConf.getY1Max()) ? 4 : tPredictConf.getY1Max();
+        BigDecimal x1 = Objects.isNull(tPredictConf.getX1()) ? BigDecimal.valueOf(84.56) : tPredictConf.getX1();
+        //计算第一个值逻辑处理
+        //计算X的值
+        Date nowDate = DateUtils.getNowDate();
+        BigDecimal x = this.xinyiIndustryMapper.getAvgJSNh3ByDate(DateUtil.format(DateUtils.plusHour(-xMax, nowDate), DateUtils.YYYYMMDDHH_TS), DateUtil.format(DateUtils.plusHour(-xMin, nowDate), DateUtils.YYYYMMDDHH_TS));
+        //计算y1
+        BigDecimal y1 = this.xinyiRobotMapper.getAvgQyNh31ByDate(DateUtil.format(DateUtils.plusHour(-y1Max, nowDate), DateUtils.YYYYMMDDHH_TS), DateUtil.format(DateUtils.plusHour(-y1Min, nowDate), DateUtils.YYYYMMDDHH_TS));
+        if(x.compareTo(x1) <= 0){//直接用  当前时间前12小时-6小时的出水COD均值 (时间段位配置的值)
+            tXinyiForecastComparison.setJlForecastOne(y1);
+        }else{//按照公式计算
+            tXinyiForecastComparison.setJlForecastOne(y1.add(a.multiply(x.subtract(x1).divide(b,NUMBER_SCALE_2, RoundingMode.HALF_UP))));
+        }
+
+        //计算第二个值逻辑处理
+        //计算X的值
+        nowDate = DateUtils.plusHour(1, nowDate);
+        x = this.xinyiIndustryMapper.getAvgJSNh3ByDate(DateUtil.format(DateUtils.plusHour(-xMax, nowDate), DateUtils.YYYYMMDDHH_TS), DateUtil.format(DateUtils.plusHour(-xMin, nowDate), DateUtils.YYYYMMDDHH_TS));
+        //计算y1
+        y1 = this.xinyiRobotMapper.getAvgQyNh31ByDate(DateUtil.format(DateUtils.plusHour(-y1Max, nowDate), DateUtils.YYYYMMDDHH_TS), DateUtil.format(DateUtils.plusHour(-y1Min, nowDate), DateUtils.YYYYMMDDHH_TS));
+        if(x.compareTo(x1) <= 0){//直接用  当前时间前12小时-6小时的出水COD均值 (时间段位配置的值)
+            tXinyiForecastComparison.setJlForecastTwo(y1);
+        }else{//按照公式计算
+            tXinyiForecastComparison.setJlForecastTwo(y1.add(a.multiply(x.subtract(x1).divide(b,NUMBER_SCALE_2, RoundingMode.HALF_UP))));
+        }
+
+
+        //计算第三个值逻辑处理
+        //计算X的值
+        nowDate = DateUtils.plusHour(1, nowDate);
+        x = this.xinyiIndustryMapper.getAvgJSNh3ByDate(DateUtil.format(DateUtils.plusHour(-xMax, nowDate), DateUtils.YYYYMMDDHH_TS), DateUtil.format(DateUtils.plusHour(-xMin, nowDate), DateUtils.YYYYMMDDHH_TS));
+        //计算y1
+        y1 = this.xinyiRobotMapper.getAvgQyNh31ByDate(DateUtil.format(DateUtils.plusHour(-y1Max, nowDate), DateUtils.YYYYMMDDHH_TS), DateUtil.format(DateUtils.plusHour(-y1Min, nowDate), DateUtils.YYYYMMDDHH_TS));
+        if(x.compareTo(x1) <= 0){//直接用  当前时间前12小时-6小时的出水COD均值 (时间段位配置的值)
+            tXinyiForecastComparison.setJlForecastThree(y1);
+        }else{//按照公式计算
+            tXinyiForecastComparison.setJlForecastThree(y1.add(a.multiply(x.subtract(x1).divide(b,NUMBER_SCALE_2, RoundingMode.HALF_UP))));
+        }
+    }
+
+
+    /**
+     * 额外通过计算处理要保存的预测对象-机理模型缺氧氨氮2池
+     * @param tXinyiForecastComparison
+     */
+    private void updateJDModelPredictQyNh32(TXinyiForecastComparison tXinyiForecastComparison) {
+        //现获取基地模型的配置 如果没有执行返回
+        TPredictConf tPredictConfReq = new TPredictConf();
+        tPredictConfReq.setType(BusinessEnum.JLModelPredictEnum.QY_NH3_2.getCode());
+        List<TPredictConf> tPredictConfs = this.tpredictConfMapper.selectTPredictConfList(tPredictConfReq);
+        if(CollectionUtils.isEmpty(tPredictConfs)){
+            log.error("获取缺氧硝酸盐#2机理模型预测参数配置失败,无法处理");
+            return;
+        }
+        if(tPredictConfs.size() > 1){
+            log.error("获取缺氧硝酸盐#2机理模型预测参数配置查询多条配置信息,无法处理");
+            return;
+        }
+        //配置的值
+        TPredictConf tPredictConf = tPredictConfs.get(0);
+        BigDecimal a = Objects.isNull(tPredictConf.getA()) ? BigDecimal.valueOf(12.00) : tPredictConf.getA();
+        BigDecimal b = Objects.isNull(tPredictConf.getB()) ? BigDecimal.valueOf(59.20) : tPredictConf.getB();
+        int xMin = Objects.isNull(tPredictConf.getxMin()) ? 1 : tPredictConf.getxMin();
+        int xMax = Objects.isNull(tPredictConf.getxMax()) ? 4 : tPredictConf.getxMax();
+        int y1Min = Objects.isNull(tPredictConf.getY1Min()) ? 1 : tPredictConf.getY1Min();
+        int y1Max = Objects.isNull(tPredictConf.getY1Max()) ? 4 : tPredictConf.getY1Max();
+        BigDecimal x1 = Objects.isNull(tPredictConf.getX1()) ? BigDecimal.valueOf(84.56) : tPredictConf.getX1();
+        //计算第一个值逻辑处理
+        //计算X的值
+        Date nowDate = DateUtils.getNowDate();
+        BigDecimal x = this.xinyiIndustryMapper.getAvgJSNh3ByDate(DateUtil.format(DateUtils.plusHour(-xMax, nowDate), DateUtils.YYYYMMDDHH_TS), DateUtil.format(DateUtils.plusHour(-xMin, nowDate), DateUtils.YYYYMMDDHH_TS));
+        //计算y1
+        BigDecimal y1 = this.xinyiRobotMapper.getAvgQyNh32ByDate(DateUtil.format(DateUtils.plusHour(-y1Max, nowDate), DateUtils.YYYYMMDDHH_TS), DateUtil.format(DateUtils.plusHour(-y1Min, nowDate), DateUtils.YYYYMMDDHH_TS));
+        if(x.compareTo(x1) <= 0){//直接用  当前时间前12小时-6小时的出水COD均值 (时间段位配置的值)
+            tXinyiForecastComparison.setJlForecastOne(y1);
+        }else{//按照公式计算
+            tXinyiForecastComparison.setJlForecastOne(y1.add(a.multiply(x.subtract(x1).divide(b,NUMBER_SCALE_2, RoundingMode.HALF_UP))));
+        }
+
+        //计算第二个值逻辑处理
+        //计算X的值
+        nowDate = DateUtils.plusHour(1, nowDate);
+        x = this.xinyiIndustryMapper.getAvgJSNh3ByDate(DateUtil.format(DateUtils.plusHour(-xMax, nowDate), DateUtils.YYYYMMDDHH_TS), DateUtil.format(DateUtils.plusHour(-xMin, nowDate), DateUtils.YYYYMMDDHH_TS));
+        //计算y1
+        y1 = this.xinyiRobotMapper.getAvgQyNh32ByDate(DateUtil.format(DateUtils.plusHour(-y1Max, nowDate), DateUtils.YYYYMMDDHH_TS), DateUtil.format(DateUtils.plusHour(-y1Min, nowDate), DateUtils.YYYYMMDDHH_TS));
+        if(x.compareTo(x1) <= 0){//直接用  当前时间前12小时-6小时的出水COD均值 (时间段位配置的值)
+            tXinyiForecastComparison.setJlForecastTwo(y1);
+        }else{//按照公式计算
+            tXinyiForecastComparison.setJlForecastTwo(y1.add(a.multiply(x.subtract(x1).divide(b,NUMBER_SCALE_2, RoundingMode.HALF_UP))));
+        }
+
+
+        //计算第三个值逻辑处理
+        //计算X的值
+        nowDate = DateUtils.plusHour(1, nowDate);
+        x = this.xinyiIndustryMapper.getAvgJSNh3ByDate(DateUtil.format(DateUtils.plusHour(-xMax, nowDate), DateUtils.YYYYMMDDHH_TS), DateUtil.format(DateUtils.plusHour(-xMin, nowDate), DateUtils.YYYYMMDDHH_TS));
+        //计算y1
+        y1 = this.xinyiRobotMapper.getAvgQyNh32ByDate(DateUtil.format(DateUtils.plusHour(-y1Max, nowDate), DateUtils.YYYYMMDDHH_TS), DateUtil.format(DateUtils.plusHour(-y1Min, nowDate), DateUtils.YYYYMMDDHH_TS));
+        if(x.compareTo(x1) <= 0){//直接用  当前时间前12小时-6小时的出水COD均值 (时间段位配置的值)
+            tXinyiForecastComparison.setJlForecastThree(y1);
+        }else{//按照公式计算
+            tXinyiForecastComparison.setJlForecastThree(y1.add(a.multiply(x.subtract(x1).divide(b,NUMBER_SCALE_2, RoundingMode.HALF_UP))));
+        }
+    }
+
     public void handleXinYiWarningsYC(BigDecimal csBzz, String[] split, BigDecimal csGkz, String category, String hour, TXinyiNormConfig normConfig, BigDecimal currentVal, TXinyiIndustry tXinyiIndustry, List<ChartBasic> chartsDataList, String date) {
         BigDecimal multiply = csBzz.multiply(new BigDecimal(MyConstants.SCALE_VALUE));
         TXinyiWarningRecord tXinyiWarningRecord = null;

+ 3 - 0
slibra-system/src/main/java/com/slibra/business/domain/TXinyiChatRecord.java

@@ -91,5 +91,8 @@ public class TXinyiChatRecord extends BaseEntity
     @Excel(name = "手机号码")
     private String phonenumber;
 
+    //2025年04月08日13:51:42 新增返回的日期 只保留到年月日
+    private String dateStr = "";
+
 
 }

+ 2 - 0
slibra-system/src/main/java/com/slibra/business/mapper/TXinyiIndustryMapper.java

@@ -112,4 +112,6 @@ public interface TXinyiIndustryMapper
     BigDecimal getAvgCSCodByDate(@Param("dateBegin") String dateBegin, @Param("dateEnd") String dateEnd);
 
     BigDecimal getAvgJSTnByDate(@Param("dateBegin") String dateBegin, @Param("dateEnd") String dateEnd);
+
+    BigDecimal getAvgJSNh3ByDate(@Param("dateBegin") String dateBegin, @Param("dateEnd") String dateEnd);
 }

+ 5 - 0
slibra-system/src/main/java/com/slibra/business/mapper/TXinyiRobotMapper.java

@@ -92,4 +92,9 @@ public interface TXinyiRobotMapper
     BigDecimal getAvgCSXsy1ByDate(@Param("dateBegin") String dateBegin, @Param("dateEnd") String dateEnd);
 
     BigDecimal getAvgCSXsy2ByDate(@Param("dateBegin") String dateBegin, @Param("dateEnd") String dateEnd);
+
+    BigDecimal getAvgQyNh31ByDate(@Param("dateBegin") String dateBegin, @Param("dateEnd") String dateEnd);
+
+    BigDecimal getAvgQyNh32ByDate(@Param("dateBegin") String dateBegin, @Param("dateEnd") String dateEnd);
+
 }

+ 11 - 3
slibra-system/src/main/resources/mapper/business/TXinyiIndustryMapper.xml

@@ -705,7 +705,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="getAvgJSCodByDate" resultType="java.math.BigDecimal">
         SELECT
-            avg( temp.val )
+            IFNULL(avg( temp.val ), 0)
         FROM
             ( SELECT JS_SLQ * JS_COD / 2 / 10000 val FROM t_xinyi_industry WHERE TEST_HOUR BETWEEN #{dateBegin} AND #{dateEnd} ) temp
     </select>
@@ -713,7 +713,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="getAvgCSCodByDate" resultType="java.math.BigDecimal">
         SELECT
-            AVG( CS_COD )
+            IFNULL(AVG( CS_COD ), 0)
         FROM
             t_xinyi_industry
         WHERE
@@ -724,8 +724,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="getAvgJSTnByDate" resultType="java.math.BigDecimal">
         SELECT
-            avg( temp.val )
+            IFNULL(avg( temp.val ), 0)
         FROM
             ( SELECT JS_SLQ * JS_TN / 2 / 10000 val FROM t_xinyi_industry WHERE TEST_HOUR BETWEEN #{dateBegin} AND #{dateEnd} ) temp
     </select>
+
+
+    <select id="getAvgJSNh3ByDate" resultType="java.math.BigDecimal">
+        SELECT
+            IFNULL(avg( temp.val ), 0)
+        FROM
+            ( SELECT JS_SLQ * JS_NH3 / 2 / 10000 val FROM t_xinyi_industry WHERE TEST_HOUR BETWEEN #{dateBegin} AND #{dateEnd} ) temp
+    </select>
 </mapper>

+ 22 - 2
slibra-system/src/main/resources/mapper/business/TXinyiRobotMapper.xml

@@ -372,7 +372,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="getAvgCSXsy1ByDate" resultType="java.math.BigDecimal">
         SELECT
-            AVG( NO3_HLJ1_JQR )
+            IFNULL(AVG( NO3_HLJ1_JQR ), 0)
         FROM
             t_xinyi_robot
         WHERE
@@ -383,7 +383,27 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <select id="getAvgCSXsy2ByDate" resultType="java.math.BigDecimal">
         SELECT
-            AVG( NO3_HLJ2_JQR )
+            IFNULL(AVG( NO3_HLJ2_JQR ), 0)
+        FROM
+            t_xinyi_robot
+        WHERE
+            TEST_HOUR BETWEEN #{dateBegin}
+                AND  #{dateEnd}
+    </select>
+
+    <select id="getAvgQyNh31ByDate" resultType="java.math.BigDecimal">
+        SELECT
+            IFNULL(AVG( NH3_1_JQR ), 0)
+        FROM
+            t_xinyi_robot
+        WHERE
+            TEST_HOUR BETWEEN #{dateBegin}
+                AND  #{dateEnd}
+    </select>
+
+    <select id="getAvgQyNh32ByDate" resultType="java.math.BigDecimal">
+        SELECT
+            IFNULL(AVG( NH3_2_JQR ), 0)
         FROM
             t_xinyi_robot
         WHERE