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 | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 101 insertions(+), 10 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 f1f4f8f..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,15 +697,16 @@ 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; } @@ -712,7 +714,7 @@ /** * 鑾峰彇鎸囧畾鏃堕棿涔嬪悗鐨勫嚑骞� qsw */ - public static Date getYearAfter(Date data,int number) { + public static Date getYearAfter(Date data, int number) { Calendar c = Calendar.getInstance(); c.setTime(data); c.add(Calendar.YEAR, number); @@ -725,7 +727,7 @@ /** * 鑾峰彇鎸囧畾鏃堕棿涔嬪悗鐨勫嚑澶� 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); @@ -738,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); @@ -749,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); @@ -764,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