From 9099e55367342132435642986a808ef8d0dbc5d7 Mon Sep 17 00:00:00 2001 From: Joshi <3040996759@qq.com> Date: Thu, 20 Nov 2025 14:17:33 +0800 Subject: [PATCH] =?UTF-8?q?feat(oa):=20=E4=BC=98=E5=8C=96=E6=8F=90?= =?UTF-8?q?=E9=86=92=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加当前时间变量以统一时间基准 - 兼容旧字段 type 映射 - 区分逾期和未到期状态,分别格式化时间字符串 - 新增 remainTimeStr 字段用于展示格式化后的时间 - 改进时间差计算方式,提高准确性 --- .../com/ruoyi/oa/domain/vo/SysOaRemindVo.java | 3 ++ .../service/impl/SysOaRemindServiceImpl.java | 40 +++++++++++++------ 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaRemindVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaRemindVo.java index eeb3b19..d7c49d4 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaRemindVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaRemindVo.java @@ -108,5 +108,8 @@ public class SysOaRemindVo { /** 结束时间 */ private Date endTime; + //剩余时间 + private String remainTimeStr; + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaRemindServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaRemindServiceImpl.java index f1835e2..16b4073 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaRemindServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaRemindServiceImpl.java @@ -191,6 +191,7 @@ public class SysOaRemindServiceImpl implements ISysOaRemindService { // 按 (remind_type, detail_id) 去重:由于已按 create_time 倒序,只保留第一次出现(最新) Map latestMap = new LinkedHashMap<>(); + Date now = new Date(); // 添加当前时间变量 for (SysOaRemind remind : remindList) { String key = (remind.getRemindType() == null ? "" : remind.getRemindType()) + "_" + (remind.getDetailId() == null ? "" : remind.getDetailId()); if (latestMap.containsKey(key)) { @@ -212,21 +213,34 @@ public class SysOaRemindServiceImpl implements ISysOaRemindService { vo.setDetailId(remind.getDetailId()); vo.setTargetUserId(remind.getTargetUserId()); vo.setEndTime(remind.getEndTime()); - // 计算剩余秒数和格式化字符串 + vo.setType(remind.getRemindType()); // 兼容旧字段 + + // 计算剩余时间或逾期时间 if (remind.getEndTime() != null) { - long diffMillis = remind.getEndTime().getTime() - System.currentTimeMillis(); - long remainSeconds = diffMillis / 1000; - vo.setRemainTime(remainSeconds); - long days = remainSeconds / (60 * 60 * 24); - long hours = (remainSeconds / (60 * 60)) % 24; - long minutes = (remainSeconds / 60) % 60; - long seconds = remainSeconds % 60; + long diffMillis = remind.getEndTime().getTime() - now.getTime(); + long diffSeconds = diffMillis / 1000; + vo.setRemainTime(diffSeconds); + + // 格式化时间字符串 + long absDays = Math.abs(diffSeconds) / (60 * 60 * 24); + long absHours = (Math.abs(diffSeconds) / (60 * 60)) % 24; + long absMinutes = (Math.abs(diffSeconds) / 60) % 60; + StringBuilder sb = new StringBuilder(); - if (days > 0) sb.append(days).append("天"); - if (hours > 0 || days > 0) sb.append(hours).append("小时"); - if (minutes > 0 || hours > 0 || days > 0) sb.append(minutes).append("分"); - sb.append(seconds).append("秒"); - vo.setRemark(sb.toString()); + if (diffSeconds < 0) { + // 已逾期 + sb.append("逾期 "); + if (absDays > 0) sb.append(absDays).append("天"); + if (absHours > 0) sb.append(absHours).append("小时"); + if (absMinutes > 0) sb.append(absMinutes).append("分钟"); + } else { + // 未到期 + sb.append("剩余 "); + if (absDays > 0) sb.append(absDays).append("天"); + if (absHours > 0) sb.append(absHours).append("小时"); + if (absMinutes > 0) sb.append(absMinutes).append("分钟"); + } + vo.setRemainTimeStr(sb.toString()); } latestMap.put(key, vo); }