|
@@ -2403,7 +2403,7 @@ public class AsyncTask {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
+ //下面是最原始的处理 超标准 超管控报警
|
|
|
BigDecimal multiply = csBzz.multiply(new BigDecimal(MyConstants.SCALE_VALUE));
|
|
|
TXinyiWarningRecord tXinyiWarningRecord = new TXinyiWarningRecord();
|
|
|
/*String category = BusinessEnum.WarningCategoryEnum.CS_AD.getCode();*/
|
|
@@ -2975,7 +2975,7 @@ public class AsyncTask {
|
|
|
|
|
|
/**
|
|
|
*
|
|
|
- * 先判断该指标是否超过最大值,如果超过了,返回对应的超过的值; 如果没有超标,返回null。
|
|
|
+ * 【工业库异常升高】先判断该指标是否超过最大值,如果超过了,返回对应的超过的值; 如果没有超标,返回null。
|
|
|
* 一个字段返回用作2个地方
|
|
|
* @param currentVal
|
|
|
* @param category
|
|
@@ -3086,6 +3086,188 @@ public class AsyncTask {
|
|
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * 【化验室异常升高】先判断该指标是否超过最大值,如果超过了,返回对应的超过的值; 如果没有超标,返回null。
|
|
|
+ * 一个字段返回用作2个地方
|
|
|
+ * @param currentVal
|
|
|
+ * @param category
|
|
|
+ * @param tXinyiRobots
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private BigDecimal existsRobotYCSG(BigDecimal currentVal, String category, List<TXinyiRobot> tXinyiRobots) {
|
|
|
+ BigDecimal result = null;//默认不超标
|
|
|
+ TXinyiRobot tXinyiRobot1 = tXinyiRobots.get(INDEX_1);
|
|
|
+ TXinyiRobot tXinyiRobot2 = tXinyiRobots.get(INDEX_2);
|
|
|
+ BigDecimal compareVal = BigDecimal.valueOf(YCSG_VAL_CONF);
|
|
|
+ if(BusinessEnum.WarningCategoryEnum.ROBOT_XSY_1.getCode().equals(category)){
|
|
|
+ BigDecimal no3Hlj1Jqr1 = tXinyiRobot1.getNo3Hlj1Jqr();
|
|
|
+ BigDecimal no3Hlj1Jqr2 = tXinyiRobot2.getNo3Hlj1Jqr();
|
|
|
+ if(!Objects.isNull(currentVal) && !Objects.isNull(no3Hlj1Jqr1) && !Objects.isNull(no3Hlj1Jqr2)){
|
|
|
+ BigDecimal divide1 = currentVal.subtract(no3Hlj1Jqr1).divide(no3Hlj1Jqr1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal divide2 = no3Hlj1Jqr1.subtract(no3Hlj1Jqr2).divide(no3Hlj1Jqr2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+ if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
|
|
|
+ result = divide1;
|
|
|
+ }
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.ROBOT_XSY_2.getCode().equals(category)){
|
|
|
+ BigDecimal no3Hlj2Jqr1 = tXinyiRobot1.getNo3Hlj2Jqr();
|
|
|
+ BigDecimal no3Hlj2Jqr2 = tXinyiRobot2.getNo3Hlj2Jqr();
|
|
|
+ if(!Objects.isNull(currentVal) && !Objects.isNull(no3Hlj2Jqr1) && !Objects.isNull(no3Hlj2Jqr2)){
|
|
|
+ BigDecimal divide1 = currentVal.subtract(no3Hlj2Jqr1).divide(no3Hlj2Jqr1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal divide2 = no3Hlj2Jqr1.subtract(no3Hlj2Jqr2).divide(no3Hlj2Jqr2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+ if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
|
|
|
+ result = divide1;
|
|
|
+ }
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.ROBOT_ECCZLSY.getCode().equals(category)){
|
|
|
+ BigDecimal tpRccJqr1 = tXinyiRobot1.getTpRccJqr();
|
|
|
+ BigDecimal tpRccJqr2 = tXinyiRobot2.getTpRccJqr();
|
|
|
+ if(!Objects.isNull(currentVal) && !Objects.isNull(tpRccJqr1) && !Objects.isNull(tpRccJqr2)){
|
|
|
+ BigDecimal divide1 = currentVal.subtract(tpRccJqr1).divide(tpRccJqr1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal divide2 = tpRccJqr1.subtract(tpRccJqr2).divide(tpRccJqr2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+ if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
|
|
|
+ result = divide1;
|
|
|
+ }
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_AD.getCode().equals(category)){//2025年02月25日16:23:08 合并一个指标:出水氨氮 通过计算获得
|
|
|
+ //计算得到对应的值
|
|
|
+ //计算1(1池)
|
|
|
+ BigDecimal no3Qyc1Jqr11 = tXinyiRobot1.getNo3Qyc1Jqr();
|
|
|
+ BigDecimal nh31Jqr11 = tXinyiRobot1.getNh31Jqr();
|
|
|
+ BigDecimal no3Hlj1Jqr11 = tXinyiRobot1.getNo3Hlj1Jqr();
|
|
|
+ if(Objects.isNull(no3Qyc1Jqr11))
|
|
|
+ no3Qyc1Jqr11 = BigDecimal.ZERO;
|
|
|
+ if(Objects.isNull(nh31Jqr11))
|
|
|
+ nh31Jqr11 = BigDecimal.ZERO;
|
|
|
+ if(Objects.isNull(no3Hlj1Jqr11))
|
|
|
+ no3Hlj1Jqr11 = BigDecimal.ZERO;
|
|
|
+ BigDecimal anDan11 = no3Qyc1Jqr11.add(nh31Jqr11).subtract(no3Hlj1Jqr11);
|
|
|
+ //计算1(2池)
|
|
|
+ BigDecimal no3Qyc1Jqr12 = tXinyiRobot1.getNo3Qyc2Jqr();
|
|
|
+ BigDecimal nh31Jqr12 = tXinyiRobot1.getNh32Jqr();
|
|
|
+ BigDecimal no3Hlj1Jqr12 = tXinyiRobot1.getNo3Hlj2Jqr();
|
|
|
+ if(Objects.isNull(no3Qyc1Jqr12))
|
|
|
+ no3Qyc1Jqr12 = BigDecimal.ZERO;
|
|
|
+ if(Objects.isNull(nh31Jqr12))
|
|
|
+ nh31Jqr12 = BigDecimal.ZERO;
|
|
|
+ if(Objects.isNull(no3Hlj1Jqr12))
|
|
|
+ no3Hlj1Jqr12 = BigDecimal.ZERO;
|
|
|
+ BigDecimal anDan12 = no3Qyc1Jqr12.add(nh31Jqr12).subtract(no3Hlj1Jqr12);
|
|
|
+ BigDecimal anDan1 = anDan11.add(anDan12).divide(DECIMAL_2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+
|
|
|
+ //计算2(1池)
|
|
|
+ BigDecimal no3Qyc1Jqr21 = tXinyiRobot2.getNo3Qyc1Jqr();
|
|
|
+ BigDecimal nh31Jqr21 = tXinyiRobot2.getNh31Jqr();
|
|
|
+ BigDecimal no3Hlj1Jqr21 = tXinyiRobot2.getNo3Hlj1Jqr();
|
|
|
+ if(Objects.isNull(no3Qyc1Jqr21))
|
|
|
+ no3Qyc1Jqr21 = BigDecimal.ZERO;
|
|
|
+ if(Objects.isNull(nh31Jqr21))
|
|
|
+ nh31Jqr21 = BigDecimal.ZERO;
|
|
|
+ if(Objects.isNull(no3Hlj1Jqr21))
|
|
|
+ no3Hlj1Jqr21 = BigDecimal.ZERO;
|
|
|
+ BigDecimal anDan21 = no3Qyc1Jqr21.add(nh31Jqr21).subtract(no3Hlj1Jqr21);
|
|
|
+ //计算2(2池)
|
|
|
+ BigDecimal no3Qyc1Jqr22 = tXinyiRobot2.getNo3Qyc2Jqr();
|
|
|
+ BigDecimal nh31Jqr22 = tXinyiRobot2.getNh32Jqr();
|
|
|
+ BigDecimal no3Hlj1Jqr22 = tXinyiRobot2.getNo3Hlj2Jqr();
|
|
|
+ if(Objects.isNull(no3Qyc1Jqr22))
|
|
|
+ no3Qyc1Jqr22 = BigDecimal.ZERO;
|
|
|
+ if(Objects.isNull(nh31Jqr22))
|
|
|
+ nh31Jqr22 = BigDecimal.ZERO;
|
|
|
+ if(Objects.isNull(no3Hlj1Jqr22))
|
|
|
+ no3Hlj1Jqr22 = BigDecimal.ZERO;
|
|
|
+ BigDecimal anDan22 = no3Qyc1Jqr22.add(nh31Jqr22).subtract(no3Hlj1Jqr22);
|
|
|
+ BigDecimal anDan2 = anDan21.add(anDan22).divide(DECIMAL_2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+
|
|
|
+ if(!Objects.isNull(currentVal) && !Objects.isNull(anDan1) && !Objects.isNull(anDan2)){
|
|
|
+ BigDecimal divide1 = currentVal.subtract(anDan1).divide(anDan1, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal divide2 = anDan1.subtract(anDan2).divide(anDan2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+ if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
|
|
|
+ result = divide1;
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ log.error("化验室暂时还不支持的报警类型~~~~");
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * 【化验室异常偏低】先判断该指标计算值是否大于最低阈值,如果超过了,返回对应的超过的值; 如果没有超标,返回null。
|
|
|
+ * 一个字段返回用作2个地方
|
|
|
+ * @param currentVal
|
|
|
+ * @param category
|
|
|
+ * @param tXinyiRobot1
|
|
|
+ * @param bzz
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private BigDecimal existsRobotYCPD(BigDecimal currentVal, String category, TXinyiRobot tXinyiRobot1, BigDecimal bzz) {
|
|
|
+ BigDecimal result = null;//默认不超标
|
|
|
+ BigDecimal compareVal = BigDecimal.valueOf(YCPD_VAL_CONF);
|
|
|
+ if(BusinessEnum.WarningCategoryEnum.ROBOT_XSY_1.getCode().equals(category)){
|
|
|
+ BigDecimal no3Hlj1Jqr1 = tXinyiRobot1.getNo3Hlj1Jqr();
|
|
|
+ if(!Objects.isNull(currentVal) && !Objects.isNull(no3Hlj1Jqr1)){
|
|
|
+ BigDecimal divide1 = bzz.subtract(currentVal).divide(bzz, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal divide2 = bzz.subtract(no3Hlj1Jqr1).divide(bzz, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+ if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
|
|
|
+ result = divide1;
|
|
|
+ }
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.ROBOT_XSY_2.getCode().equals(category)){
|
|
|
+ BigDecimal no3Hlj2Jqr1 = tXinyiRobot1.getNo3Hlj2Jqr();
|
|
|
+ if(!Objects.isNull(currentVal) && !Objects.isNull(no3Hlj2Jqr1)){
|
|
|
+ BigDecimal divide1 = bzz.subtract(currentVal).divide(bzz, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal divide2 = bzz.subtract(no3Hlj2Jqr1).divide(bzz, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+ if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
|
|
|
+ result = divide1;
|
|
|
+ }
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.ROBOT_ECCZLSY.getCode().equals(category)){
|
|
|
+ BigDecimal tpRccJqr1 = tXinyiRobot1.getTpRccJqr();
|
|
|
+ if(!Objects.isNull(currentVal) && !Objects.isNull(tpRccJqr1)){
|
|
|
+ BigDecimal divide1 = bzz.subtract(currentVal).divide(bzz, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal divide2 = bzz.subtract(tpRccJqr1).divide(bzz, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+ if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
|
|
|
+ result = divide1;
|
|
|
+ }
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.CS_AD.getCode().equals(category)){//2025年02月25日16:23:08 合并一个指标:出水氨氮 通过计算获得
|
|
|
+ //计算得到对应的值
|
|
|
+ //计算1(1池)
|
|
|
+ BigDecimal no3Qyc1Jqr11 = tXinyiRobot1.getNo3Qyc1Jqr();
|
|
|
+ BigDecimal nh31Jqr11 = tXinyiRobot1.getNh31Jqr();
|
|
|
+ BigDecimal no3Hlj1Jqr11 = tXinyiRobot1.getNo3Hlj1Jqr();
|
|
|
+ if(Objects.isNull(no3Qyc1Jqr11))
|
|
|
+ no3Qyc1Jqr11 = BigDecimal.ZERO;
|
|
|
+ if(Objects.isNull(nh31Jqr11))
|
|
|
+ nh31Jqr11 = BigDecimal.ZERO;
|
|
|
+ if(Objects.isNull(no3Hlj1Jqr11))
|
|
|
+ no3Hlj1Jqr11 = BigDecimal.ZERO;
|
|
|
+ BigDecimal anDan11 = no3Qyc1Jqr11.add(nh31Jqr11).subtract(no3Hlj1Jqr11);
|
|
|
+ //计算1(2池)
|
|
|
+ BigDecimal no3Qyc1Jqr12 = tXinyiRobot1.getNo3Qyc2Jqr();
|
|
|
+ BigDecimal nh31Jqr12 = tXinyiRobot1.getNh32Jqr();
|
|
|
+ BigDecimal no3Hlj1Jqr12 = tXinyiRobot1.getNo3Hlj2Jqr();
|
|
|
+ if(Objects.isNull(no3Qyc1Jqr12))
|
|
|
+ no3Qyc1Jqr12 = BigDecimal.ZERO;
|
|
|
+ if(Objects.isNull(nh31Jqr12))
|
|
|
+ nh31Jqr12 = BigDecimal.ZERO;
|
|
|
+ if(Objects.isNull(no3Hlj1Jqr12))
|
|
|
+ no3Hlj1Jqr12 = BigDecimal.ZERO;
|
|
|
+ BigDecimal anDan12 = no3Qyc1Jqr12.add(nh31Jqr12).subtract(no3Hlj1Jqr12);
|
|
|
+ BigDecimal anDan1 = anDan11.add(anDan12).divide(DECIMAL_2, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+ if(!Objects.isNull(currentVal) && !Objects.isNull(anDan1)){
|
|
|
+ BigDecimal divide1 = bzz.subtract(currentVal).divide(bzz, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal divide2 = bzz.subtract(anDan1).divide(bzz, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+ if(divide1.compareTo(compareVal) > 0 && divide2.compareTo(compareVal) > 0)
|
|
|
+ result = divide1;
|
|
|
+ }
|
|
|
+
|
|
|
+ }else{
|
|
|
+ log.error("化验室暂时还不支持的报警类型~~~~");
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
*
|
|
|
* 判断当前时间和上个时间段的值是否存在连续不变
|
|
@@ -3436,10 +3618,137 @@ public class AsyncTask {
|
|
|
|
|
|
/**
|
|
|
* 处理机器人化验数据报警
|
|
|
- * @param uniqueList
|
|
|
+ * 2025年02月25日15:54:05 此报警不再使用
|
|
|
*/
|
|
|
- public void handleRobotWarning(List<TXinyiRobot> uniqueList) {
|
|
|
- log.info("进入了定时任务判断机器人化验库是否超标及后续逻辑");
|
|
|
+// public void handleRobotWarning(List<TXinyiRobot> uniqueList) {
|
|
|
+// log.info("进入了定时任务判断机器人化验库是否超标及后续逻辑");
|
|
|
+// //查询配置
|
|
|
+// List<TXinyiNormConfig> tXinyiNormConfigs = this.xinyiNormConfigMapper.selectTXinyiNormConfigList(null);
|
|
|
+// if(CollectionUtils.isEmpty(tXinyiNormConfigs))
|
|
|
+// throw new RuntimeException("未查询到配置信息");
|
|
|
+// TXinyiNormConfig normConfig = tXinyiNormConfigs.get(0);
|
|
|
+//
|
|
|
+// //查询最新的一条工业库的数据(showvalue展示使用)
|
|
|
+// List<TXinyiIndustry> tXinyiIndustries = this.xinyiIndustryMapper.selectNIndustry(1);
|
|
|
+// TXinyiIndustry tXinyiIndustry = CollectionUtils.isEmpty(tXinyiIndustries) ? new TXinyiIndustry() : tXinyiIndustries.get(0);
|
|
|
+//
|
|
|
+// //处理数据
|
|
|
+// for (TXinyiRobot tXinyiRobot : uniqueList) {
|
|
|
+// //2024年7月11日17:27:32 化验室报警项原有总氮和总氮改为 1#好氧硝酸盐、2#好氧硝酸盐、二沉池正磷酸盐
|
|
|
+// //处理总氮和总磷报警
|
|
|
+// //总氮
|
|
|
+// /*BigDecimal no3Hlj1Jqr = tXinyiRobot.getNo3Hlj1Jqr();
|
|
|
+// BigDecimal no3Hlj2Jqr = tXinyiRobot.getNo3Hlj2Jqr();
|
|
|
+// if(!Objects.isNull(no3Hlj1Jqr) && !Objects.isNull(no3Hlj2Jqr)){
|
|
|
+// BigDecimal csTn = (no3Hlj1Jqr.add(no3Hlj2Jqr)).divide((new BigDecimal("2").multiply(ROBOT_HY_DIVIDE)), NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+// BigDecimal cszzBzz = normConfig.getCszzBzz();
|
|
|
+// BigDecimal cszzGkz = normConfig.getCszzGkz();
|
|
|
+// if(!Objects.isNull(cszzBzz)){
|
|
|
+// handleXinYiWarningsRobot(cszzBzz, csTn, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_ZD.getCode(), tXinyiIndustry, normConfig);
|
|
|
+// }
|
|
|
+// }*/
|
|
|
+// //总氮的标准值和管控值
|
|
|
+// BigDecimal cszzBzz = normConfig.getCszzBzz();
|
|
|
+// BigDecimal cszzGkz = normConfig.getCszzGkz();
|
|
|
+// //氨氮的标准值和管控值
|
|
|
+// BigDecimal csadBzz = normConfig.getCsadBzz();
|
|
|
+// BigDecimal csadGkz = normConfig.getCsadGkz();
|
|
|
+//
|
|
|
+// BigDecimal jsSlq = tXinyiIndustry.getJsSlq();
|
|
|
+// BigDecimal jsslSjz = normConfig.getJsslSjz();
|
|
|
+//
|
|
|
+// //#1好氧硝酸盐
|
|
|
+// BigDecimal no3Hlj1Jqr = tXinyiRobot.getNo3Hlj1Jqr();
|
|
|
+// if(!Objects.isNull(no3Hlj1Jqr)){
|
|
|
+// if(!Objects.isNull(cszzBzz)){
|
|
|
+// handleXinYiWarningsRobotOrigin(cszzBzz, no3Hlj1Jqr, cszzGkz, ROBOT_XSY_1.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// //#2好氧硝酸盐
|
|
|
+// BigDecimal no3Hlj2Jqr = tXinyiRobot.getNo3Hlj2Jqr();
|
|
|
+// if(!Objects.isNull(no3Hlj2Jqr)){
|
|
|
+// if(!Objects.isNull(cszzBzz)){
|
|
|
+// handleXinYiWarningsRobotOrigin(cszzBzz, no3Hlj2Jqr, cszzGkz, ROBOT_XSY_2.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// //总磷
|
|
|
+// BigDecimal tpRccJqr = tXinyiRobot.getTpRccJqr();
|
|
|
+// if(!Objects.isNull(tpRccJqr)){
|
|
|
+// BigDecimal csTp = tpRccJqr.divide(ROBOT_HY_DIVIDE, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+// BigDecimal cszlBzz = normConfig.getCszlBzz();
|
|
|
+// BigDecimal cszlGkz = normConfig.getCszlGkz();
|
|
|
+// if(!Objects.isNull(cszlBzz)){
|
|
|
+// handleXinYiWarningsRobotOrigin(cszlBzz, csTp, cszlGkz, ROBOT_ECCZLSY.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTp(), jsslSjz, normConfig.getJszlSjz()));
|
|
|
+// }
|
|
|
+// }
|
|
|
+//
|
|
|
+// //2024年7月18日10:48:15 新增报警:出水氨氮 - 连续检测报警
|
|
|
+// //1池
|
|
|
+// /*BigDecimal no3Qyc1Jqr = tXinyiRobot.getNo3Qyc1Jqr();
|
|
|
+// BigDecimal nh31Jqr = tXinyiRobot.getNh31Jqr();
|
|
|
+// //判断 增加容错
|
|
|
+// 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);
|
|
|
+// if(!Objects.isNull(csadBzz)){
|
|
|
+// handleXinYiWarningsRobot(csadBzz, anDan1, csadGkz, ROBOT_ANDAN_1.getCode(), tXinyiIndustry, normConfig);
|
|
|
+// }
|
|
|
+//
|
|
|
+// //2池
|
|
|
+// BigDecimal no3Qyc2Jqr = tXinyiRobot.getNo3Qyc2Jqr();
|
|
|
+// BigDecimal nh32Jqr = tXinyiRobot.getNh32Jqr();
|
|
|
+// //判断 增加容错
|
|
|
+// 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);
|
|
|
+// if(!Objects.isNull(csadBzz)){
|
|
|
+// handleXinYiWarningsRobot(csadBzz, anDan2, csadGkz, ROBOT_ANDAN_2.getCode(), tXinyiIndustry, normConfig);
|
|
|
+// }*/
|
|
|
+//
|
|
|
+// BigDecimal no3Qyc1Jqr = tXinyiRobot.getNo3Qyc1Jqr();
|
|
|
+// BigDecimal nh31Jqr = tXinyiRobot.getNh31Jqr();
|
|
|
+// //判断 增加容错
|
|
|
+// 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);
|
|
|
+//
|
|
|
+//
|
|
|
+// //2池
|
|
|
+// BigDecimal no3Qyc2Jqr = tXinyiRobot.getNo3Qyc2Jqr();
|
|
|
+// BigDecimal nh32Jqr = tXinyiRobot.getNh32Jqr();
|
|
|
+// //判断 增加容错
|
|
|
+// 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);
|
|
|
+// if(!Objects.isNull(csadBzz)){
|
|
|
+// BigDecimal divide = anDan1.add(anDan2).divide(DECIMAL_2, INT_2, RoundingMode.HALF_UP);
|
|
|
+// handleXinYiWarningsRobotOrigin(csadBzz, divide, csadGkz, ROBOT_CS_AD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsNh3(), jsslSjz, normConfig.getJsadSjz()));
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
+
|
|
|
+ public void handleRobotWarningNew(TXinyiRobot tXinyiRobot) {
|
|
|
+
|
|
|
+ log.info("进入了定时任务判断机器人化验库是否超标及后续逻辑--新的逻辑处理");
|
|
|
//查询配置
|
|
|
List<TXinyiNormConfig> tXinyiNormConfigs = this.xinyiNormConfigMapper.selectTXinyiNormConfigList(null);
|
|
|
if(CollectionUtils.isEmpty(tXinyiNormConfigs))
|
|
@@ -3450,120 +3759,129 @@ public class AsyncTask {
|
|
|
List<TXinyiIndustry> tXinyiIndustries = this.xinyiIndustryMapper.selectNIndustry(1);
|
|
|
TXinyiIndustry tXinyiIndustry = CollectionUtils.isEmpty(tXinyiIndustries) ? new TXinyiIndustry() : tXinyiIndustries.get(0);
|
|
|
|
|
|
- //处理数据
|
|
|
- for (TXinyiRobot tXinyiRobot : uniqueList) {
|
|
|
- //2024年7月11日17:27:32 化验室报警项原有总氮和总氮改为 1#好氧硝酸盐、2#好氧硝酸盐、二沉池正磷酸盐
|
|
|
- //处理总氮和总磷报警
|
|
|
- //总氮
|
|
|
- /*BigDecimal no3Hlj1Jqr = tXinyiRobot.getNo3Hlj1Jqr();
|
|
|
- BigDecimal no3Hlj2Jqr = tXinyiRobot.getNo3Hlj2Jqr();
|
|
|
- if(!Objects.isNull(no3Hlj1Jqr) && !Objects.isNull(no3Hlj2Jqr)){
|
|
|
- BigDecimal csTn = (no3Hlj1Jqr.add(no3Hlj2Jqr)).divide((new BigDecimal("2").multiply(ROBOT_HY_DIVIDE)), NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
- BigDecimal cszzBzz = normConfig.getCszzBzz();
|
|
|
- BigDecimal cszzGkz = normConfig.getCszzGkz();
|
|
|
- if(!Objects.isNull(cszzBzz)){
|
|
|
- handleXinYiWarningsRobot(cszzBzz, csTn, cszzGkz, BusinessEnum.WarningCategoryEnum.CS_ZD.getCode(), tXinyiIndustry, normConfig);
|
|
|
- }
|
|
|
- }*/
|
|
|
- //总氮的标准值和管控值
|
|
|
- BigDecimal cszzBzz = normConfig.getCszzBzz();
|
|
|
- BigDecimal cszzGkz = normConfig.getCszzGkz();
|
|
|
- //氨氮的标准值和管控值
|
|
|
- BigDecimal csadBzz = normConfig.getCsadBzz();
|
|
|
- BigDecimal csadGkz = normConfig.getCsadGkz();
|
|
|
-
|
|
|
- BigDecimal jsSlq = tXinyiIndustry.getJsSlq();
|
|
|
- BigDecimal jsslSjz = normConfig.getJsslSjz();
|
|
|
-
|
|
|
- //#1好氧硝酸盐
|
|
|
- BigDecimal no3Hlj1Jqr = tXinyiRobot.getNo3Hlj1Jqr();
|
|
|
- if(!Objects.isNull(no3Hlj1Jqr)){
|
|
|
- if(!Objects.isNull(cszzBzz)){
|
|
|
- handleXinYiWarningsRobot(cszzBzz, no3Hlj1Jqr, cszzGkz, ROBOT_XSY_1.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //#2好氧硝酸盐
|
|
|
- BigDecimal no3Hlj2Jqr = tXinyiRobot.getNo3Hlj2Jqr();
|
|
|
- if(!Objects.isNull(no3Hlj2Jqr)){
|
|
|
- if(!Objects.isNull(cszzBzz)){
|
|
|
- handleXinYiWarningsRobot(cszzBzz, no3Hlj2Jqr, cszzGkz, ROBOT_XSY_2.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //总磷
|
|
|
- BigDecimal tpRccJqr = tXinyiRobot.getTpRccJqr();
|
|
|
- if(!Objects.isNull(tpRccJqr)){
|
|
|
- BigDecimal csTp = tpRccJqr.divide(ROBOT_HY_DIVIDE, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
- BigDecimal cszlBzz = normConfig.getCszlBzz();
|
|
|
- BigDecimal cszlGkz = normConfig.getCszlGkz();
|
|
|
- if(!Objects.isNull(cszlBzz)){
|
|
|
- handleXinYiWarningsRobot(cszlBzz, csTp, cszlGkz, ROBOT_ECCZLSY.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTp(), jsslSjz, normConfig.getJszlSjz()));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //2024年7月18日10:48:15 新增报警:出水氨氮 - 连续检测报警
|
|
|
- //1池
|
|
|
- /*BigDecimal no3Qyc1Jqr = tXinyiRobot.getNo3Qyc1Jqr();
|
|
|
- BigDecimal nh31Jqr = tXinyiRobot.getNh31Jqr();
|
|
|
- //判断 增加容错
|
|
|
- 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);
|
|
|
- if(!Objects.isNull(csadBzz)){
|
|
|
- handleXinYiWarningsRobot(csadBzz, anDan1, csadGkz, ROBOT_ANDAN_1.getCode(), tXinyiIndustry, normConfig);
|
|
|
- }
|
|
|
-
|
|
|
- //2池
|
|
|
- BigDecimal no3Qyc2Jqr = tXinyiRobot.getNo3Qyc2Jqr();
|
|
|
- BigDecimal nh32Jqr = tXinyiRobot.getNh32Jqr();
|
|
|
- //判断 增加容错
|
|
|
- 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);
|
|
|
- if(!Objects.isNull(csadBzz)){
|
|
|
- handleXinYiWarningsRobot(csadBzz, anDan2, csadGkz, ROBOT_ANDAN_2.getCode(), tXinyiIndustry, normConfig);
|
|
|
- }*/
|
|
|
-
|
|
|
- BigDecimal no3Qyc1Jqr = tXinyiRobot.getNo3Qyc1Jqr();
|
|
|
- BigDecimal nh31Jqr = tXinyiRobot.getNh31Jqr();
|
|
|
- //判断 增加容错
|
|
|
- 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);
|
|
|
-
|
|
|
-
|
|
|
- //2池
|
|
|
- BigDecimal no3Qyc2Jqr = tXinyiRobot.getNo3Qyc2Jqr();
|
|
|
- BigDecimal nh32Jqr = tXinyiRobot.getNh32Jqr();
|
|
|
- //判断 增加容错
|
|
|
- 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);
|
|
|
- if(!Objects.isNull(csadBzz)){
|
|
|
- BigDecimal divide = anDan1.add(anDan2).divide(DECIMAL_2, INT_2, RoundingMode.HALF_UP);
|
|
|
- handleXinYiWarningsRobot(csadBzz, divide, csadGkz, ROBOT_CS_AD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsNh3(), jsslSjz, normConfig.getJsadSjz()));
|
|
|
+ //新的逻辑:
|
|
|
+ //只要当前获取的工业库数据和当前时间
|
|
|
+ //如果当前时间和工业库传过来的相差不到一个小时,说明正常,工业库没挂掉:需要查询是否有挂掉的记录,有的话,关闭此报警,并触发整体的业务数据报警。
|
|
|
+ //如果超过1小时了,说明工业库同步数据挂掉了,这时候去查询有无此类型的报警,如果有,不做任何处理,程序结束;如果没有,新增该类型报警并结束程序。
|
|
|
+ Date nowDate = DateUtils.getNowDate();
|
|
|
+ Date warningDate = null;
|
|
|
+ try {
|
|
|
+ warningDate = DateUtils.parseDate(tXinyiRobot.getTestHour(), DateUtils.YYYYMMDDHH_TS);
|
|
|
+ } catch (ParseException e) {
|
|
|
+ log.error("将化验室的的化验时间转换date类型异常");
|
|
|
+ throw new RuntimeException(e.getMessage());
|
|
|
+ }
|
|
|
+ //查询工业库同步任务失败的报警正在进行的数据
|
|
|
+ TXinyiWarningRecord warningRecord = TXinyiWarningRecord.builder().symbol(BusinessEnum.WarningSymbolEnum.ROBOT_SYNC_ERROR.getCode()).status(0).build();
|
|
|
+ List<TXinyiWarningRecord> tXinyiWarningRecords = this.xinyiWarningRecordMapper.selectTXinyiWarningRecordList(warningRecord);
|
|
|
+ int hours = DateUtils.differentHoursByMillisecond(nowDate, warningDate);
|
|
|
+ if(hours == 0){
|
|
|
+ //查看是否有正在进行的同步任务失败的报警
|
|
|
+ if(!CollectionUtils.isEmpty(tXinyiWarningRecords)){
|
|
|
+ closeWarning(tXinyiWarningRecords.get(0));
|
|
|
}
|
|
|
+ //正常的业务数据报警
|
|
|
+ robotWarningDetail(tXinyiRobot, normConfig, tXinyiIndustry);
|
|
|
+ }else{
|
|
|
+ //查询是否有正在工业库的同步任务失败的报警,有的话,什么都不做; 没有的话,新增该类型报警
|
|
|
+ if(CollectionUtils.isEmpty(tXinyiWarningRecords)){
|
|
|
+ //插入该类型报警
|
|
|
+ warningRecord.setType(0);
|
|
|
+ String msg = BusinessEnum.WarningSymbolEnum.ROBOT_SYNC_ERROR.getMsg();
|
|
|
+ warningRecord.setCategory(msg);
|
|
|
+ warningRecord.setTime(nowDate);
|
|
|
+ warningRecord.setReason(msg);
|
|
|
+ warningRecord.setSymbol(BusinessEnum.WarningSymbolEnum.ROBOT_SYNC_ERROR.getCode());
|
|
|
+ warningRecord.setCreateBy(WARNING_DEFAULT_CREATE);
|
|
|
+ warningRecord.setCreateTime(nowDate);
|
|
|
+ this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(warningRecord);
|
|
|
+ }else{
|
|
|
+ log.info("化验室报警的时候,发现同步化验室同步定时任务挂掉了,并且已经有该类型报警了,不做任何处理");
|
|
|
+ }
|
|
|
+ //将其他类型的报警全部关闭
|
|
|
+ closeOtherWarningsBySymbol(null);
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void robotWarningDetail(TXinyiRobot tXinyiRobot, TXinyiNormConfig normConfig, TXinyiIndustry tXinyiIndustry) {
|
|
|
+
|
|
|
+ //先查看数据是否有断点--单指标 断点--多指标
|
|
|
+
|
|
|
+
|
|
|
+ //最原始的标准值和管控制报警
|
|
|
+ //2025年02月25日15:58:15 需要在最原始的报警里,增加是否出现单点突变 - 异常升高 和 单点突变 - 异常偏低的报警
|
|
|
+ robotOriginWarning(tXinyiRobot, normConfig, tXinyiIndustry);
|
|
|
}
|
|
|
|
|
|
+ private void robotOriginWarning(TXinyiRobot tXinyiRobot, TXinyiNormConfig normConfig, TXinyiIndustry tXinyiIndustry) {
|
|
|
+ //总氮的标准值和管控值
|
|
|
+ BigDecimal cszzBzz = normConfig.getCszzBzz();
|
|
|
+ BigDecimal cszzGkz = normConfig.getCszzGkz();
|
|
|
+ //氨氮的标准值和管控值
|
|
|
+ BigDecimal csadBzz = normConfig.getCsadBzz();
|
|
|
+ BigDecimal csadGkz = normConfig.getCsadGkz();
|
|
|
+
|
|
|
+ BigDecimal jsSlq = tXinyiIndustry.getJsSlq();
|
|
|
+ BigDecimal jsslSjz = normConfig.getJsslSjz();
|
|
|
+
|
|
|
+ //#1好氧硝酸盐
|
|
|
+ BigDecimal no3Hlj1Jqr = tXinyiRobot.getNo3Hlj1Jqr();
|
|
|
+ if(!Objects.isNull(no3Hlj1Jqr)){
|
|
|
+ if(!Objects.isNull(cszzBzz)){
|
|
|
+ handleXinYiWarningsRobotOrigin(cszzBzz, no3Hlj1Jqr, cszzGkz, ROBOT_XSY_1.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ //#2好氧硝酸盐
|
|
|
+ BigDecimal no3Hlj2Jqr = tXinyiRobot.getNo3Hlj2Jqr();
|
|
|
+ if(!Objects.isNull(no3Hlj2Jqr)){
|
|
|
+ if(!Objects.isNull(cszzBzz)){
|
|
|
+ handleXinYiWarningsRobotOrigin(cszzBzz, no3Hlj2Jqr, cszzGkz, ROBOT_XSY_2.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTn(), jsslSjz, normConfig.getJszdSjz()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //总磷
|
|
|
+ BigDecimal tpRccJqr = tXinyiRobot.getTpRccJqr();
|
|
|
+ if(!Objects.isNull(tpRccJqr)){
|
|
|
+ BigDecimal csTp = tpRccJqr.divide(ROBOT_HY_DIVIDE, NUMBER_SCALE_4, RoundingMode.HALF_UP);
|
|
|
+ BigDecimal cszlBzz = normConfig.getCszlBzz();
|
|
|
+ BigDecimal cszlGkz = normConfig.getCszlGkz();
|
|
|
+ if(!Objects.isNull(cszlBzz)){
|
|
|
+ handleXinYiWarningsRobotOrigin(cszlBzz, csTp, cszlGkz, ROBOT_ECCZLSY.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsTp(), jsslSjz, normConfig.getJszlSjz()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //1#缺氧出-硝酸盐
|
|
|
+ BigDecimal no3Qyc1Jqr = tXinyiRobot.getNo3Qyc1Jqr();
|
|
|
+ BigDecimal nh31Jqr = tXinyiRobot.getNh31Jqr();
|
|
|
+ //判断 增加容错
|
|
|
+ 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);
|
|
|
+
|
|
|
+
|
|
|
+ //2#缺氧出-硝酸盐
|
|
|
+ BigDecimal no3Qyc2Jqr = tXinyiRobot.getNo3Qyc2Jqr();
|
|
|
+ BigDecimal nh32Jqr = tXinyiRobot.getNh32Jqr();
|
|
|
+ //判断 增加容错
|
|
|
+ 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);
|
|
|
+ if(!Objects.isNull(csadBzz)){
|
|
|
+ BigDecimal divide = anDan1.add(anDan2).divide(DECIMAL_2, INT_2, RoundingMode.HALF_UP);
|
|
|
+ handleXinYiWarningsRobotOrigin(csadBzz, divide, csadGkz, ROBOT_CS_AD.getCode(), tXinyiIndustry, normConfig, getCwrwfhzByDetail(jsSlq, tXinyiIndustry.getJsNh3(), jsslSjz, normConfig.getJsadSjz()));
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
|
|
|
/**
|
|
@@ -3578,7 +3896,92 @@ public class AsyncTask {
|
|
|
* @param cwrwfhz
|
|
|
* @return
|
|
|
*/
|
|
|
- private void handleXinYiWarningsRobot(BigDecimal csBzz, BigDecimal currentVal, BigDecimal csGkz, String category, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, BigDecimal cwrwfhz) {
|
|
|
+ private void handleXinYiWarningsRobotOrigin(BigDecimal csBzz, BigDecimal currentVal, BigDecimal csGkz, String category, TXinyiIndustry tXinyiIndustry, TXinyiNormConfig normConfig, BigDecimal cwrwfhz) {
|
|
|
+
|
|
|
+
|
|
|
+ Date nowDate = DateUtils.getNowDate();
|
|
|
+ List<TXinyiRobot> tXinyiRobots = this.xinyiRobotMapper.selectNRobot(INT_3);
|
|
|
+ if(CollectionUtils.isEmpty(tXinyiRobots) || tXinyiRobots.size() < 3){
|
|
|
+ log.error("处理连续检测报警时,获取最近的3条化验数据失败~~~~~~~");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ TXinyiRobot tXinyiRobot1 = tXinyiRobots.get(INDEX_1);//前一个小时
|
|
|
+
|
|
|
+ //单点突变-异常升高报警
|
|
|
+ TXinyiWarningRecord warningRecordYCSG = TXinyiWarningRecord.builder().type(0).category(category).symbol(BusinessEnum.WarningSymbolEnum.SJYC_YCSG.getCode()).status(0).build();
|
|
|
+ List<TXinyiWarningRecord> tXinyiNoChangeYCSGRecords = this.xinyiWarningRecordMapper.selectTXinyiWarningRecordList(warningRecordYCSG);
|
|
|
+ //是否存在异常升高的问题
|
|
|
+ if(!CollectionUtils.isEmpty(tXinyiRobots) && tXinyiRobots.size() == INT_3){
|
|
|
+ //2025年02月21日14:33:37 这里要改成当前值和上个小时比较 上个小时和上上个小时比较
|
|
|
+ BigDecimal exceedVal = existsRobotYCSG(currentVal, category, tXinyiRobots);
|
|
|
+ if(!Objects.isNull(exceedVal)){//这里不能只返回一个布尔类型的结果,因为还要获取百分比的值
|
|
|
+ //关闭同类型的其他报警
|
|
|
+ closeOtherWarningsByCategory(category, BusinessEnum.WarningSymbolEnum.SJYC_YCSG.getCode());
|
|
|
+ //触发报警 并且模拟大模型返回决策问答数据
|
|
|
+ if(CollectionUtils.isEmpty(tXinyiNoChangeYCSGRecords)){
|
|
|
+ //插入该类型报警
|
|
|
+ warningRecordYCSG.setType(0);
|
|
|
+ warningRecordYCSG.setCategory(category);
|
|
|
+ warningRecordYCSG.setTime(nowDate);
|
|
|
+ warningRecordYCSG.setReason(BusinessEnum.WarningSymbolEnum.SJYC_YCSG.getMsg());
|
|
|
+ warningRecordYCSG.setWaterType(BusinessEnum.WaterTypeEnum.CS.getCode());
|
|
|
+ warningRecordYCSG.setSymbol(BusinessEnum.WarningSymbolEnum.SJYC_YCSG.getCode());
|
|
|
+ warningRecordYCSG.setCreateBy(WARNING_DEFAULT_CREATE);
|
|
|
+ warningRecordYCSG.setCreateTime(nowDate);
|
|
|
+ warningRecordYCSG.setWarningVal(currentVal);
|
|
|
+ this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(warningRecordYCSG);
|
|
|
+ //同时处理决策 不用调用大模型,本地处理问答
|
|
|
+ addChatRecordByYCSG(warningRecordYCSG, tXinyiIndustry, normConfig, category, exceedVal);
|
|
|
+ }else{
|
|
|
+ log.info("化验室报警的时候,发现存在异常升高的报警,并且已经有该类型报警了,不做任何处理");
|
|
|
+ }
|
|
|
+ log.info("化验室报警的时候,发现存在异常升高的报警,后续同指标报警不再处理");
|
|
|
+ return;
|
|
|
+ }else{//不存在 查看历史是否有报警,有的话关闭
|
|
|
+ if(!CollectionUtils.isEmpty(tXinyiNoChangeYCSGRecords)){
|
|
|
+ closeWarning(tXinyiNoChangeYCSGRecords.get(0));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //单点突变-异常偏低报警
|
|
|
+ TXinyiWarningRecord warningRecordYCPD = TXinyiWarningRecord.builder().type(0).category(category).symbol(BusinessEnum.WarningSymbolEnum.SJYC_YCPD.getCode()).status(0).build();
|
|
|
+ List<TXinyiWarningRecord> tXinyiNoChangeYCPDRecords = this.xinyiWarningRecordMapper.selectTXinyiWarningRecordList(warningRecordYCPD);
|
|
|
+ //是否存在异常偏低的问题
|
|
|
+ if(!Objects.isNull(tXinyiRobot1)){
|
|
|
+ //2025年02月21日15:05:41 这里只需要比较当前值和标准值的差 以及上个小时的值和标准值的差 所以不用取最近3个小时的
|
|
|
+ BigDecimal exceedVal = existsRobotYCPD(currentVal, category, tXinyiRobot1, csBzz);
|
|
|
+ if(!Objects.isNull(exceedVal)){//这里不能只返回一个布尔类型的结果,因为还要获取百分比的值
|
|
|
+ //关闭同类型的其他报警
|
|
|
+ closeOtherWarningsByCategory(category, BusinessEnum.WarningSymbolEnum.SJYC_YCPD.getCode());
|
|
|
+ //触发报警 并且模拟大模型返回决策问答数据
|
|
|
+ if(CollectionUtils.isEmpty(tXinyiNoChangeYCPDRecords)){
|
|
|
+ //插入该类型报警
|
|
|
+ warningRecordYCPD.setType(0);
|
|
|
+ warningRecordYCPD.setCategory(category);
|
|
|
+ warningRecordYCPD.setTime(nowDate);
|
|
|
+ warningRecordYCPD.setReason(BusinessEnum.WarningSymbolEnum.SJYC_YCPD.getMsg());
|
|
|
+ warningRecordYCPD.setWaterType(BusinessEnum.WaterTypeEnum.CS.getCode());
|
|
|
+ warningRecordYCPD.setSymbol(BusinessEnum.WarningSymbolEnum.SJYC_YCPD.getCode());
|
|
|
+ warningRecordYCPD.setCreateBy(WARNING_DEFAULT_CREATE);
|
|
|
+ warningRecordYCPD.setCreateTime(nowDate);
|
|
|
+ warningRecordYCPD.setWarningVal(currentVal);
|
|
|
+ this.xinyiWarningRecordMapper.insertTXinyiWarningRecord(warningRecordYCPD);
|
|
|
+ //同时处理决策 不用调用大模型,本地处理问答
|
|
|
+ addChatRecordByYCPD(warningRecordYCPD, tXinyiIndustry, normConfig, category, exceedVal);
|
|
|
+ }else{
|
|
|
+ log.info("化验室报警的时候,发现存在异常偏低的报警,并且已经有该类型报警了,不做任何处理");
|
|
|
+ }
|
|
|
+ log.info("化验室报警的时候,发现存在异常偏低的报警,后续同指标报警不再处理");
|
|
|
+ return;
|
|
|
+ }else{//不存在 查看历史是否有报警,有的话关闭
|
|
|
+ if(!CollectionUtils.isEmpty(tXinyiNoChangeYCPDRecords)){
|
|
|
+ closeWarning(tXinyiNoChangeYCPDRecords.get(0));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //下面是最原始的处理 超标准 超管控报警
|
|
|
BigDecimal multiply = csBzz.multiply(new BigDecimal(MyConstants.SCALE_VALUE));
|
|
|
TXinyiWarningRecord tXinyiWarningRecord = new TXinyiWarningRecord();
|
|
|
tXinyiWarningRecord.setStatus(0);
|
|
@@ -3624,7 +4027,6 @@ public class AsyncTask {
|
|
|
log.info( "{}:现在恢复正常,历史报警数据为{}", category,JSON.toJSONString(tXinyiWarningRecords));
|
|
|
for (TXinyiWarningRecord xinyiWarningRecord : tXinyiWarningRecords) {
|
|
|
xinyiWarningRecord.setStatus(2);
|
|
|
- Date nowDate = DateUtils.getNowDate();
|
|
|
xinyiWarningRecord.setOffTime(nowDate);
|
|
|
xinyiWarningRecord.setUpdateTime(nowDate);
|
|
|
xinyiWarningRecord.setUpdateBy(WARNING_DEFAULT_CREATE);
|
|
@@ -3632,15 +4034,14 @@ public class AsyncTask {
|
|
|
}
|
|
|
}
|
|
|
}else{//有告警信息
|
|
|
- Date nowDate = DateUtils.getNowDate();
|
|
|
if(CollectionUtils.isEmpty(tXinyiWarningRecords)){//之前没有告警记录
|
|
|
//2024年7月18日16:23:11 新增逻辑,查询是否有连续升高的趋势,如果有才需要报警
|
|
|
- List<TXinyiRobot> tXinyiRobots = this.xinyiRobotMapper.selectNRobot(INT_3);
|
|
|
+ /*List<TXinyiRobot> tXinyiRobots = this.xinyiRobotMapper.selectNRobot(INT_3);
|
|
|
if(CollectionUtils.isEmpty(tXinyiRobots) || tXinyiRobots.size() < 3){
|
|
|
log.error("处理连续检测报警时,获取最近的3条化验数据失败~~~~~~~");
|
|
|
return;
|
|
|
}
|
|
|
- TXinyiRobot tXinyiRobot1 = tXinyiRobots.get(INDEX_1);//前一个小时
|
|
|
+ TXinyiRobot tXinyiRobot1 = tXinyiRobots.get(INDEX_1);//前一个小时*/
|
|
|
TXinyiRobot tXinyiRobot2 = tXinyiRobots.get(INDEX_2);//前两个小时
|
|
|
if(!this.judgeContinuousRobot(tXinyiRobot1, tXinyiRobot2, category)){
|
|
|
log.info("虽然当前超标了,但是没有连续升高趋势,所以不报警,当前没有报警出来的数据为{}\n,前一个小时数据为{}\n前两个小时数据为{}", JSON.toJSONString(tXinyiWarningRecord), JSON.toJSONString(tXinyiRobot1), JSON.toJSONString(tXinyiRobot2));
|
|
@@ -3828,4 +4229,6 @@ public class AsyncTask {
|
|
|
//更新数据库
|
|
|
this.xinyiBigTableHourMapper.updateTXinyiBigTableHour(tXinyiBigTableHour);
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
}
|