diff --git a/mh-system/src/main/java/com/mh/system/service/operation/impl/AlarmRecordsServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/operation/impl/AlarmRecordsServiceImpl.java index 035231d..0c9a08b 100644 --- a/mh-system/src/main/java/com/mh/system/service/operation/impl/AlarmRecordsServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/operation/impl/AlarmRecordsServiceImpl.java @@ -188,17 +188,18 @@ public class AlarmRecordsServiceImpl implements IAlarmRecordsService { Date curTime = collectionParamsManage.getCurTime(); // 阈值 String threshold1 = alarmRule.getThreshold1(); + String threshold2 = alarmRule.getThreshold2(); // 设置Redis取消标记(有效期略大于延迟时间) redisTemplate.deleteObject("alarm:cancel:" + collectionParamsManage.getId()); if (alarmRule.getTimePeriodSet() == 0 && DateUtils.isSameDay(curTime, new Date())) { // 执行相关操作 - insertOrUpdateRecord(alarmRule, curValue, threshold1, alarmCode, alarmRecords, collectionParamsManage); + insertOrUpdateRecord(alarmRule, curValue, threshold1, threshold2, alarmCode, alarmRecords, collectionParamsManage); } else if (alarmRule.getTimePeriodSet() == 1 && DateUtils.isSameDay(collectionParamsManage.getCurTime(), new Date()) && DateUtils.isCurrentTimeInRange(alarmRule.getBeginTime(), alarmRule.getEndTime(), curTime) ) { // 执行相关操作 - insertOrUpdateRecord(alarmRule, curValue, threshold1, alarmCode, alarmRecords, collectionParamsManage); + insertOrUpdateRecord(alarmRule, curValue, threshold1, threshold2, alarmCode, alarmRecords, collectionParamsManage); } } } @@ -225,6 +226,7 @@ public class AlarmRecordsServiceImpl implements IAlarmRecordsService { Date curTime = collectionParamsManage.getCurTime(); // 阈值 String threshold1 = alarmRule.getThreshold1(); + String threshold2 = alarmRule.getThreshold2(); if (curValue.compareTo(BigDecimal.ZERO) == 0) { // 发送到延迟队列 result.append(",").append(collectionParamsManage.getId()); @@ -239,41 +241,62 @@ public class AlarmRecordsServiceImpl implements IAlarmRecordsService { "true", 2, TimeUnit.MINUTES // 例如:延迟5分钟,设置10分钟过期 ); - insertOrUpdateRecord(alarmRule, curValue, threshold1, alarmCodeService.selectAlarmCodeByAlarmType(alarmRule.getEventType()), alarmRecords, collectionParamsManage); + insertOrUpdateRecord(alarmRule, curValue, threshold1, threshold2, alarmCodeService.selectAlarmCodeByAlarmType(alarmRule.getEventType()), alarmRecords, collectionParamsManage); } } } return result.toString(); } - private void insertOrUpdateRecord(AlarmRules alarmRule, BigDecimal curValue, String threshold1, AlarmCode alarmCode, AlarmRecords alarmRecords, CollectionParamsManage collectionParamsManage) { + private void insertOrUpdateRecord(AlarmRules alarmRule, BigDecimal curValue, String threshold1, String threshold2, AlarmCode alarmCode, AlarmRecords alarmRecords, CollectionParamsManage collectionParamsManage) { boolean compare = BigDecimalUtils.compare(alarmRule.getCondition1(), curValue, new BigDecimal(threshold1)); if (compare) { - // 创建报警记录 - String content = alarmCode.getMsgContent(); - content = content.replace("#{curValue}", curValue.setScale(1, RoundingMode.HALF_UP).toString()); - content = content.replace("#{setValue}", alarmRule.getCondition1() + threshold1); - alarmRecords.setContent(content); - alarmRecords.setAlarmType(alarmRule.getAlarmType()); - alarmRecords.setEventType(alarmRule.getEventType()); - alarmRecords.setAlarmLevel(alarmRule.getAlarmLevel()); - alarmRecords.setLedgerId(alarmRule.getLedgerId()); - alarmRecords.setCpmId(alarmRule.getCpmId()); - alarmRecords.setDeviceName(alarmRule.getDeviceName()); - alarmRecords.setCpmName(alarmRule.getCpmName()); - alarmRecords.setCreateTime(collectionParamsManage.getCurTime()); - // 判断报警记录是否已经存在 - AlarmRecords isExits = selectIsExist(alarmRecords); - if (isExits == null) { - insertAlarmRecord(alarmRecords); - } else { - // 更新报警记录 - isExits.setContent(content); - isExits.setCreateTime(collectionParamsManage.getCurTime()); - isExits.setStatus(0); - isExits.setIsSend(0); - updateAlarmRecord(isExits); - } + handleAlarmRecord(alarmRule, alarmCode, curValue, threshold1, alarmRecords, collectionParamsManage, "#{setValue}", alarmRule.getCondition1() + threshold1); + } + boolean compare1 = BigDecimalUtils.compare(alarmRule.getCondition2(), curValue, new BigDecimal(threshold2)); + if (compare1) { + handleAlarmRecord(alarmRule, alarmCode, curValue, threshold2, alarmRecords, collectionParamsManage, "#{setValue}", alarmRule.getCondition2() + threshold2); + } + } + + /** + * 处理报警记录的公共方法 + * + * @param alarmRule 报警规则 + * @param alarmCode 报警代码 + * @param curValue 当前值 + * @param threshold 阈值 + * @param alarmRecords 报警记录 + * @param collectionParamsManage 采集参数管理 + * @param placeholder 占位符 + * @param setValue 设置值 + */ + private void handleAlarmRecord(AlarmRules alarmRule, AlarmCode alarmCode, BigDecimal curValue, String threshold, + AlarmRecords alarmRecords, CollectionParamsManage collectionParamsManage, + String placeholder, String setValue) { + String content = alarmCode.getMsgContent(); + content = content.replace("#{curValue}", curValue.setScale(1, RoundingMode.HALF_UP).toString()); + content = content.replace("#{setValue}", setValue); + alarmRecords.setContent(content); + alarmRecords.setAlarmType(alarmRule.getAlarmType()); + alarmRecords.setEventType(alarmRule.getEventType()); + alarmRecords.setAlarmLevel(alarmRule.getAlarmLevel()); + alarmRecords.setLedgerId(alarmRule.getLedgerId()); + alarmRecords.setCpmId(alarmRule.getCpmId()); + alarmRecords.setDeviceName(alarmRule.getDeviceName()); + alarmRecords.setCpmName(alarmRule.getCpmName()); + alarmRecords.setCreateTime(collectionParamsManage.getCurTime()); + // 判断报警记录是否已经存在 + AlarmRecords isExits = selectIsExist(alarmRecords); + if (isExits == null) { + insertAlarmRecord(alarmRecords); + } else { + // 更新报警记录 + isExits.setContent(content); + isExits.setCreateTime(collectionParamsManage.getCurTime()); + isExits.setStatus(0); + isExits.setIsSend(0); + updateAlarmRecord(isExits); } } } diff --git a/mh-system/src/main/java/com/mh/system/service/policy/impl/PolicyManageServiceImpl.java b/mh-system/src/main/java/com/mh/system/service/policy/impl/PolicyManageServiceImpl.java index 22d6f0b..1f44d7f 100644 --- a/mh-system/src/main/java/com/mh/system/service/policy/impl/PolicyManageServiceImpl.java +++ b/mh-system/src/main/java/com/mh/system/service/policy/impl/PolicyManageServiceImpl.java @@ -72,9 +72,41 @@ public class PolicyManageServiceImpl implements IPolicyManageService { @Override public List selectDDCTimeList(String systemType, String funPolicyType, String houseId) { List policyManages = policyManageMapper.selectPolicyListByParams(systemType, funPolicyType, houseId); + + // 定义星期顺序映射 + Map dayOfWeekOrder = new HashMap<>(); + dayOfWeekOrder.put("星期一", 1); + dayOfWeekOrder.put("星期二", 2); + dayOfWeekOrder.put("星期三", 3); + dayOfWeekOrder.put("星期四", 4); + dayOfWeekOrder.put("星期五", 5); + dayOfWeekOrder.put("星期六", 6); + dayOfWeekOrder.put("星期日", 7); + Map> listMap = policyManages.stream() - // 先排序(例如按 policyType) -// .sorted(Comparator.comparing(PolicyManage::getPolicyType)) + // 按照星期顺序排序,同时考虑星期几后面的数字 + .sorted((policy1, policy2) -> { + String name1 = policy1.getPolicyName(); + String name2 = policy2.getPolicyName(); + + // 提取星期几部分和数字部分 + String day1 = extractDayOfWeek(name1); + String day2 = extractDayOfWeek(name2); + + int dayOrder1 = dayOfWeekOrder.getOrDefault(day1, Integer.MAX_VALUE); + int dayOrder2 = dayOfWeekOrder.getOrDefault(day2, Integer.MAX_VALUE); + + // 先按星期排序 + int dayCompare = Integer.compare(dayOrder1, dayOrder2); + if (dayCompare != 0) { + return dayCompare; + } + + // 如果是同一天,再按数字排序 + int num1 = extractNumber(name1); + int num2 = extractNumber(name2); + return Integer.compare(num1, num2); + }) // 处理每个PolicyManage对象的curValue字段 .peek(policy -> { policy.setCurValue(BigDecimal.valueOf(policy.getCurValue().intValue())); // 除以1000并保留整数 @@ -98,6 +130,38 @@ public class PolicyManageServiceImpl implements IPolicyManageService { return result; } + /** + * 从policyName中提取星期几部分 + * @param policyName 策略名称 + * @return 星期几部分 + */ + private String extractDayOfWeek(String policyName) { + if (policyName.startsWith("星期一")) return "星期一"; + if (policyName.startsWith("星期二")) return "星期二"; + if (policyName.startsWith("星期三")) return "星期三"; + if (policyName.startsWith("星期四")) return "星期四"; + if (policyName.startsWith("星期五")) return "星期五"; + if (policyName.startsWith("星期六")) return "星期六"; + if (policyName.startsWith("星期日")) return "星期日"; + return policyName; // 默认返回原名称 + } + + /** + * 从policyName中提取数字部分 + * @param policyName 策略名称 + * @return 数字部分,如果没有则返回0 + */ + private int extractNumber(String policyName) { + // 使用正则表达式提取数字 + java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("\\d+$"); + java.util.regex.Matcher matcher = pattern.matcher(policyName); + if (matcher.find()) { + return Integer.parseInt(matcher.group()); + } + return 0; // 没有数字则返回0 + } + + @Override public List selectPolicyList(String systemType, String funPolicyType) { // QueryWrapper queryWrapper = new QueryWrapper<>();