feat(oa): 优化提醒逻辑
- 添加当前时间变量以统一时间基准 - 兼容旧字段 type 映射 - 区分逾期和未到期状态,分别格式化时间字符串 - 新增 remainTimeStr 字段用于展示格式化后的时间 - 改进时间差计算方式,提高准确性
This commit is contained in:
@@ -108,5 +108,8 @@ public class SysOaRemindVo {
|
|||||||
/** 结束时间 */
|
/** 结束时间 */
|
||||||
private Date endTime;
|
private Date endTime;
|
||||||
|
|
||||||
|
//剩余时间
|
||||||
|
private String remainTimeStr;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -191,6 +191,7 @@ public class SysOaRemindServiceImpl implements ISysOaRemindService {
|
|||||||
|
|
||||||
// 按 (remind_type, detail_id) 去重:由于已按 create_time 倒序,只保留第一次出现(最新)
|
// 按 (remind_type, detail_id) 去重:由于已按 create_time 倒序,只保留第一次出现(最新)
|
||||||
Map<String, SysOaRemindVo> latestMap = new LinkedHashMap<>();
|
Map<String, SysOaRemindVo> latestMap = new LinkedHashMap<>();
|
||||||
|
Date now = new Date(); // 添加当前时间变量
|
||||||
for (SysOaRemind remind : remindList) {
|
for (SysOaRemind remind : remindList) {
|
||||||
String key = (remind.getRemindType() == null ? "" : remind.getRemindType()) + "_" + (remind.getDetailId() == null ? "" : remind.getDetailId());
|
String key = (remind.getRemindType() == null ? "" : remind.getRemindType()) + "_" + (remind.getDetailId() == null ? "" : remind.getDetailId());
|
||||||
if (latestMap.containsKey(key)) {
|
if (latestMap.containsKey(key)) {
|
||||||
@@ -212,21 +213,34 @@ public class SysOaRemindServiceImpl implements ISysOaRemindService {
|
|||||||
vo.setDetailId(remind.getDetailId());
|
vo.setDetailId(remind.getDetailId());
|
||||||
vo.setTargetUserId(remind.getTargetUserId());
|
vo.setTargetUserId(remind.getTargetUserId());
|
||||||
vo.setEndTime(remind.getEndTime());
|
vo.setEndTime(remind.getEndTime());
|
||||||
// 计算剩余秒数和格式化字符串
|
vo.setType(remind.getRemindType()); // 兼容旧字段
|
||||||
|
|
||||||
|
// 计算剩余时间或逾期时间
|
||||||
if (remind.getEndTime() != null) {
|
if (remind.getEndTime() != null) {
|
||||||
long diffMillis = remind.getEndTime().getTime() - System.currentTimeMillis();
|
long diffMillis = remind.getEndTime().getTime() - now.getTime();
|
||||||
long remainSeconds = diffMillis / 1000;
|
long diffSeconds = diffMillis / 1000;
|
||||||
vo.setRemainTime(remainSeconds);
|
vo.setRemainTime(diffSeconds);
|
||||||
long days = remainSeconds / (60 * 60 * 24);
|
|
||||||
long hours = (remainSeconds / (60 * 60)) % 24;
|
// 格式化时间字符串
|
||||||
long minutes = (remainSeconds / 60) % 60;
|
long absDays = Math.abs(diffSeconds) / (60 * 60 * 24);
|
||||||
long seconds = remainSeconds % 60;
|
long absHours = (Math.abs(diffSeconds) / (60 * 60)) % 24;
|
||||||
|
long absMinutes = (Math.abs(diffSeconds) / 60) % 60;
|
||||||
|
|
||||||
StringBuilder sb = new StringBuilder();
|
StringBuilder sb = new StringBuilder();
|
||||||
if (days > 0) sb.append(days).append("天");
|
if (diffSeconds < 0) {
|
||||||
if (hours > 0 || days > 0) sb.append(hours).append("小时");
|
// 已逾期
|
||||||
if (minutes > 0 || hours > 0 || days > 0) sb.append(minutes).append("分");
|
sb.append("逾期 ");
|
||||||
sb.append(seconds).append("秒");
|
if (absDays > 0) sb.append(absDays).append("天");
|
||||||
vo.setRemark(sb.toString());
|
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);
|
latestMap.put(key, vo);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user