gaoluyang
5 天以前 cf330c6a6c2ae7ec86d20de465d5af27a4684cf6
src/main/java/com/ruoyi/inspectiontask/service/impl/TimingTaskJob.java
@@ -146,6 +146,8 @@
                                                     LocalDateTime currentTime) {
        try {
            switch (frequencyType) {
                case "YEARLY":
                    return calculateYearlyNextTime(frequencyDetail, currentTime);
                case "DAILY":
                    return calculateDailyNextTime(frequencyDetail, currentTime);
                case "WEEKLY":
@@ -162,6 +164,30 @@
        }
    }
    /** 每年巡检默认执行时间: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;
    }
    /**
     * 计算每日任务的下次执行时间
     */