lyh
23 小时以前 0d06048c5d560e301bf17fad476975c8ffffcb56
lxzn-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java
@@ -11,6 +11,7 @@
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.TimeZone;
import java.util.function.Consumer;
import org.jeecg.common.constant.SymbolConstant;
import org.springframework.util.StringUtils;
@@ -795,4 +796,67 @@
        calendar.add(Calendar.YEAR, year);
        return calendar.getTime();
    }
}
    /**
     * 检查日期是否在今天或之前(忽略时间部分)
     */
    public static boolean isBeforeOrEqualToday(Date targetDate) {
        if (targetDate == null) return false;
        Calendar calTarget = Calendar.getInstance();
        calTarget.setTime(targetDate);
        clearTime(calTarget);
        Calendar calToday = Calendar.getInstance();
        clearTime(calToday);
        return !calTarget.after(calToday);
    }
    private static void clearTime(Calendar cal) {
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
    }
    public static void calculateMaintenanceDates(Date nextDate, Integer periodYears,
                                           Consumer<Date> setNextMaintenance,
                                           Consumer<Date> setLatestMaintenance) {
        if (nextDate == null || periodYears == null || periodYears <= 0) {
            return;
        }
        // 转换为Java 8日期类型
        LocalDate nextLocal = nextDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
        LocalDate today = LocalDate.now();
        // 确保有效的计算周期
        int period = Math.max(1, periodYears); // 防止传入0或负值
        if (nextLocal.isAfter(today)) {
            // 未过期:计算最近维护日期
            setLatestMaintenance.accept(
                    Date.from(nextLocal.minusYears(period).atStartOfDay()
                            .atZone(ZoneId.systemDefault()).toInstant())
            );
        } else {
            // 已过期:计算新的下次维护日期
            while (!nextLocal.isAfter(today)) {
                nextLocal = nextLocal.plusYears(period);
            }
            // 设置新日期
            setNextMaintenance.accept(
                    Date.from(nextLocal.atStartOfDay()
                            .atZone(ZoneId.systemDefault()).toInstant())
            );
            // 计算最近维护日期
            setLatestMaintenance.accept(
                    Date.from(nextLocal.minusYears(period).atStartOfDay()
                            .atZone(ZoneId.systemDefault()).toInstant())
            );
        }
    }
}