主要代码
List<SecurityPolicyFrequencyTimeVo> timeRanges = new ArrayList<>();
Optional<SecurityPolicyFrequencyTimeVo> highestWeightTimeRange = findHighestWeightTimeRangeIfCurrentTimeInRange(timeRanges);
if (!highestWeightTimeRange.isPresent()) {
throw new BizLogicException("当前时间不在时间范围内");
} else {
SecurityPolicyFrequencyTimeVo selectedTimeRange = highestWeightTimeRange.get();
}
private Optional<SecurityPolicyFrequencyTimeVo> findHighestWeightTimeRangeIfCurrentTimeInRange(List<SecurityPolicyFrequencyTimeVo> timeRanges) {
LocalTime currentTime = LocalTime.now();
List<SecurityPolicyFrequencyTimeVo> filteredList = timeRanges.stream()
.filter(range -> range.isCurrentTimeInRange(currentTime, range.getBeginTime(), range.getEndTime(), DateUtil.HH_MM_SS))
.collect(Collectors.toList());
return filteredList.stream()
.max(Comparator.comparingInt(SecurityPolicyFrequencyTimeVo::getFrequency));
}
SecurityPolicyFrequencyTimeVo类
@Data
public class SecurityPolicyFrequencyTimeVo {
@ApiModelProperty(value = "开始时间", required = true)
private String beginTime;
@ApiModelProperty(value = "结束时间", required = true)
private String endTime;
private Integer frequency;
public SecurityPolicyFrequencyTimeVo(String beginTime, String endTime, Integer frequency) {
this.beginTime = beginTime;
this.endTime = endTime;
this.frequency = frequency;
}
public SecurityPolicyFrequencyTimeVo() {
}
public boolean isCurrentTimeInRange(LocalTime currentTime, String start, String end, String format) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
LocalTime startTime = LocalTime.parse(start, formatter);
LocalTime endTime = LocalTime.parse(end, formatter);
if (startTime.isBefore(endTime)) {
return !currentTime.isBefore(startTime) && !currentTime.isAfter(endTime);
} else {
return currentTime.isAfter(startTime) || currentTime.isBefore(endTime);
}
}