diff --git a/continew-admin-common/src/main/java/top/continew/admin/common/constant/ContainerConstants.java b/continew-admin-common/src/main/java/top/continew/admin/common/constant/ContainerConstants.java index d67070bd..179159a1 100644 --- a/continew-admin-common/src/main/java/top/continew/admin/common/constant/ContainerConstants.java +++ b/continew-admin-common/src/main/java/top/continew/admin/common/constant/ContainerConstants.java @@ -41,6 +41,11 @@ public class ContainerConstants extends ContainerPool { */ public static final String ROLE_DEPT_ID_LIST = "RoleDeptIdList"; + /** + * 在线用户最后活跃时间 + */ + public static final String ONLINE_USER_LAST_ACTIVE_TIME = "OnlineUserLastActiveTime"; + private ContainerConstants() { } } \ No newline at end of file diff --git a/continew-admin-system/src/main/java/top/continew/admin/auth/model/resp/OnlineUserResp.java b/continew-admin-system/src/main/java/top/continew/admin/auth/model/resp/OnlineUserResp.java index 9e138092..2afb6e69 100644 --- a/continew-admin-system/src/main/java/top/continew/admin/auth/model/resp/OnlineUserResp.java +++ b/continew-admin-system/src/main/java/top/continew/admin/auth/model/resp/OnlineUserResp.java @@ -20,7 +20,7 @@ import cn.crane4j.annotation.Assemble; import cn.crane4j.annotation.Mapping; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; -import top.continew.starter.extension.crud.constant.ContainerPool; +import top.continew.admin.common.constant.ContainerConstants; import java.io.Serial; import java.io.Serializable; @@ -43,13 +43,14 @@ public class OnlineUserResp implements Serializable { * ID */ @Schema(description = "ID", example = "1") - @Assemble(container = ContainerPool.USER_NICKNAME, props = @Mapping(ref = "nickname")) + @Assemble(container = ContainerConstants.USER_NICKNAME, props = @Mapping(ref = "nickname")) private Long id; /** * 令牌 */ @Schema(description = "令牌", example = "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpblR5cGUiOiJsb2dpbiIsImxvZ2luSWQiOjEsInJuU3RyIjoiTUd6djdyOVFoeHEwdVFqdFAzV3M5YjVJRzh4YjZPSEUifQ.7q7U3ouoN7WPhH2kUEM7vPe5KF3G_qavSG-vRgIxKvE") + @Assemble(container = ContainerConstants.ONLINE_USER_LAST_ACTIVE_TIME, props = @Mapping(ref = "lastActiveTime")) private String token; /** diff --git a/continew-admin-system/src/main/java/top/continew/admin/auth/service/OnlineUserService.java b/continew-admin-system/src/main/java/top/continew/admin/auth/service/OnlineUserService.java index e0cbf2e6..5558b297 100644 --- a/continew-admin-system/src/main/java/top/continew/admin/auth/service/OnlineUserService.java +++ b/continew-admin-system/src/main/java/top/continew/admin/auth/service/OnlineUserService.java @@ -22,6 +22,7 @@ import top.continew.admin.common.model.dto.LoginUser; import top.continew.starter.extension.crud.model.query.PageQuery; import top.continew.starter.extension.crud.model.resp.PageResp; +import java.time.LocalDateTime; import java.util.List; /** @@ -49,6 +50,14 @@ public interface OnlineUserService { */ List list(OnlineUserQuery query); + /** + * 查询 Token 最后活跃时间 + * + * @param token Token + * @return 最后活跃时间 + */ + LocalDateTime getLastActiveTime(String token); + /** * 根据角色 ID 清除 * diff --git a/continew-admin-system/src/main/java/top/continew/admin/auth/service/impl/OnlineUserServiceImpl.java b/continew-admin-system/src/main/java/top/continew/admin/auth/service/impl/OnlineUserServiceImpl.java index e14b2f16..bf66d6c8 100644 --- a/continew-admin-system/src/main/java/top/continew/admin/auth/service/impl/OnlineUserServiceImpl.java +++ b/continew-admin-system/src/main/java/top/continew/admin/auth/service/impl/OnlineUserServiceImpl.java @@ -17,6 +17,8 @@ package top.continew.admin.auth.service.impl; import cn.crane4j.annotation.AutoOperate; +import cn.crane4j.annotation.ContainerMethod; +import cn.crane4j.annotation.MappingType; import cn.dev33.satoken.dao.SaTokenDao; import cn.dev33.satoken.exception.NotLoginException; import cn.dev33.satoken.stp.StpUtil; @@ -28,12 +30,14 @@ import org.springframework.stereotype.Service; import top.continew.admin.auth.model.query.OnlineUserQuery; import top.continew.admin.auth.model.resp.OnlineUserResp; import top.continew.admin.auth.service.OnlineUserService; +import top.continew.admin.common.constant.ContainerConstants; import top.continew.admin.common.model.dto.LoginUser; import top.continew.admin.common.util.helper.LoginHelper; import top.continew.starter.core.constant.StringConstants; import top.continew.starter.extension.crud.model.query.PageQuery; import top.continew.starter.extension.crud.model.resp.PageResp; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Comparator; import java.util.Date; @@ -54,14 +58,7 @@ public class OnlineUserServiceImpl implements OnlineUserService { public PageResp page(OnlineUserQuery query, PageQuery pageQuery) { List loginUserList = this.list(query); List list = BeanUtil.copyToList(loginUserList, OnlineUserResp.class); - PageResp pageResp = PageResp.build(pageQuery.getPage(), pageQuery.getSize(), list); - pageResp.getList().forEach(u -> { - long lastActiveTime = StpUtil.getStpLogic().getTokenLastActiveTime(u.getToken()); - if (SaTokenDao.NOT_VALUE_EXPIRE != lastActiveTime) { - u.setLastActiveTime(DateUtil.toLocalDateTime(new Date(lastActiveTime))); - } - }); - return pageResp; + return PageResp.build(pageQuery.getPage(), pageQuery.getSize(), list); } @Override @@ -86,6 +83,13 @@ public class OnlineUserServiceImpl implements OnlineUserService { return loginUserList; } + @Override + @ContainerMethod(namespace = ContainerConstants.ONLINE_USER_LAST_ACTIVE_TIME, type = MappingType.ORDER_OF_KEYS) + public LocalDateTime getLastActiveTime(String token) { + long lastActiveTime = StpUtil.getStpLogic().getTokenLastActiveTime(token); + return lastActiveTime == SaTokenDao.NOT_VALUE_EXPIRE ? null : DateUtil.date(lastActiveTime).toLocalDateTime(); + } + @Override public void cleanByRoleId(Long roleId) { List loginUserList = this.list(new OnlineUserQuery());