|
@@ -11,6 +11,7 @@ import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.slibra.business.domain.*;
|
|
|
import com.slibra.business.mapper.*;
|
|
|
import com.slibra.business.res.ChartBasic;
|
|
|
+import com.slibra.business.service.ITXinyiForecastComparisonService;
|
|
|
import com.slibra.common.DecimalUtils;
|
|
|
import com.slibra.common.core.domain.TXinyiDaily;
|
|
|
import com.slibra.common.core.controller.BaseController;
|
|
@@ -85,6 +86,9 @@ public class HandleDataController extends BaseController
|
|
|
@Autowired
|
|
|
private AsyncTask asyncTask;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private ITXinyiForecastComparisonService xinyiForecastComparisonService;
|
|
|
+
|
|
|
|
|
|
public static final String[] queryTags = {"信义污水厂JS_COD_Value","信义污水厂JS_PH_Value","信义污水厂JS_SS_Value","信义污水厂JS_ZL_Value","信义污水厂JS_ZA_Value","信义污水厂JS_AD_Value","信义污水厂JS_T_Value","信义污水厂进水泵房液位","信义污水厂出水瞬时流量","信义污水厂升级出水COD","信义污水厂升级出水PH","信义污水厂升级出水SS","信义污水厂升级出水TN","信义污水厂升级出水TP","信义污水厂升级出水氨氮","信义污水厂AIT202_Value","信义污水厂AIT203_Value","信义污水厂AIT207_Value","信义污水厂AIT206_Value","信义污水厂AIT209_Value","信义污水厂AIT210_Value","信义污水厂进水TDS","信义污水厂FT101_Value","信义污水厂SWCHHYHLB1_R_Value","信义污水厂SWCHHYHLB2_R_Value","信义污水厂SWCHHYHLB3_R_Value","信义污水厂SWCHHYHLB4_R_Value","信义污水厂SWCHHYHLB5_R_Value","信义污水厂SWCHHYHLB6_R_Value","信义污水厂SWCWNHLB1_R_Value","信义污水厂SWCWNHLB2_R_Value","信义污水厂SWCWNHLB3_R_Value","信义污水厂SWCWNHLB4_R_Value","信义污水厂SWCWNHLB5_R_Value","信义污水厂GFJ1_R_Value","信义污水厂GFJ2_R_Value","信义污水厂GFJ3_R_Value","信义污水厂GFJ4_R_Value","信义污水厂GFJ5_R_Value","信义污水厂GFJ6_R_Value","信义污水厂GFJ1_KQLL_Value","信义污水厂GFJ2_KQLL_Value","信义污水厂GFJ3_KQLL_Value","信义污水厂GFJ4_KQLL_Value","信义污水厂GFJ5_KQLL_Value","信义污水厂GFJ6_KQLL_Value"};
|
|
|
|
|
@@ -1552,6 +1556,7 @@ public class HandleDataController extends BaseController
|
|
|
|
|
|
|
|
|
private void handlePredictorWarning(String[] split, String hour, String task, List<TXinyiIndustry> tXinyiIndustries6, List<TXinyiRobot> tXinyiRobots6, String date) {
|
|
|
+
|
|
|
String[] hours = hour.split(",");
|
|
|
//2024年6月23日18:28:55 因为存在跨天问题 所以日期也是逗号拼接的
|
|
|
String[] dates = date.split(",");
|
|
@@ -1569,6 +1574,19 @@ public class HandleDataController extends BaseController
|
|
|
//2024年6月20日14:28:31 增加字段,方便查询
|
|
|
tXinyiForecastComparison.setRemark(DateUtil.format(DateUtils.getNowDate(), DateUtils.YYYYMMDDHH_TS));
|
|
|
|
|
|
+ //防止工业库挂掉以后持续预测同一数据
|
|
|
+ //2024年6月20日14:59:23 因为预测bug(以工业库为准,假如工业库挂了,获取的全是挂了时间段后的三小时) 判断是否生成过了否则不生成
|
|
|
+ TXinyiForecastComparison tXinyiForecastComparisonReq = new TXinyiForecastComparison();
|
|
|
+ //2024年08月20日16:24:56 因为remark存放的是当前时间,也就是每个小时的,所以都是不一样的,修复此bug
|
|
|
+// tXinyiForecastComparisonReq.setRemark(tXinyiForecastComparison.getRemark());
|
|
|
+ tXinyiForecastComparisonReq.setCategory(tXinyiForecastComparison.getCategory());
|
|
|
+ //2024年7月18日15:04:37 如果工业库挂掉以后,不管什么时刻,调用预测返回的未来三小时时间都是一样的,再增加一个查询条件
|
|
|
+ tXinyiForecastComparisonReq.setForecastTimeOne(tXinyiForecastComparison.getForecastTimeOne());//一个时刻就可以了 没必要再比较第二和第三时刻了。
|
|
|
+ List<TXinyiForecastComparison> tXinyiForecastComparisons = this.xinyiForecastComparisonService.selectTXinyiForecastComparisonList(tXinyiForecastComparisonReq);
|
|
|
+ if(!CollectionUtils.isEmpty(tXinyiForecastComparisons)){
|
|
|
+ log.error("预测已经进行过了,无需重复运行~~~~~~~~~~~@@@@@@@,要保存的预测数据为{}", JSON.toJSONString(tXinyiForecastComparison));
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
//获取配置表
|
|
|
List<TXinyiNormConfig> tXinyiNormConfigs = this.xinyiNormConfigMapper.selectTXinyiNormConfigList(null);
|
|
@@ -1678,7 +1696,7 @@ public class HandleDataController extends BaseController
|
|
|
chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
|
|
|
chartsDataList.add(chartBasic);
|
|
|
}
|
|
|
- ryTask.handleXinYiWarningsYC(cszzBzz, split, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_TN_YC.getCode(), hour, normConfig,tXinyiIndustry.getCsCod(), tXinyiIndustry, chartsDataList, date);
|
|
|
+ handleXinYiWarningsYC(cszzBzz, split, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_TN_YC.getCode(), hour, normConfig,tXinyiIndustry.getCsCod(), tXinyiIndustry, chartsDataList, date);
|
|
|
}*/else if(BusinessEnum.BigModelForecastEnum.TP.getCode().equals(task)){
|
|
|
//同时调用跃渊的预测接口 保存记录值
|
|
|
try {
|
|
@@ -1814,9 +1832,157 @@ public class HandleDataController extends BaseController
|
|
|
chartsDataList.add(chartBasic);
|
|
|
}
|
|
|
ryTask.handleXinYiWarningsYC(cszzBzz, split, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_XSY_2_YC.getCode(), hour, normConfig, tXinyiRobot.getNo3Hlj2Jqr(), tXinyiIndustry, chartsDataList, date);
|
|
|
+ }else if(BusinessEnum.BigModelForecastEnum.QYXSY1.getCode().equals(task)){
|
|
|
+ //同时调用跃渊的预测接口 保存记录值
|
|
|
+ /*try {
|
|
|
+ String result = HttpUtil.get("http://10.0.3.52:10003/system/forecast?type=7&time=" + DateUtil.format(DateUtils.getNowDate(), DateUtils.YYYY_MM_DD_HH), INT_10000);
|
|
|
+ if(!StringUtils.isBlank(result)){
|
|
|
+ JSONArray array = JSON.parseArray(result);
|
|
|
+ tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
|
|
|
+ tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
|
|
|
+ tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
|
|
|
+ }*/
|
|
|
+ // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
|
|
|
+ /*BigDecimal cscodBzz = new BigDecimal(XIAOSUANYAN_BZK);
|
|
|
+ BigDecimal cscodGkz = new BigDecimal(XIAOSUANYAN_GKZ);*/
|
|
|
+ //2024年7月11日17:19:47 1#好氧硝酸盐、2#好氧硝酸盐使用总氮标准值和管控值来预警
|
|
|
+ BigDecimal cszzBzz = normConfig.getCszzBzz();
|
|
|
+ BigDecimal cszzGkz = normConfig.getCszzGkz();
|
|
|
+ //处理展示数据
|
|
|
+ for (int i = 0; i < tXinyiRobots6.size(); i++) {
|
|
|
+ TXinyiRobot tXinyiRobotTemp = tXinyiRobots6.get(5 - i);
|
|
|
+ ChartBasic chartBasic = new ChartBasic();
|
|
|
+ chartBasic.setTime(tXinyiRobotTemp.getTestHour().substring(11));
|
|
|
+ chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiRobotTemp.getNo3Qyc1Jqr(), INT_2));
|
|
|
+ chartsDataList.add(chartBasic);
|
|
|
+ }
|
|
|
+ for (int i = 0; i < split.length; i++) {
|
|
|
+ String val = split[i];
|
|
|
+ ChartBasic chartBasic = new ChartBasic();
|
|
|
+ chartBasic.setTime(hours[i]);
|
|
|
+ chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
|
|
|
+ chartsDataList.add(chartBasic);
|
|
|
+ }
|
|
|
+ ryTask.handleXinYiWarningsYC(cszzBzz, split, cszzGkz, BusinessEnum.WarningCategoryEnum.QYCXSY_1.getCode(), hour, normConfig, tXinyiRobot.getNo3Hlj2Jqr(), tXinyiIndustry, chartsDataList, date);
|
|
|
+ }else if(BusinessEnum.BigModelForecastEnum.QYXSY2.getCode().equals(task)){
|
|
|
+ //同时调用跃渊的预测接口 保存记录值
|
|
|
+ /*try {
|
|
|
+ String result = HttpUtil.get("http://10.0.3.52:10003/system/forecast?type=7&time=" + DateUtil.format(DateUtils.getNowDate(), DateUtils.YYYY_MM_DD_HH), INT_10000);
|
|
|
+ if(!StringUtils.isBlank(result)){
|
|
|
+ JSONArray array = JSON.parseArray(result);
|
|
|
+ tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
|
|
|
+ tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
|
|
|
+ tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
|
|
|
+ }*/
|
|
|
+ // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
|
|
|
+ /*BigDecimal cscodBzz = new BigDecimal(XIAOSUANYAN_BZK);
|
|
|
+ BigDecimal cscodGkz = new BigDecimal(XIAOSUANYAN_GKZ);*/
|
|
|
+ //2024年7月11日17:19:47 1#好氧硝酸盐、2#好氧硝酸盐使用总氮标准值和管控值来预警
|
|
|
+ BigDecimal cszzBzz = normConfig.getCszzBzz();
|
|
|
+ BigDecimal cszzGkz = normConfig.getCszzGkz();
|
|
|
+ //处理展示数据
|
|
|
+ for (int i = 0; i < tXinyiRobots6.size(); i++) {
|
|
|
+ TXinyiRobot tXinyiRobotTemp = tXinyiRobots6.get(5 - i);
|
|
|
+ ChartBasic chartBasic = new ChartBasic();
|
|
|
+ chartBasic.setTime(tXinyiRobotTemp.getTestHour().substring(11));
|
|
|
+ chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiRobotTemp.getNo3Qyc2Jqr(), INT_2));
|
|
|
+ chartsDataList.add(chartBasic);
|
|
|
+ }
|
|
|
+ for (int i = 0; i < split.length; i++) {
|
|
|
+ String val = split[i];
|
|
|
+ ChartBasic chartBasic = new ChartBasic();
|
|
|
+ chartBasic.setTime(hours[i]);
|
|
|
+ chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
|
|
|
+ chartsDataList.add(chartBasic);
|
|
|
+ }
|
|
|
+ ryTask.handleXinYiWarningsYC(cszzBzz, split, cszzGkz, BusinessEnum.WarningCategoryEnum.QYCXSY_2.getCode(), hour, normConfig, tXinyiRobot.getNo3Hlj2Jqr(), tXinyiIndustry, chartsDataList, date);
|
|
|
+ }else if(BusinessEnum.BigModelForecastEnum.QYNH31.getCode().equals(task)){
|
|
|
+ //同时调用跃渊的预测接口 保存记录值
|
|
|
+ /*try {
|
|
|
+ String result = HttpUtil.get("http://10.0.3.52:10003/system/forecast?type=7&time=" + DateUtil.format(DateUtils.getNowDate(), DateUtils.YYYY_MM_DD_HH), INT_10000);
|
|
|
+ if(!StringUtils.isBlank(result)){
|
|
|
+ JSONArray array = JSON.parseArray(result);
|
|
|
+ tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
|
|
|
+ tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
|
|
|
+ tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
|
|
|
+ }*/
|
|
|
+ // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
|
|
|
+ /*BigDecimal cscodBzz = new BigDecimal(XIAOSUANYAN_BZK);
|
|
|
+ BigDecimal cscodGkz = new BigDecimal(XIAOSUANYAN_GKZ);*/
|
|
|
+ //2024年09月08日11:21:25 采用出水氨氮的标准值和管控值
|
|
|
+ BigDecimal csadBzz = normConfig.getCsadBzz();
|
|
|
+ BigDecimal csadGkz = normConfig.getCsadGkz();
|
|
|
+ //处理展示数据
|
|
|
+ for (int i = 0; i < tXinyiRobots6.size(); i++) {
|
|
|
+ TXinyiRobot tXinyiRobotTemp = tXinyiRobots6.get(5 - i);
|
|
|
+ ChartBasic chartBasic = new ChartBasic();
|
|
|
+ chartBasic.setTime(tXinyiRobotTemp.getTestHour().substring(11));
|
|
|
+ chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiRobotTemp.getNh31Jqr(), INT_2));
|
|
|
+ chartsDataList.add(chartBasic);
|
|
|
+ }
|
|
|
+ for (int i = 0; i < split.length; i++) {
|
|
|
+ String val = split[i];
|
|
|
+ ChartBasic chartBasic = new ChartBasic();
|
|
|
+ chartBasic.setTime(hours[i]);
|
|
|
+ chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
|
|
|
+ chartsDataList.add(chartBasic);
|
|
|
+ }
|
|
|
+ ryTask.handleXinYiWarningsYC(csadBzz, split, csadGkz, BusinessEnum.WarningCategoryEnum.QYAD_1.getCode(), hour, normConfig, tXinyiRobot.getNo3Hlj2Jqr(), tXinyiIndustry, chartsDataList, date);
|
|
|
+ }else if(BusinessEnum.BigModelForecastEnum.QYNH32.getCode().equals(task)){
|
|
|
+ //同时调用跃渊的预测接口 保存记录值
|
|
|
+ /*try {
|
|
|
+ String result = HttpUtil.get("http://10.0.3.52:10003/system/forecast?type=7&time=" + DateUtil.format(DateUtils.getNowDate(), DateUtils.YYYY_MM_DD_HH), INT_10000);
|
|
|
+ if(!StringUtils.isBlank(result)){
|
|
|
+ JSONArray array = JSON.parseArray(result);
|
|
|
+ tXinyiForecastComparison.setYyForecastOne(array.getBigDecimal(6));
|
|
|
+ tXinyiForecastComparison.setYyForecastTwo(array.getBigDecimal(7));
|
|
|
+ tXinyiForecastComparison.setYyForecastThree(array.getBigDecimal(8));
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("调用跃渊的预测接口出现异常,异常信息为{}", e.getMessage());
|
|
|
+ }*/
|
|
|
+ // this.xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
|
|
|
+ /*BigDecimal cscodBzz = new BigDecimal(XIAOSUANYAN_BZK);
|
|
|
+ BigDecimal cscodGkz = new BigDecimal(XIAOSUANYAN_GKZ);*/
|
|
|
+ //2024年09月08日11:21:25 采用出水氨氮的标准值和管控值
|
|
|
+ BigDecimal csadBzz = normConfig.getCsadBzz();
|
|
|
+ BigDecimal csadGkz = normConfig.getCsadGkz();
|
|
|
+ //处理展示数据
|
|
|
+ for (int i = 0; i < tXinyiRobots6.size(); i++) {
|
|
|
+ TXinyiRobot tXinyiRobotTemp = tXinyiRobots6.get(5 - i);
|
|
|
+ ChartBasic chartBasic = new ChartBasic();
|
|
|
+ chartBasic.setTime(tXinyiRobotTemp.getTestHour().substring(11));
|
|
|
+ chartBasic.setVal(DecimalUtils.getAbsAndScale(tXinyiRobotTemp.getNh32Jqr(), INT_2));
|
|
|
+ chartsDataList.add(chartBasic);
|
|
|
+ }
|
|
|
+ for (int i = 0; i < split.length; i++) {
|
|
|
+ String val = split[i];
|
|
|
+ ChartBasic chartBasic = new ChartBasic();
|
|
|
+ chartBasic.setTime(hours[i]);
|
|
|
+ chartBasic.setVal(DecimalUtils.getAbsAndScale(new BigDecimal(val), INT_2));
|
|
|
+ chartsDataList.add(chartBasic);
|
|
|
+ }
|
|
|
+ ryTask.handleXinYiWarningsYC(csadBzz, split, csadGkz, BusinessEnum.WarningCategoryEnum.QYAD_2.getCode(), hour, normConfig, tXinyiRobot.getNo3Hlj2Jqr(), tXinyiIndustry, chartsDataList, date);
|
|
|
}else {
|
|
|
log.error("暂未支持的类型{}", task);
|
|
|
}
|
|
|
+ //插入到数据库
|
|
|
+ //2024年6月21日14:18:55 如果红杉预测和跃渊预测都有数据再保存
|
|
|
+ //2024年7月8日15:15:46 逻辑调整:只要红杉的数据不为空就保存
|
|
|
+ if(Objects.isNull(tXinyiForecastComparison.getHsForecastOne()) || Objects.isNull(tXinyiForecastComparison.getHsForecastTwo()) ||Objects.isNull(tXinyiForecastComparison.getHsForecastThree())){
|
|
|
+// || Objects.isNull(tXinyiForecastComparison.getYyForecastOne()) || Objects.isNull(tXinyiForecastComparison.getYyForecastTwo()) || Objects.isNull(tXinyiForecastComparison.getYyForecastThree())){
|
|
|
+ log.error("保存预测对比数据时,有存在不满足条件的数据,不再保存数据,数据为{}", JSON.toJSONString(tXinyiForecastComparison));
|
|
|
+ }else
|
|
|
+ xinyiForecastComparisonService.insertTXinyiForecastComparison(tXinyiForecastComparison);
|
|
|
}
|
|
|
}
|
|
|
|