|
@@ -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;
|