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 |  122 +++++++++++++++++++++++++++++++++++++---
 1 files changed, 113 insertions(+), 9 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 a28de25..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
@@ -5,10 +5,13 @@
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.ZoneId;
 import java.util.Calendar;
 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;
@@ -201,9 +204,6 @@
     public static String date2Str(SimpleDateFormat dateSdf) {
         synchronized (dateSdf) {
             Date date = getDate();
-            if (null == date) {
-                return null;
-            }
             return dateSdf.format(date);
         }
     }
@@ -689,6 +689,7 @@
         calendar.setTime(getDate());
         return calendar.get(Calendar.YEAR);
     }
+
     public static String getDayStr(Date date) {
         Calendar calendar = getCalendar();
         calendar.setTime(date);// 鎶婂綋鍓嶆椂闂磋祴缁欐棩鍘�
@@ -696,23 +697,37 @@
         String dayStr = day < 10 ? "0" + day : day + "";
         return dayStr;
     }
+
     /**
      * 灏嗗瓧绗︿覆杞垚鏃堕棿
      * @param str
      * @return
      */
-    public static Date parseDatetime(String str){
+    public static Date parseDatetime(String str) {
         try {
             return datetimeFormat.get().parse(str);
-        }catch (Exception e){
+        } catch (Exception e) {
         }
         return null;
     }
 
     /**
+     * 鑾峰彇鎸囧畾鏃堕棿涔嬪悗鐨勫嚑骞� qsw
+     */
+    public static Date getYearAfter(Date data, int number) {
+        Calendar c = Calendar.getInstance();
+        c.setTime(data);
+        c.add(Calendar.YEAR, number);
+        Date afterTime = c.getTime();
+//        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//        String resultDate = f.format(afterTime);
+        return afterTime;
+    }
+
+    /**
      * 鑾峰彇鎸囧畾鏃堕棿涔嬪悗鐨勫嚑澶� qsw
      */
-    public static Date getDayAfter(Date data,int number) {
+    public static Date getDayAfter(Date data, int number) {
         Calendar c = Calendar.getInstance();
         c.setTime(data);
         c.add(Calendar.DAY_OF_MONTH, number);
@@ -725,7 +740,7 @@
     /**
      * 鑾峰彇鎸囧畾鏃堕棿涔嬪悗鐨勫嚑鍒嗛挓 qsw
      */
-    public static Date getMinAfter(Date data,int number) {
+    public static Date getMinAfter(Date data, int number) {
         Calendar c = Calendar.getInstance();
         c.setTime(data);
         c.add(Calendar.MINUTE, number);
@@ -736,7 +751,7 @@
     /**
      * 鑾峰彇鎸囧畾鏃堕棿涔嬪悗鐨勫嚑灏忔椂 qsw
      */
-    public static Date getHourAfter(Date data,int number) {
+    public static Date getHourAfter(Date data, int number) {
         Calendar c = Calendar.getInstance();
         c.setTime(data);
         c.add(Calendar.HOUR_OF_DAY, number);
@@ -751,8 +766,97 @@
         return dateFormat.format(date);
     }
 
+    /**
+     * Date 杞� LocalDate
+     * @param date
+     * @return
+     */
+    public static LocalDate dateToLocalDate(Date date) {
+        return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+    }
 
+    /**
+     * LocalDate 杞� Date
+     * @param localDate
+     * @return
+     */
+    public static Date localDateToDate(LocalDate localDate) {
+        return Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
+    }
 
+    /**
+     * 鏃ユ湡鍔犲勾
+     * @param date
+     * @param year
+     * @return
+     */
+    public static Date addYear(Date date, int year) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date);
+        calendar.add(Calendar.YEAR, year);
+        return calendar.getTime();
+    }
 
+    /**
+     * 妫�鏌ユ棩鏈熸槸鍚﹀湪浠婂ぉ鎴栦箣鍓嶏紙蹇界暐鏃堕棿閮ㄥ垎锛�
+     */
+    public static boolean isBeforeOrEqualToday(Date targetDate) {
+        if (targetDate == null) return false;
 
-}
\ No newline at end of file
+        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