diff --git a/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java b/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java index 3a98ec153..7ee05b49c 100644 --- a/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java +++ b/ruoyi-admin/src/main/java/org/dromara/web/controller/AuthController.java @@ -2,6 +2,7 @@ package org.dromara.web.controller; import cn.dev33.satoken.annotation.SaIgnore; import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -14,7 +15,6 @@ import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.model.LoginBody; import org.dromara.common.core.enums.PushSourceEnum; import org.dromara.common.core.enums.PushTypeEnum; -import org.dromara.common.core.utils.DateUtils; import org.dromara.common.core.utils.MessageUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.ValidatorUtils; @@ -98,7 +98,7 @@ public class AuthController { PushPayloadDTO.of( PushTypeEnum.MESSAGE, PushSourceEnum.BACKEND, - DateUtils.getTodayHour(new Date()) + "好,欢迎登录 RuoYi-Vue-Plus 后台管理系统", + DateUtil.isAM(new Date()) ? "上午" : "下午" + "好,欢迎登录 RuoYi-Vue-Plus 后台管理系统", null ) ); diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/FormatsType.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/FormatsType.java deleted file mode 100644 index 6df247a87..000000000 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/enums/FormatsType.java +++ /dev/null @@ -1,152 +0,0 @@ -package org.dromara.common.core.enums; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import org.dromara.common.core.utils.StringUtils; - -/* - * 日期格式 - * "yyyy":4位数的年份,例如:2023年表示为"2023"。 - * "yy":2位数的年份,例如:2023年表示为"23"。 - * "MM":2位数的月份,取值范围为01到12,例如:7月表示为"07"。 - * "M":不带前导零的月份,取值范围为1到12,例如:7月表示为"7"。 - * "dd":2位数的日期,取值范围为01到31,例如:22日表示为"22"。 - * "d":不带前导零的日期,取值范围为1到31,例如:22日表示为"22"。 - * "EEEE":星期的全名,例如:星期三表示为"Wednesday"。 - * "E":星期的缩写,例如:星期三表示为"Wed"。 - * "DDD" 或 "D":一年中的第几天,取值范围为001到366,例如:第200天表示为"200"。 - * 时间格式 - * "HH":24小时制的小时数,取值范围为00到23,例如:下午5点表示为"17"。 - * "hh":12小时制的小时数,取值范围为01到12,例如:下午5点表示为"05"。 - * "mm":分钟数,取值范围为00到59,例如:30分钟表示为"30"。 - * "ss":秒数,取值范围为00到59,例如:45秒表示为"45"。 - * "SSS":毫秒数,取值范围为000到999,例如:123毫秒表示为"123"。 - */ - -/** - * 日期格式与时间格式枚举 - */ -@Getter -@AllArgsConstructor -public enum FormatsType { - - /** - * 例如:2023年表示为"23" - */ - YY("yy"), - - /** - * 例如:2023年表示为"2023" - */ - YYYY("yyyy"), - - /** - * 例例如,2023年7月可以表示为 "2023-07" - */ - YYYY_MM("yyyy-MM"), - - /** - * 例如,日期 "2023年7月22日" 可以表示为 "2023-07-22" - */ - YYYY_MM_DD("yyyy-MM-dd"), - - /** - * 例如,当前时间如果是 "2023年7月22日下午3点30分",则可以表示为 "2023-07-22 15:30" - */ - YYYY_MM_DD_HH_MM("yyyy-MM-dd HH:mm"), - - /** - * 例如,当前时间如果是 "2023年7月22日下午3点30分45秒",则可以表示为 "2023-07-22 15:30:45" - */ - YYYY_MM_DD_HH_MM_SS("yyyy-MM-dd HH:mm:ss"), - - /** - * 例如:下午3点30分45秒,表示为 "15:30:45" - */ - HH_MM_SS("HH:mm:ss"), - - /** - * 例例如,2023年7月可以表示为 "2023/07" - */ - YYYY_MM_SLASH("yyyy/MM"), - - /** - * 例如,日期 "2023年7月22日" 可以表示为 "2023/07/22" - */ - YYYY_MM_DD_SLASH("yyyy/MM/dd"), - - /** - * 例如,当前时间如果是 "2023年7月22日下午3点30分45秒",则可以表示为 "2023/07/22 15:30:45" - */ - YYYY_MM_DD_HH_MM_SLASH("yyyy/MM/dd HH:mm"), - - /** - * 例如,当前时间如果是 "2023年7月22日下午3点30分45秒",则可以表示为 "2023/07/22 15:30:45" - */ - YYYY_MM_DD_HH_MM_SS_SLASH("yyyy/MM/dd HH:mm:ss"), - - /** - * 例例如,2023年7月可以表示为 "2023.07" - */ - YYYY_MM_DOT("yyyy.MM"), - - /** - * 例如,日期 "2023年7月22日" 可以表示为 "2023.07.22" - */ - YYYY_MM_DD_DOT("yyyy.MM.dd"), - - /** - * 例如,当前时间如果是 "2023年7月22日下午3点30分",则可以表示为 "2023.07.22 15:30" - */ - YYYY_MM_DD_HH_MM_DOT("yyyy.MM.dd HH:mm"), - - /** - * 例如,当前时间如果是 "2023年7月22日下午3点30分45秒",则可以表示为 "2023.07.22 15:30:45" - */ - YYYY_MM_DD_HH_MM_SS_DOT("yyyy.MM.dd HH:mm:ss"), - - /** - * 例如,2023年7月可以表示为 "202307" - */ - YYYYMM("yyyyMM"), - - /** - * 例如,2023年7月22日可以表示为 "20230722" - */ - YYYYMMDD("yyyyMMdd"), - - /** - * 例如,2023年7月22日下午3点可以表示为 "2023072215" - */ - YYYYMMDDHH("yyyyMMddHH"), - - /** - * 例如,2023年7月22日下午3点30分可以表示为 "202307221530" - */ - YYYYMMDDHHMM("yyyyMMddHHmm"), - - /** - * 例如,2023年7月22日下午3点30分45秒可以表示为 "20230722153045" - */ - YYYYMMDDHHMMSS("yyyyMMddHHmmss"); - - /** - * 时间格式 - */ - private final String timeFormat; - - /** - * 根据字符串内容匹配时间格式类型。 - * - * @param str 字符串内容 - * @return 时间格式类型 - */ - public static FormatsType getFormatsType(String str) { - for (FormatsType value : values()) { - if (StringUtils.contains(str, value.getTimeFormat())) { - return value; - } - } - throw new RuntimeException("'FormatsType' not found By " + str); - } -} diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DateUtils.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DateUtils.java deleted file mode 100644 index b349de644..000000000 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DateUtils.java +++ /dev/null @@ -1,421 +0,0 @@ -package org.dromara.common.core.utils; - -import cn.hutool.core.date.DateUnit; -import cn.hutool.core.date.DateUtil; -import lombok.AccessLevel; -import lombok.NoArgsConstructor; -import org.apache.commons.lang3.time.DateFormatUtils; -import org.dromara.common.core.enums.FormatsType; -import org.dromara.common.core.exception.ServiceException; - -import java.lang.management.ManagementFactory; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.time.*; -import java.time.format.DateTimeFormatter; -import java.util.Date; -import java.util.concurrent.TimeUnit; - -/** - * 时间工具类 - * - * @author ruoyi - */ -@NoArgsConstructor(access = AccessLevel.PRIVATE) -public class DateUtils extends org.apache.commons.lang3.time.DateUtils { - /** - * 日期解析格式集合。 - */ - private static final String[] PARSE_PATTERNS = { - "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", - "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", - "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM" - }; - - /** - * 获取当前日期和时间 - * - * @return 当前日期和时间的 Date 对象表示 - */ - public static Date getNowDate() { - return new Date(); - } - - /** - * 获取当前日期的字符串表示,格式为YYYY-MM-DD - * - * @return 当前日期的字符串表示 - */ - public static String getDate() { - return dateTimeNow(FormatsType.YYYY_MM_DD); - } - - /** - * 获取当前日期的字符串表示,格式为yyyyMMdd - * - * @return 当前日期的字符串表示 - */ - public static String getCurrentDate() { - return DateFormatUtils.format(new Date(), FormatsType.YYYYMMDD.getTimeFormat()); - } - - /** - * 获取当前日期的路径格式字符串,格式为"yyyy/MM/dd" - * - * @return 当前日期的路径格式字符串 - */ - public static String datePath() { - Date now = new Date(); - return DateFormatUtils.format(now, FormatsType.YYYY_MM_DD_SLASH.getTimeFormat()); - } - - /** - * 获取当前时间的字符串表示,格式为YYYY-MM-DD HH:MM:SS - * - * @return 当前时间的字符串表示 - */ - public static String getTime() { - return dateTimeNow(FormatsType.YYYY_MM_DD_HH_MM_SS); - } - - /** - * 获取当前时间的字符串表示,格式为 "HH:MM:SS" - * - * @return 当前时间的字符串表示,格式为 "HH:MM:SS" - */ - public static String getTimeWithHourMinuteSecond() { - return dateTimeNow(FormatsType.HH_MM_SS); - } - - /** - * 获取当前日期和时间的字符串表示,格式为YYYYMMDDHHMMSS - * - * @return 当前日期和时间的字符串表示 - */ - public static String dateTimeNow() { - return dateTimeNow(FormatsType.YYYYMMDDHHMMSS); - } - - /** - * 获取当前日期和时间的指定格式的字符串表示 - * - * @param format 日期时间格式,例如"YYYY-MM-DD HH:MM:SS" - * @return 当前日期和时间的字符串表示 - */ - public static String dateTimeNow(final FormatsType format) { - return parseDateToStr(format, new Date()); - } - - /** - * 将指定日期格式化为 YYYY-MM-DD 格式的字符串 - * - * @param date 要格式化的日期对象 - * @return 格式化后的日期字符串 - */ - public static String formatDate(final Date date) { - return parseDateToStr(FormatsType.YYYY_MM_DD, date); - } - - /** - * 将指定日期格式化为 YYYY-MM-DD HH:MM:SS 格式的字符串 - * - * @param date 要格式化的日期对象 - * @return 格式化后的日期时间字符串 - */ - public static String formatDateTime(final Date date) { - return parseDateToStr(FormatsType.YYYY_MM_DD_HH_MM_SS, date); - } - - /** - * 将 LocalDateTime 格式化为 YYYY-MM-DD HH:MM:SS 格式的字符串 - * - * @param dateTime 要格式化的 LocalDateTime 对象 - * @return 格式化后的日期时间字符串 - */ - public static String formatDateTime(final LocalDateTime dateTime) { - return dateTime.format(DateTimeFormatter.ofPattern(FormatsType.YYYY_MM_DD_HH_MM_SS.getTimeFormat())); - } - - /** - * 将指定日期按照指定格式进行格式化 - * - * @param format 要使用的日期时间格式,例如"YYYY-MM-DD HH:MM:SS" - * @param date 要格式化的日期对象 - * @return 格式化后的日期时间字符串 - */ - public static String parseDateToStr(final FormatsType format, final Date date) { - return new SimpleDateFormat(format.getTimeFormat()).format(date); - } - - /** - * 将指定格式的日期时间字符串转换为 Date 对象 - * - * @param format 要解析的日期时间格式,例如"YYYY-MM-DD HH:MM:SS" - * @param ts 要解析的日期时间字符串 - * @return 解析后的 Date 对象 - * @throws RuntimeException 如果解析过程中发生异常 - */ - public static Date parseDateTime(final FormatsType format, final String ts) { - try { - return new SimpleDateFormat(format.getTimeFormat()).parse(ts); - } catch (ParseException e) { - throw new ServiceException("日期时间解析失败:" + ts, e); - } - } - - /** - * 将对象转换为日期对象 - * - * @param str 要转换的对象,通常是字符串 - * @return 转换后的日期对象,如果转换失败或输入为null,则返回null - */ - public static Date parseDate(Object str) { - if (str == null) { - return null; - } - try { - return parseDate(str.toString(), PARSE_PATTERNS); - } catch (ParseException e) { - return null; - } - } - - /** - * 获取服务器启动时间 - * - * @return 服务器启动时间的 Date 对象表示 - */ - public static Date getServerStartDate() { - long time = ManagementFactory.getRuntimeMXBean().getStartTime(); - return new Date(time); - } - - /** - * 计算两个时间之间的时间差,并以指定单位返回(绝对值) - * - * @param start 起始时间 - * @param end 结束时间 - * @param unit 所需返回的时间单位(DAYS、HOURS、MINUTES、SECONDS、MILLISECONDS、MICROSECONDS、NANOSECONDS) - * @return 时间差的绝对值,以指定单位表示 - */ - public static long difference(Date start, Date end, TimeUnit unit) { - // 计算时间差,单位为毫秒,取绝对值避免负数 - long diffInMillis = Math.abs(end.getTime() - start.getTime()); - - // 根据目标单位转换时间差 - return switch (unit) { - case DAYS -> diffInMillis / TimeUnit.DAYS.toMillis(1); - case HOURS -> diffInMillis / TimeUnit.HOURS.toMillis(1); - case MINUTES -> diffInMillis / TimeUnit.MINUTES.toMillis(1); - case SECONDS -> diffInMillis / TimeUnit.SECONDS.toMillis(1); - case MILLISECONDS -> diffInMillis; - case MICROSECONDS -> TimeUnit.MILLISECONDS.toMicros(diffInMillis); - case NANOSECONDS -> TimeUnit.MILLISECONDS.toNanos(diffInMillis); - }; - } - - /** - * 计算两个日期之间的时间差,并以天、小时和分钟的格式返回 - * - * @param endDate 结束日期 - * @param nowDate 当前日期 - * @return 表示时间差的字符串,格式为"天 小时 分钟" - */ - public static String getDatePoor(Date endDate, Date nowDate) { - long diffInMillis = endDate.getTime() - nowDate.getTime(); - long day = TimeUnit.MILLISECONDS.toDays(diffInMillis); - long hour = TimeUnit.MILLISECONDS.toHours(diffInMillis) % 24; - long min = TimeUnit.MILLISECONDS.toMinutes(diffInMillis) % 60; - return String.format("%d天 %d小时 %d分钟", day, hour, min); - } - - /** - * 计算两个时间点的差值(天、小时、分钟、秒),当值为0时不显示该单位 - * - * @param endDate 结束时间 - * @param nowDate 当前时间 - * @return 时间差字符串,格式为 "x天 x小时 x分钟 x秒",若为 0 则不显示 - */ - public static String getTimeDifference(Date endDate, Date nowDate) { - long diffInMillis = endDate.getTime() - nowDate.getTime(); - long day = TimeUnit.MILLISECONDS.toDays(diffInMillis); - long hour = TimeUnit.MILLISECONDS.toHours(diffInMillis) % 24; - long min = TimeUnit.MILLISECONDS.toMinutes(diffInMillis) % 60; - long sec = TimeUnit.MILLISECONDS.toSeconds(diffInMillis) % 60; - // 构建时间差字符串,条件是值不为0才显示 - StringBuilder result = new StringBuilder(); - if (day > 0) { - result.append(String.format("%d天 ", day)); - } - if (hour > 0) { - result.append(String.format("%d小时 ", hour)); - } - if (min > 0) { - result.append(String.format("%d分钟 ", min)); - } - if (sec > 0) { - result.append(String.format("%d秒", sec)); - } - return !result.isEmpty() ? result.toString().trim() : "0秒"; - } - - /** - * 计算两个 LocalDateTime 时间点的差值(天、小时、分钟、秒),当值为0时不显示该单位 - * - * @param endDate 结束时间 - * @param nowDate 当前时间 - * @return 时间差字符串,格式为 "x天 x小时 x分钟 x秒",若为 0 则不显示 - */ - public static String getTimeDifference(LocalDateTime endDate, LocalDateTime nowDate) { - long diffInMillis = java.time.Duration.between(nowDate, endDate).toMillis(); - long day = TimeUnit.MILLISECONDS.toDays(diffInMillis); - long hour = TimeUnit.MILLISECONDS.toHours(diffInMillis) % 24; - long min = TimeUnit.MILLISECONDS.toMinutes(diffInMillis) % 60; - long sec = TimeUnit.MILLISECONDS.toSeconds(diffInMillis) % 60; - StringBuilder result = new StringBuilder(); - if (day > 0) { - result.append(String.format("%d天 ", day)); - } - if (hour > 0) { - result.append(String.format("%d小时 ", hour)); - } - if (min > 0) { - result.append(String.format("%d分钟 ", min)); - } - if (sec > 0) { - result.append(String.format("%d秒", sec)); - } - return !result.isEmpty() ? result.toString().trim() : "0秒"; - } - - /** - * 将 LocalDateTime 对象转换为 Date 对象 - * - * @param temporalAccessor 要转换的 LocalDateTime 对象 - * @return 转换后的 Date 对象 - */ - public static Date toDate(LocalDateTime temporalAccessor) { - ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault()); - return Date.from(zdt.toInstant()); - } - - /** - * 将 LocalDate 对象转换为 Date 对象 - * - * @param temporalAccessor 要转换的 LocalDate 对象 - * @return 转换后的 Date 对象 - */ - public static Date toDate(LocalDate temporalAccessor) { - LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0)); - ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault()); - return Date.from(zdt.toInstant()); - } - - /** - * 校验日期范围 - * - * @param startDate 开始日期 - * @param endDate 结束日期 - * @param maxValue 最大时间跨度的限制值 - * @param unit 时间跨度的单位,可选择 "DAYS"、"HOURS" 或 "MINUTES" - */ - public static void validateDateRange(Date startDate, Date endDate, int maxValue, TimeUnit unit) { - // 校验结束日期不能早于开始日期 - if (endDate.before(startDate)) { - throw new ServiceException("结束日期不能早于开始日期"); - } - - // 计算时间跨度 - long diffInMillis = endDate.getTime() - startDate.getTime(); - - // 根据单位转换时间跨度 - long diff = switch (unit) { - case DAYS -> TimeUnit.MILLISECONDS.toDays(diffInMillis); - case HOURS -> TimeUnit.MILLISECONDS.toHours(diffInMillis); - case MINUTES -> TimeUnit.MILLISECONDS.toMinutes(diffInMillis); - default -> throw new IllegalArgumentException("不支持的时间单位"); - }; - - // 校验时间跨度不超过最大限制 - if (diff > maxValue) { - throw new ServiceException("最大时间跨度为 {} {}", maxValue, unit.toString().toLowerCase()); - } - } - - /** - * 根据指定日期时间获取时间段(凌晨 / 上午 / 中午 / 下午 / 晚上) - * - * @param date 日期时间 - * @return 时间段描述 - */ - public static String getTodayHour(Date date) { - int hour = DateUtil.hour(date, true); - if (hour <= 6) { - return "凌晨"; - } else if (hour < 12) { - return "上午"; - } else if (hour == 12) { - return "中午"; - } else if (hour <= 18) { - return "下午"; - } else { - return "晚上"; - } - } - - /** - * 将日期格式化为仿微信的友好时间 - *
- * 规则说明:
- * 1. 未来时间:yyyy-MM-dd HH:mm
- * 2. 今天:
- * - 1 分钟内:刚刚
- * - 1 小时内:X 分钟前
- * - 超过 1 小时:凌晨/上午/中午/下午/晚上 HH:mm
- * 3. 昨天:昨天 HH:mm
- * 4. 本周:周X HH:mm
- * 5. 今年内:MM-dd HH:mm
- * 6. 非今年:yyyy-MM-dd HH:mm
- *
- * @param date 日期时间
- * @return 格式化后的时间描述
- */
- public static String formatFriendlyTime(Date date) {
- if (date == null) {
- return "";
- }
- Date now = DateUtil.date();
-
- // 未来时间或非今年
- if (date.after(now) || DateUtil.year(date) != DateUtil.year(now)) {
- return parseDateToStr(FormatsType.YYYY_MM_DD_HH_MM, date);
- }
-
- // 今天
- if (DateUtil.isSameDay(date, now)) {
- long minutes = DateUtil.between(date, now, DateUnit.MINUTE);
- if (minutes < 1) {
- return "刚刚";
- }
- if (minutes < 60) {
- return minutes + "分钟前";
- }
- return getTodayHour(date) + " " + DateUtil.format(date, "HH:mm");
- }
-
- // 昨天
- if (DateUtil.isSameDay(date, DateUtil.yesterday())) {
- return "昨天 " + DateUtil.format(date, "HH:mm");
- }
-
- // 本周
- if (DateUtil.isSameWeek(date, now, true)) {
- return DateUtil.dayOfWeekEnum(date).toChinese("周")
- + " " + DateUtil.format(date, "HH:mm");
- }
-
- // 今年内其它时间
- return DateUtil.format(date, "MM-dd HH:mm");
- }
-
-}
diff --git a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/client/AbstractOssClientImpl.java b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/client/AbstractOssClientImpl.java
index 0fc385069..1d7d269e6 100644
--- a/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/client/AbstractOssClientImpl.java
+++ b/ruoyi-common/ruoyi-common-oss/src/main/java/org/dromara/common/oss/client/AbstractOssClientImpl.java
@@ -1,8 +1,8 @@
package org.dromara.common.oss.client;
+import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.IdUtil;
-import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.oss.config.OssClientConfig;
import org.dromara.common.oss.exception.S3StorageException;
@@ -35,10 +35,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.time.Duration;
import java.time.ZoneOffset;
-import java.util.Collection;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
import java.util.concurrent.CompletionException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
@@ -203,7 +200,7 @@ public abstract class AbstractOssClientImpl implements OssClient {
.orElse("");
String mergedPrefix = mergePrefix(defaultPrefix, businessPrefix);
String suffix = suffix(fileName);
- String datePath = DateUtils.datePath();
+ String datePath = DateUtil.format(new Date(), "yyyy/MM/dd");
String uuid = IdUtil.fastSimpleUUID();
String path = mergedPrefix.isEmpty() ? datePath + StringUtils.SLASH + uuid : mergedPrefix + StringUtils.SLASH + datePath + StringUtils.SLASH + uuid;
return path + suffix;
diff --git a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/TemplateEngineUtils.java b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/TemplateEngineUtils.java
index 0d6fa14e0..55252beba 100644
--- a/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/TemplateEngineUtils.java
+++ b/ruoyi-modules/ruoyi-gen/src/main/java/org/dromara/gen/util/TemplateEngineUtils.java
@@ -2,6 +2,7 @@ package org.dromara.gen.util;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Dict;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.template.TemplateEngine;
@@ -10,7 +11,6 @@ import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.exception.ServiceException;
-import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.json.utils.JsonUtils;
@@ -26,6 +26,7 @@ import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import java.io.IOException;
+import java.time.LocalDateTime;
import java.util.*;
import java.util.function.Consumer;
@@ -102,7 +103,7 @@ public class TemplateEngineUtils {
context.put("basePackage", getPackagePrefix(packageName));
context.put("packageName", packageName);
context.put("author", genTable.getFunctionAuthor());
- context.put("datetime", DateUtils.getDate());
+ context.put("datetime", DateUtil.formatLocalDateTime(LocalDateTime.now()));
context.put("pkColumn", genTable.getPkColumn());
context.put("importList", getImportList(genTable));
context.put("permissionPrefix", getPermissionPrefix(moduleName, businessName));
diff --git a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/AlipayBillTask.java b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/AlipayBillTask.java
index 8f28c9885..608e83f27 100644
--- a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/AlipayBillTask.java
+++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/AlipayBillTask.java
@@ -1,16 +1,17 @@
package org.dromara.job.snailjob;
+import cn.hutool.core.date.DateUtil;
import com.aizuda.snailjob.client.job.core.annotation.JobExecutor;
import com.aizuda.snailjob.client.job.core.dto.JobArgs;
import com.aizuda.snailjob.common.log.SnailJobLog;
import com.aizuda.snailjob.model.dto.ExecuteResult;
-import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.json.utils.JsonUtils;
import org.dromara.job.entity.BillDTO;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
+import java.time.LocalDateTime;
/**
* DAG工作流任务-模拟支付宝账单任务
@@ -33,7 +34,7 @@ public class AlipayBillTask {
// 设置清算日期
String settlementDate = (String) jobArgs.getWfContext().get("settlementDate");
if (StringUtils.equals(settlementDate, "sysdate")) {
- settlementDate = DateUtils.getDate();
+ settlementDate = DateUtil.formatLocalDateTime(LocalDateTime.now());
}
BillDTO billDTO = new BillDTO(23456789L, "alipay", settlementDate, new BigDecimal("2345.67"));
// 把billDTO对象放入上下文进行传递
diff --git a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/WechatBillTask.java b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/WechatBillTask.java
index a162cea90..ff7664bca 100644
--- a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/WechatBillTask.java
+++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/WechatBillTask.java
@@ -1,16 +1,17 @@
package org.dromara.job.snailjob;
+import cn.hutool.core.date.DateUtil;
import com.aizuda.snailjob.client.job.core.annotation.JobExecutor;
import com.aizuda.snailjob.client.job.core.dto.JobArgs;
import com.aizuda.snailjob.common.log.SnailJobLog;
import com.aizuda.snailjob.model.dto.ExecuteResult;
-import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.common.json.utils.JsonUtils;
import org.dromara.job.entity.BillDTO;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
+import java.time.LocalDateTime;
/**
* DAG工作流任务-模拟微信账单任务
@@ -34,7 +35,7 @@ public class WechatBillTask {
// 是sysdate设置为当前日期;否则取管理页面设置的值
String settlementDate = (String) jobArgs.getWfContext().get("settlementDate");
if (StringUtils.equals(settlementDate, "sysdate")) {
- settlementDate = DateUtils.getDate();
+ settlementDate = DateUtil.formatLocalDateTime(LocalDateTime.now());
}
BillDTO billDTO = new BillDTO(123456789L, "wechat", settlementDate, new BigDecimal("1234.56"));
// 把billDTO对象放入上下文进行传递
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowHisTaskVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowHisTaskVo.java
index 06a69d4c6..94cb46bfb 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowHisTaskVo.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowHisTaskVo.java
@@ -1,7 +1,9 @@
package org.dromara.workflow.domain.vo;
+import cn.hutool.core.date.BetweenFormatter;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.LocalDateTimeUtil;
import lombok.Data;
-import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.translation.annotation.Translation;
import org.dromara.common.translation.constant.TransConstant;
import org.dromara.warm.flow.core.enums.CooperateType;
@@ -10,6 +12,7 @@ import org.dromara.workflow.common.constant.FlowConstant;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
+import java.util.Date;
import java.util.List;
/**
@@ -239,7 +242,10 @@ public class FlowHisTaskVo implements Serializable {
private void updateRunDuration() {
// 如果创建时间和更新时间均不为空,计算它们之间的时长
if (this.updateTime != null && this.createTime != null) {
- this.runDuration = DateUtils.getTimeDifference(this.updateTime, this.createTime);
+ this.runDuration = DateUtil.formatBetween(
+ LocalDateTimeUtil.between(this.createTime, this.updateTime).toMillis(),
+ BetweenFormatter.Level.SECOND
+ );
}
}
diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwChartExtServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwChartExtServiceImpl.java
index c5533c198..dc71d6fe3 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwChartExtServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwChartExtServiceImpl.java
@@ -2,13 +2,16 @@ package org.dromara.workflow.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
+import cn.hutool.core.date.BetweenFormatter;
+import cn.hutool.core.date.DatePattern;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.date.LocalDateTimeUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.service.DictService;
-import org.dromara.common.core.utils.DateUtils;
import org.dromara.common.core.utils.StreamUtils;
import org.dromara.common.core.utils.StringUtils;
import org.dromara.system.api.DeptService;
@@ -164,11 +167,11 @@ public class FlwChartExtServiceImpl implements ChartExtService {
/**
* 处理节点的扩展信息,构建用于流程图悬浮提示的内容
*
- * @param nodeJson 当前流程节点对象,包含节点基础信息和提示内容容器
- * @param taskList 当前节点关联的历史审批任务列表,用于生成提示信息
- * @param userMap 用户信息映射表,key 为用户ID,value 为用户DTO对象,用于获取审批人信息
+ * @param nodeJson 当前流程节点对象,包含节点基础信息和提示内容容器
+ * @param taskList 当前节点关联的历史审批任务列表,用于生成提示信息
+ * @param userMap 用户信息映射表,key 为用户ID,value 为用户DTO对象,用于获取审批人信息
* @param deptNameMap 部门名称映射表,key 为部门ID,value 为部门名称
- * @param dictType 数据字典映射表,key 为字典项编码,value 为对应显示值,用于翻译审批状态等
+ * @param dictType 数据字典映射表,key 为字典项编码,value 为对应显示值,用于翻译审批状态等
*/
private void processNodeExtInfo(NodeJson nodeJson, List