| | |
| | | LocalDateTime currentTime) { |
| | | try { |
| | | switch (frequencyType) { |
| | | case "YEARLY": |
| | | return calculateYearlyNextTime(frequencyDetail, currentTime); |
| | | case "DAILY": |
| | | return calculateDailyNextTime(frequencyDetail, currentTime); |
| | | case "WEEKLY": |
| | |
| | | } |
| | | } |
| | | |
| | | /** 每年巡检默认执行时间:07:00(页面上不精确到时分) */ |
| | | private static final LocalTime DEFAULT_EXECUTION_TIME = LocalTime.of(7, 0); |
| | | |
| | | /** |
| | | * 计算每年任务的下次执行时间 |
| | | * frequencyDetail 格式为 "月,日",可选 "月,日,HH:mm"(默认 07:00) |
| | | */ |
| | | private LocalDateTime calculateYearlyNextTime(String detail, LocalDateTime current) { |
| | | String[] parts = detail.split(","); |
| | | int month = Integer.parseInt(parts[0].trim()); |
| | | int day = Integer.parseInt(parts[1].trim()); |
| | | LocalTime time = parts.length >= 3 ? LocalTime.parse(parts[2].trim()) : DEFAULT_EXECUTION_TIME; |
| | | |
| | | int year = current.getYear(); |
| | | LocalDateTime target = LocalDateTime.of( |
| | | year, month, Math.min(day, YearMonth.of(year, month).lengthOfMonth()), time.getHour(), time.getMinute()); |
| | | if (!current.isBefore(target)) { |
| | | year++; |
| | | target = LocalDateTime.of( |
| | | year, month, Math.min(day, YearMonth.of(year, month).lengthOfMonth()), time.getHour(), time.getMinute()); |
| | | } |
| | | return target; |
| | | } |
| | | |
| | | /** |
| | | * 计算每日任务的下次执行时间 |
| | | */ |