From 0d06048c5d560e301bf17fad476975c8ffffcb56 Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期五, 05 九月 2025 16:07:31 +0800
Subject: [PATCH] 添加三级保养工作计划单生成规则

---
 lxzn-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java |   66 ++++++++++++++++++++++++++++++++
 1 files changed, 65 insertions(+), 1 deletions(-)

diff --git a/lxzn-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java b/lxzn-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java
index c702b27..97fb3a2 100644
--- a/lxzn-boot-base-core/src/main/java/org/jeecg/common/util/DateUtils.java
+++ b/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();
     }
-}
\ No newline at end of file
+
+    /**
+     * 妫�鏌ユ棩鏈熸槸鍚﹀湪浠婂ぉ鎴栦箣鍓嶏紙蹇界暐鏃堕棿閮ㄥ垎锛�
+     */
+    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;
+        }
+
+        // 杞崲涓篔ava 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())
+            );
+        }
+    }
+}

--
Gitblit v1.9.3