Procházet zdrojové kódy

!805 update 优化我的待办时间展示
* update 优化我的待办时间展示

AprilWind před 6 měsíci
rodič
revize
bcd5bb0f86

+ 56 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/utils/DateUtils.java

@@ -1,5 +1,6 @@
 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;
@@ -319,4 +320,59 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
         }
     }
 
+    /**
+     * 将日期格式化为仿微信的友好时间
+     * <p>
+     * 规则说明:
+     * 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");
+    }
+
 }

+ 4 - 0
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);
+    }
+
 }

+ 5 - 1
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);
+    }
+
 }