优化告警比较方法
This commit is contained in:
parent
545288051a
commit
fcafc84f83
@ -21,6 +21,7 @@ import com.yfd.platform.modules.auxcontrol.mapper.MeterDeviceMapper;
|
||||
import com.yfd.platform.modules.auxcontrol.service.IDeviceAlarmRecordService;
|
||||
import com.yfd.platform.system.domain.SysDictionaryItems;
|
||||
import com.yfd.platform.system.mapper.SysDictionaryItemsMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@ -41,6 +42,7 @@ import java.util.regex.Pattern;
|
||||
* @since 2025-04-23
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class DeviceAlarmRecordServiceImpl extends ServiceImpl<DeviceAlarmRecordMapper, DeviceAlarmRecord> implements IDeviceAlarmRecordService {
|
||||
|
||||
@Resource
|
||||
@ -86,7 +88,7 @@ public class DeviceAlarmRecordServiceImpl extends ServiceImpl<DeviceAlarmRecordM
|
||||
//如果信号类型是1 设备告警
|
||||
if ("1".equals(map.get("signalType").toString())) {
|
||||
//紧接者判断 value (1是告警 0是正常) status
|
||||
if (1 == Integer.parseInt(value)) {
|
||||
if ("1".equals(value)) {
|
||||
//填充告警记录信息接口
|
||||
DeviceAlarmRecord deviceAlarmRecord = FillingDeviceAlarmRecord(type, null, map, value);
|
||||
//首先判断 在不在时间范围之内 判断时间在不在时间范围之内接口
|
||||
@ -100,7 +102,7 @@ public class DeviceAlarmRecordServiceImpl extends ServiceImpl<DeviceAlarmRecordM
|
||||
this.removeById(alarmRecords.get(0).getRecordId());
|
||||
}
|
||||
} else {
|
||||
//紧接者判断 value (1是告警 0是正常) status 同一信号监测到报警状态消除,对当前信号所有未处理历史报警打上已处理标签,并记录消除时间
|
||||
//判断 value (1是告警 0是正常) status 同一信号监测到报警状态消除,对当前信号所有未处理历史报警打上已处理标签,并记录消除时间
|
||||
LambdaQueryWrapper<DeviceAlarmRecord> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(DeviceAlarmRecord::getSignalId, map.get("signalId").toString());
|
||||
queryWrapper.eq(DeviceAlarmRecord::getAlarmClass, "2");
|
||||
@ -282,43 +284,37 @@ public class DeviceAlarmRecordServiceImpl extends ServiceImpl<DeviceAlarmRecordM
|
||||
* false 没有触发告警规则
|
||||
*/
|
||||
public boolean TriggerAlarm(DeviceAlarmParameter deviceAlarmParameter, String value) {
|
||||
List<String> listSymbol = new ArrayList<>();
|
||||
List<Double> values = new ArrayList<>();
|
||||
|
||||
// //获取告警触发条件
|
||||
String str = deviceAlarmParameter.getAlarmCondition();
|
||||
// 定义正则表达式
|
||||
String regex = "([0-9]+(\\.[0-9]+)?|value)([<>=!]{1,2})([0-9]+(\\.[0-9]+)?|value)";
|
||||
String regex = "(\\d+)\\s*((?:==?|!=|<=?|>=?))\\s*value\\s*((?:==?|!=|<=?|>=?))\\s*(\\d+)";
|
||||
Pattern pattern = Pattern.compile(regex);
|
||||
Matcher matcher = pattern.matcher(str);
|
||||
|
||||
// 查找并输出比较符号和数值
|
||||
while (matcher.find()) {
|
||||
String value1 = matcher.group(1);
|
||||
String operator = matcher.group(3);
|
||||
String value2 = matcher.group(4);
|
||||
|
||||
if ("value".equals(value1)) {
|
||||
values.add(Double.parseDouble(value));
|
||||
} else {
|
||||
values.add(Double.valueOf(value1));
|
||||
}
|
||||
|
||||
listSymbol.add(operator);
|
||||
|
||||
if ("value".equals(value2)) {
|
||||
values.add(Double.parseDouble(value));
|
||||
} else {
|
||||
values.add(Double.valueOf(value2));
|
||||
}
|
||||
}
|
||||
|
||||
// 比较操作
|
||||
boolean result = compare(values.get(0), listSymbol.get(0), values.get(1));
|
||||
boolean resultTwo = true;
|
||||
if (listSymbol.size() > 1) {
|
||||
resultTwo = compare(values.get(1), listSymbol.get(1), values.get(2));
|
||||
}
|
||||
if (matcher.find()) {
|
||||
try {
|
||||
// 第一个数字
|
||||
String number1 = matcher.group(1);
|
||||
// 第一个比较符
|
||||
String operator1 = matcher.group(2);
|
||||
// 第二个比较符
|
||||
String operator2 = matcher.group(3);
|
||||
// 第二个数字
|
||||
String number2 = matcher.group(4);
|
||||
Double aDouble = Double.valueOf(value);
|
||||
boolean result = compare(Double.valueOf(number1), operator1, aDouble);
|
||||
boolean resultTwo = compare(aDouble, operator2, Double.valueOf(number2));
|
||||
return result && resultTwo;
|
||||
} catch (Exception e) {
|
||||
log.error(e.getMessage());
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
private static boolean compare(Double value1, String operator, Double value2) {
|
||||
@ -364,26 +360,26 @@ public class DeviceAlarmRecordServiceImpl extends ServiceImpl<DeviceAlarmRecordM
|
||||
* @return true 在区间范围之内
|
||||
* false 不在时间范围之内
|
||||
*/
|
||||
public Map<String, Object> getTimeInterval(int clock) {
|
||||
public Map<String, Object> getTimeInterval(int clockHour) {
|
||||
int beforeclock = 0;
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
Map<String, Object> map = new HashMap<>(10);
|
||||
// 获取当前时间
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
|
||||
// 获取昨天的 7 点
|
||||
LocalDateTime yesterday7AM = LocalDateTime.of(now.minusDays(1).toLocalDate(), LocalTime.of(clock, 0));
|
||||
map.put("starttime", yesterday7AM);
|
||||
LocalDateTime yesterdayClockAM = LocalDateTime.of(now.minusDays(1).toLocalDate(), LocalTime.of(clockHour, 0));
|
||||
map.put("starttime", yesterdayClockAM);
|
||||
// 获取今天的 7 点
|
||||
LocalDateTime today7AM = LocalDateTime.of(now.toLocalDate(), LocalTime.of(clock, 0));
|
||||
LocalDateTime nextday7AM = LocalDateTime.of(now.plusDays(1).toLocalDate(), LocalTime.of(clock, 0));
|
||||
map.put("endtime", today7AM);
|
||||
LocalDateTime todayClockAM = LocalDateTime.of(now.toLocalDate(), LocalTime.of(clockHour, 0));
|
||||
LocalDateTime nextdayClockAM = LocalDateTime.of(now.plusDays(1).toLocalDate(), LocalTime.of(clockHour, 0));
|
||||
|
||||
map.put("endtime", todayClockAM);
|
||||
// 判断时间是否在范围内
|
||||
if (now.isAfter(yesterday7AM) && now.isBefore(today7AM)) {
|
||||
if (now.isAfter(yesterdayClockAM) && now.isBefore(todayClockAM)) {
|
||||
beforeclock = 1;
|
||||
} else {
|
||||
beforeclock = 0;
|
||||
map.put("starttime", today7AM);
|
||||
map.put("endtime", nextday7AM);
|
||||
map.put("starttime", todayClockAM);
|
||||
map.put("endtime", nextdayClockAM);
|
||||
}
|
||||
map.put("beforeclock", beforeclock);
|
||||
return map;
|
||||
|
Loading…
Reference in New Issue
Block a user