|
@@ -1713,6 +1713,18 @@ public class AsyncTask {
|
|
|
}else{//有告警信息
|
|
|
Date nowDate = DateUtils.getNowDate();
|
|
|
if(CollectionUtils.isEmpty(tXinyiWarningRecords)){//之前没有告警记录
|
|
|
+ //2024年7月18日16:23:11 新增逻辑,查询是否有连续升高的趋势,如果有才需要报警
|
|
|
+ List<TXinyiIndustry> tXinyiIndustries = this.xinyiIndustryMapper.selectNIndustry(INT_3);
|
|
|
+ if(CollectionUtils.isEmpty(tXinyiIndustries) || tXinyiIndustries.size() < 3){
|
|
|
+ log.error("处理生化报警时,获取最近的3条工业库数据失败~~~~~~~");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ TXinyiIndustry tXinyiIndustry1 = tXinyiIndustries.get(INDEX_1);//前一个小时
|
|
|
+ TXinyiIndustry tXinyiIndustry2 = tXinyiIndustries.get(INDEX_2);//前两个小时
|
|
|
+ if(!this.judgeContinuousIndustry(tXinyiIndustry1, tXinyiIndustry2, category)){
|
|
|
+ log.info("虽然当前超标了,但是没有连续升高趋势,所以不报警,当前没有报警出来的数据为{}\n,前一个小时数据为{}\n前两个小时数据为{}", JSON.toJSONString(tXinyiWarningRecord), JSON.toJSONString(tXinyiIndustry1), JSON.toJSONString(tXinyiIndustry2));
|
|
|
+ return;
|
|
|
+ }
|
|
|
//保存到数据库中
|
|
|
//2024年7月15日11:06:16 因为只有一个告警记录,但是如果一直报警,现在报警时间取的是更新时间,兼容第一次报警处理
|
|
|
tXinyiWarningRecord.setUpdateTime(nowDate);
|
|
@@ -1819,8 +1831,9 @@ public class AsyncTask {
|
|
|
}
|
|
|
TXinyiIndustry tXinyiIndustry1 = tXinyiIndustries.get(INDEX_1);//前一个小时
|
|
|
TXinyiIndustry tXinyiIndustry2 = tXinyiIndustries.get(INDEX_2);//前两个小时
|
|
|
- if(!this.judgeContinuous(tXinyiIndustry1, tXinyiIndustry2, category)){
|
|
|
+ if(!this.judgeContinuousIndustry(tXinyiIndustry1, tXinyiIndustry2, category)){
|
|
|
log.info("虽然当前超标了,但是没有连续升高趋势,所以不报警,当前没有报警出来的数据为{}\n,前一个小时数据为{}\n前两个小时数据为{}", JSON.toJSONString(tXinyiWarningRecord), JSON.toJSONString(tXinyiIndustry1), JSON.toJSONString(tXinyiIndustry2));
|
|
|
+ return;
|
|
|
}
|
|
|
//保存到数据库中
|
|
|
//2024年7月15日11:06:16 因为只有一个告警记录,但是如果一直报警,现在报警时间取的是更新时间,兼容第一次报警处理
|
|
@@ -1859,7 +1872,7 @@ public class AsyncTask {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private boolean judgeContinuous(TXinyiIndustry tXinyiIndustry1, TXinyiIndustry tXinyiIndustry2, String category) {
|
|
|
+ private boolean judgeContinuousIndustry(TXinyiIndustry tXinyiIndustry1, TXinyiIndustry tXinyiIndustry2, String category) {
|
|
|
boolean result = false;//默认不超标
|
|
|
if(BusinessEnum.WarningCategoryEnum.CS_COD.getCode().equals(category)){
|
|
|
BigDecimal csCod1 = tXinyiIndustry1.getCsCod();
|
|
@@ -2106,6 +2119,18 @@ 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);
|
|
|
+ if(CollectionUtils.isEmpty(tXinyiRobots) || tXinyiRobots.size() < 3){
|
|
|
+ log.error("处理连续检测报警时,获取最近的3条化验数据失败~~~~~~~");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ 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(tXinyiIndustry1), JSON.toJSONString(tXinyiIndustry2));
|
|
|
+ return;
|
|
|
+ }
|
|
|
//保存到数据库中
|
|
|
//2024年7月15日11:06:16 因为只有一个告警记录,但是如果一直报警,现在报警时间取的是更新时间,兼容第一次报警处理
|
|
|
tXinyiWarningRecord.setUpdateTime(nowDate);
|
|
@@ -2144,6 +2169,79 @@ public class AsyncTask {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ private boolean judgeContinuousRobot(TXinyiRobot tXinyiRobot1, TXinyiRobot tXinyiRobot2, String category) {
|
|
|
+ boolean result = false;//默认不超标
|
|
|
+ if(BusinessEnum.WarningCategoryEnum.ROBOT_XSY_1.getCode().equals(category)){
|
|
|
+ BigDecimal no3Hlj1Jqr1 = tXinyiRobot1.getNo3Hlj1Jqr();
|
|
|
+ BigDecimal no3Hlj1Jqr2 = tXinyiRobot2.getNo3Hlj1Jqr();
|
|
|
+ if(!Objects.isNull(no3Hlj1Jqr1) && !Objects.isNull(no3Hlj1Jqr2) && no3Hlj1Jqr1.compareTo(no3Hlj1Jqr2) > INT_0)
|
|
|
+ result = true;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.ROBOT_XSY_2.getCode().equals(category)){
|
|
|
+ BigDecimal no3Hlj2Jqr1 = tXinyiRobot1.getNo3Hlj2Jqr();
|
|
|
+ BigDecimal no3Hlj2Jqr2 = tXinyiRobot2.getNo3Hlj2Jqr();
|
|
|
+ if(!Objects.isNull(no3Hlj2Jqr1) && !Objects.isNull(no3Hlj2Jqr2) && no3Hlj2Jqr1.compareTo(no3Hlj2Jqr2) > INT_0)
|
|
|
+ result = true;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.ROBOT_ECCZLSY.getCode().equals(category)){
|
|
|
+ BigDecimal tpRccJqr1 = tXinyiRobot1.getTpRccJqr();
|
|
|
+ BigDecimal tpRccJqr2 = tXinyiRobot2.getTpRccJqr();
|
|
|
+ if(!Objects.isNull(tpRccJqr1) && !Objects.isNull(tpRccJqr2) && tpRccJqr1.compareTo(tpRccJqr2) > INT_0)
|
|
|
+ result = true;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.ROBOT_ANDAN_1.getCode().equals(category)){
|
|
|
+ //计算1
|
|
|
+ BigDecimal no3Qyc1Jqr1 = tXinyiRobot1.getNo3Qyc1Jqr();
|
|
|
+ BigDecimal nh31Jqr1 = tXinyiRobot1.getNh31Jqr();
|
|
|
+ BigDecimal no3Hlj1Jqr1 = tXinyiRobot1.getNo3Hlj1Jqr();
|
|
|
+ if(Objects.isNull(no3Qyc1Jqr1))
|
|
|
+ no3Qyc1Jqr1 = BigDecimal.ZERO;
|
|
|
+ if(Objects.isNull(nh31Jqr1))
|
|
|
+ nh31Jqr1 = BigDecimal.ZERO;
|
|
|
+ if(Objects.isNull(no3Hlj1Jqr1))
|
|
|
+ no3Hlj1Jqr1 = BigDecimal.ZERO;
|
|
|
+ BigDecimal anDan1 = no3Qyc1Jqr1.add(nh31Jqr1).subtract(no3Hlj1Jqr1);
|
|
|
+ //计算2
|
|
|
+ BigDecimal no3Qyc1Jqr2 = tXinyiRobot2.getNo3Qyc1Jqr();
|
|
|
+ BigDecimal nh31Jqr2 = tXinyiRobot2.getNh31Jqr();
|
|
|
+ BigDecimal no3Hlj1Jqr2 = tXinyiRobot2.getNo3Hlj1Jqr();
|
|
|
+ if(Objects.isNull(no3Qyc1Jqr2))
|
|
|
+ no3Qyc1Jqr2 = BigDecimal.ZERO;
|
|
|
+ if(Objects.isNull(nh31Jqr2))
|
|
|
+ nh31Jqr2 = BigDecimal.ZERO;
|
|
|
+ if(Objects.isNull(no3Hlj1Jqr2))
|
|
|
+ no3Hlj1Jqr2 = BigDecimal.ZERO;
|
|
|
+ BigDecimal anDan2 = no3Qyc1Jqr2.add(nh31Jqr2).subtract(no3Hlj1Jqr2);
|
|
|
+ if(anDan1.compareTo(anDan2) > INT_0)
|
|
|
+ result = true;
|
|
|
+ }else if(BusinessEnum.WarningCategoryEnum.ROBOT_ANDAN_2.getCode().equals(category)){
|
|
|
+ //计算1
|
|
|
+ BigDecimal no3Qyc1Jqr1 = tXinyiRobot1.getNo3Qyc2Jqr();
|
|
|
+ BigDecimal nh31Jqr1 = tXinyiRobot1.getNh32Jqr();
|
|
|
+ BigDecimal no3Hlj1Jqr1 = tXinyiRobot1.getNo3Hlj2Jqr();
|
|
|
+ if(Objects.isNull(no3Qyc1Jqr1))
|
|
|
+ no3Qyc1Jqr1 = BigDecimal.ZERO;
|
|
|
+ if(Objects.isNull(nh31Jqr1))
|
|
|
+ nh31Jqr1 = BigDecimal.ZERO;
|
|
|
+ if(Objects.isNull(no3Hlj1Jqr1))
|
|
|
+ no3Hlj1Jqr1 = BigDecimal.ZERO;
|
|
|
+ BigDecimal anDan1 = no3Qyc1Jqr1.add(nh31Jqr1).subtract(no3Hlj1Jqr1);
|
|
|
+ //计算2
|
|
|
+ BigDecimal no3Qyc1Jqr2 = tXinyiRobot2.getNo3Qyc2Jqr();
|
|
|
+ BigDecimal nh31Jqr2 = tXinyiRobot2.getNh32Jqr();
|
|
|
+ BigDecimal no3Hlj1Jqr2 = tXinyiRobot2.getNo3Hlj2Jqr();
|
|
|
+ if(Objects.isNull(no3Qyc1Jqr2))
|
|
|
+ no3Qyc1Jqr2 = BigDecimal.ZERO;
|
|
|
+ if(Objects.isNull(nh31Jqr2))
|
|
|
+ nh31Jqr2 = BigDecimal.ZERO;
|
|
|
+ if(Objects.isNull(no3Hlj1Jqr2))
|
|
|
+ no3Hlj1Jqr2 = BigDecimal.ZERO;
|
|
|
+ BigDecimal anDan2 = no3Qyc1Jqr2.add(nh31Jqr2).subtract(no3Hlj1Jqr2);
|
|
|
+ if(anDan1.compareTo(anDan2) > INT_0)
|
|
|
+ result = true;
|
|
|
+ }else{
|
|
|
+ log.error("暂时还不支持的报警类型~~~~");
|
|
|
+ }
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
*
|
|
|
* 大宽表的数据处理
|