diff --git a/ruoyi-auth/src/main/java/org/dromara/auth/controller/TokenController.java b/ruoyi-auth/src/main/java/org/dromara/auth/controller/TokenController.java index cd9f8d61..548adec4 100644 --- a/ruoyi-auth/src/main/java/org/dromara/auth/controller/TokenController.java +++ b/ruoyi-auth/src/main/java/org/dromara/auth/controller/TokenController.java @@ -43,6 +43,7 @@ import org.springframework.web.bind.annotation.*; import java.net.URL; import java.nio.charset.StandardCharsets; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -104,7 +105,7 @@ public class TokenController { Long userId = LoginHelper.getUserId(); scheduledExecutorService.schedule(() -> { - remoteMessageService.publishMessage(List.of(userId), "欢迎登录RuoYi-Cloud-Plus微服务管理系统"); + remoteMessageService.publishMessage(List.of(userId), DateUtils.getTodayHour(new Date()) + "好,欢迎登录 RuoYi-Cloud-Plus 后台管理系统"); }, 5, TimeUnit.SECONDS); return R.ok(loginVo); } 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 index b4d14624..6c450853 100644 --- 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 @@ -1,5 +1,7 @@ package org.dromara.common.core.utils; +import cn.hutool.core.date.DateUnit; +import cn.hutool.core.date.DateUtil; import org.apache.commons.lang3.time.DateFormatUtils; import org.dromara.common.core.enums.FormatsType; import org.dromara.common.core.exception.ServiceException; @@ -297,4 +299,80 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils { } } + /** + * 根据指定日期时间获取时间段(凌晨 / 上午 / 中午 / 下午 / 晚上) + * + * @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-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 ee0fd633..a9f6a60f 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 @@ -253,4 +253,8 @@ public class FlowHisTaskVo implements Serializable { this.cooperateTypeName = CooperateType.getValueByKey(cooperateType); } + public String getCreateTime() { + return DateUtils.formatFriendlyTime(createTime); + } + } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowTaskVo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowTaskVo.java index 2e23241a..ffe80491 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowTaskVo.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/vo/FlowTaskVo.java @@ -1,6 +1,7 @@ package org.dromara.workflow.domain.vo; 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.entity.User; @@ -8,7 +9,6 @@ import org.dromara.workflow.common.constant.FlowConstant; import java.io.Serial; import java.io.Serializable; -import java.math.BigDecimal; import java.util.Date; import java.util.List; import java.util.Map; @@ -212,4 +212,8 @@ public class FlowTaskVo implements Serializable { private String businessTitle; //业务扩展信息结束 + public String getCreateTime() { + return DateUtils.formatFriendlyTime(createTime); + } + }