|
@@ -1444,9 +1444,9 @@ public class RyTask
|
|
|
}
|
|
|
//2025年02月11日15:48:07 额外记录基地模型预测的值
|
|
|
try {
|
|
|
- this.updateJDModelPredict(tXinyiForecastComparison);
|
|
|
+ this.updateJDModelPredictCod(tXinyiForecastComparison);
|
|
|
} catch (Exception e) {
|
|
|
- log.error("处理 基地模型预测的值的时候出现异常,异常信息为{}", e.getMessage());
|
|
|
+ log.error("处理 基地模型cod预测的值的时候出现异常,异常信息为{}", e.getMessage());
|
|
|
}
|
|
|
// this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
|
|
|
BigDecimal cscodBzz = normConfig.getCscodBzz();
|
|
@@ -1609,6 +1609,12 @@ public class RyTask
|
|
|
} catch (Exception e) {
|
|
|
log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
|
|
|
}
|
|
|
+ //2025年02月11日15:48:07 额外记录基地模型预测的值
|
|
|
+ try {
|
|
|
+ this.updateJDModelPredictHyXsy1(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);*/
|
|
@@ -1644,6 +1650,12 @@ public class RyTask
|
|
|
} catch (Exception e) {
|
|
|
log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
|
|
|
}
|
|
|
+ //2025年02月11日15:48:07 额外记录基地模型预测的值
|
|
|
+ try {
|
|
|
+ this.updateJDModelPredictHyXsy2(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);*/
|
|
@@ -1819,7 +1831,11 @@ public class RyTask
|
|
|
this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
|
|
|
}
|
|
|
|
|
|
- private void updateJDModelPredict(TXinyiForecastComparison tXinyiForecastComparison) {
|
|
|
+ /**
|
|
|
+ * 额外通过计算处理要保存的预测对象-机理模型cod预测
|
|
|
+ * @param tXinyiForecastComparison
|
|
|
+ */
|
|
|
+ private void updateJDModelPredictCod(TXinyiForecastComparison tXinyiForecastComparison) {
|
|
|
//现获取基地模型的配置 如果没有执行返回
|
|
|
TPredictConf tPredictConfReq = new TPredictConf();
|
|
|
tPredictConfReq.setType(BusinessEnum.JLModelPredictEnum.COD.getCode());
|
|
@@ -1836,10 +1852,10 @@ public class RyTask
|
|
|
TPredictConf tPredictConf = tPredictConfs.get(0);
|
|
|
BigDecimal a = Objects.isNull(tPredictConf.getA()) ? BigDecimal.valueOf(30) : tPredictConf.getA();
|
|
|
BigDecimal b = Objects.isNull(tPredictConf.getB()) ? BigDecimal.valueOf(55.14) : tPredictConf.getB();
|
|
|
- Integer xMin = Objects.isNull(tPredictConf.getxMin()) ? 12 : tPredictConf.getxMin();
|
|
|
- Integer xMax = Objects.isNull(tPredictConf.getxMax()) ? 18 : tPredictConf.getxMax();
|
|
|
- Integer y1Min = Objects.isNull(tPredictConf.getY1Min()) ? 6 : tPredictConf.getY1Min();
|
|
|
- Integer y1Max = Objects.isNull(tPredictConf.getY1Max()) ? 12 : tPredictConf.getY1Max();
|
|
|
+ int xMin = Objects.isNull(tPredictConf.getxMin()) ? 12 : tPredictConf.getxMin();
|
|
|
+ int xMax = Objects.isNull(tPredictConf.getxMax()) ? 18 : tPredictConf.getxMax();
|
|
|
+ int y1Min = Objects.isNull(tPredictConf.getY1Min()) ? 6 : tPredictConf.getY1Min();
|
|
|
+ int y1Max = Objects.isNull(tPredictConf.getY1Max()) ? 12 : tPredictConf.getY1Max();
|
|
|
BigDecimal x1 = Objects.isNull(tPredictConf.getX1()) ? BigDecimal.valueOf(91.85) : tPredictConf.getX1();
|
|
|
//计算第一个值逻辑处理
|
|
|
//计算X的值
|
|
@@ -1879,6 +1895,136 @@ public class RyTask
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 额外通过计算处理要保存的预测对象-机理模型好氧硝酸盐#1预测
|
|
|
+ * @param tXinyiForecastComparison
|
|
|
+ */
|
|
|
+ private void updateJDModelPredictHyXsy1(TXinyiForecastComparison tXinyiForecastComparison) {
|
|
|
+ //现获取基地模型的配置 如果没有执行返回
|
|
|
+ TPredictConf tPredictConfReq = new TPredictConf();
|
|
|
+ tPredictConfReq.setType(BusinessEnum.JLModelPredictEnum.HY_XSY_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(6) : tPredictConf.getA();
|
|
|
+ BigDecimal b = Objects.isNull(tPredictConf.getB()) ? BigDecimal.valueOf(56.86) : tPredictConf.getB();
|
|
|
+ int xMin = Objects.isNull(tPredictConf.getxMin()) ? 7 : tPredictConf.getxMin();
|
|
|
+ int xMax = Objects.isNull(tPredictConf.getxMax()) ? 12 : tPredictConf.getxMax();
|
|
|
+ int y1Min = Objects.isNull(tPredictConf.getY1Min()) ? 7 : tPredictConf.getY1Min();
|
|
|
+ int y1Max = Objects.isNull(tPredictConf.getY1Max()) ? 12 : tPredictConf.getY1Max();
|
|
|
+ BigDecimal x1 = Objects.isNull(tPredictConf.getX1()) ? BigDecimal.valueOf(94.77) : tPredictConf.getX1();
|
|
|
+ //计算第一个值逻辑处理
|
|
|
+ //计算X的值
|
|
|
+ Date nowDate = DateUtils.getNowDate();
|
|
|
+ BigDecimal x = this.xinyiIndustryMapper.getAvgJSTnByDate(DateUtil.format(DateUtils.plusHour(-xMax, nowDate), DateUtils.YYYYMMDDHH_TS), DateUtil.format(DateUtils.plusHour(-xMin, nowDate), DateUtils.YYYYMMDDHH_TS));
|
|
|
+ //计算y1
|
|
|
+ BigDecimal y1 = this.xinyiRobotMapper.getAvgCSXsy1ByDate(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.getAvgJSTnByDate(DateUtil.format(DateUtils.plusHour(-xMax, nowDate), DateUtils.YYYYMMDDHH_TS), DateUtil.format(DateUtils.plusHour(-xMin, nowDate), DateUtils.YYYYMMDDHH_TS));
|
|
|
+ //计算y1
|
|
|
+ y1 = this.xinyiRobotMapper.getAvgCSXsy1ByDate(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.getAvgJSTnByDate(DateUtil.format(DateUtils.plusHour(-xMax, nowDate), DateUtils.YYYYMMDDHH_TS), DateUtil.format(DateUtils.plusHour(-xMin, nowDate), DateUtils.YYYYMMDDHH_TS));
|
|
|
+ //计算y1
|
|
|
+ y1 = this.xinyiRobotMapper.getAvgCSXsy1ByDate(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 updateJDModelPredictHyXsy2(TXinyiForecastComparison tXinyiForecastComparison) {
|
|
|
+ //现获取基地模型的配置 如果没有执行返回
|
|
|
+ TPredictConf tPredictConfReq = new TPredictConf();
|
|
|
+ tPredictConfReq.setType(BusinessEnum.JLModelPredictEnum.HY_XSY_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(6) : tPredictConf.getA();
|
|
|
+ BigDecimal b = Objects.isNull(tPredictConf.getB()) ? BigDecimal.valueOf(56.86) : tPredictConf.getB();
|
|
|
+ int xMin = Objects.isNull(tPredictConf.getxMin()) ? 7 : tPredictConf.getxMin();
|
|
|
+ int xMax = Objects.isNull(tPredictConf.getxMax()) ? 12 : tPredictConf.getxMax();
|
|
|
+ int y1Min = Objects.isNull(tPredictConf.getY1Min()) ? 7 : tPredictConf.getY1Min();
|
|
|
+ int y1Max = Objects.isNull(tPredictConf.getY1Max()) ? 12 : tPredictConf.getY1Max();
|
|
|
+ BigDecimal x1 = Objects.isNull(tPredictConf.getX1()) ? BigDecimal.valueOf(94.77) : tPredictConf.getX1();
|
|
|
+ //计算第一个值逻辑处理
|
|
|
+ //计算X的值
|
|
|
+ Date nowDate = DateUtils.getNowDate();
|
|
|
+ BigDecimal x = this.xinyiIndustryMapper.getAvgJSTnByDate(DateUtil.format(DateUtils.plusHour(-xMax, nowDate), DateUtils.YYYYMMDDHH_TS), DateUtil.format(DateUtils.plusHour(-xMin, nowDate), DateUtils.YYYYMMDDHH_TS));
|
|
|
+ //计算y1
|
|
|
+ BigDecimal y1 = this.xinyiRobotMapper.getAvgCSXsy2ByDate(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.getAvgJSTnByDate(DateUtil.format(DateUtils.plusHour(-xMax, nowDate), DateUtils.YYYYMMDDHH_TS), DateUtil.format(DateUtils.plusHour(-xMin, nowDate), DateUtils.YYYYMMDDHH_TS));
|
|
|
+ //计算y1
|
|
|
+ y1 = this.xinyiRobotMapper.getAvgCSXsy2ByDate(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.getAvgJSTnByDate(DateUtil.format(DateUtils.plusHour(-xMax, nowDate), DateUtils.YYYYMMDDHH_TS), DateUtil.format(DateUtils.plusHour(-xMin, nowDate), DateUtils.YYYYMMDDHH_TS));
|
|
|
+ //计算y1
|
|
|
+ y1 = this.xinyiRobotMapper.getAvgCSXsy2ByDate(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;
|