Compare commits

..

No commits in common. "94b13ac2f71f7f4fa3fca0d0971b729a3026f4c2" and "79c64daafbe857a6e5714082edd8b183057ac45b" have entirely different histories.

View File

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