mirror of https://gitee.com/stylefeng/roses
parent
d6924fc276
commit
3d23ce9573
|
@ -46,4 +46,22 @@ public enum SexEnum {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 编码转化成中文含义
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2021/1/11 22:34
|
||||
*/
|
||||
public static String codeToMessage(String code) {
|
||||
if (null != code) {
|
||||
for (SexEnum e : SexEnum.values()) {
|
||||
if (e.getCode().equals(code)) {
|
||||
return e.getMessage();
|
||||
}
|
||||
}
|
||||
}
|
||||
return "未知";
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ import cn.stylefeng.roses.kernel.auth.api.pojo.login.basic.SimpleUserInfo;
|
|||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
|
@ -73,6 +74,16 @@ public class LoginUser implements Serializable {
|
|||
*/
|
||||
private Set<String> buttonCodes;
|
||||
|
||||
/**
|
||||
* 登录的时间
|
||||
*/
|
||||
private Date loginTime;
|
||||
|
||||
/**
|
||||
* 用户的token,当返回用户会话信息时候回带token
|
||||
*/
|
||||
private String token;
|
||||
|
||||
/**
|
||||
* 其他信息,Dict为Map的拓展
|
||||
*/
|
||||
|
|
|
@ -10,10 +10,7 @@ import cn.stylefeng.roses.kernel.rule.util.HttpServletUtil;
|
|||
|
||||
import javax.servlet.http.Cookie;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 基于redis的会话管理
|
||||
|
@ -182,7 +179,17 @@ public class DefaultSessionManager implements SessionManagerApi {
|
|||
|
||||
@Override
|
||||
public List<LoginUser> onlineUserList() {
|
||||
return new ArrayList<>(loginUserCache.getAllValues());
|
||||
Map<String, LoginUser> allKeyValues = loginUserCache.getAllKeyValues();
|
||||
|
||||
ArrayList<LoginUser> loginUsers = new ArrayList<>();
|
||||
for (Map.Entry<String, LoginUser> userEntry : allKeyValues.entrySet()) {
|
||||
String token = userEntry.getKey();
|
||||
LoginUser loginUser = userEntry.getValue();
|
||||
loginUser.setToken(token);
|
||||
loginUsers.add(loginUser);
|
||||
}
|
||||
|
||||
return loginUsers;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
package cn.stylefeng.roses.kernel.system;
|
||||
|
||||
import cn.stylefeng.roses.kernel.system.pojo.user.OnlineUserResponse;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.user.SysUserDTO;
|
||||
import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.user.SysUserResponse;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.user.UserLoginInfoDTO;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.user.request.OnlineUserRequest;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.user.request.SysUserRequest;
|
||||
|
||||
import java.util.Date;
|
||||
|
@ -83,7 +84,7 @@ public interface UserServiceApi {
|
|||
* @author fengshuonan
|
||||
* @date 2021/1/10 9:56
|
||||
*/
|
||||
List<LoginUser> onlineUserList();
|
||||
List<OnlineUserResponse> onlineUserList(OnlineUserRequest onlineUserRequest);
|
||||
|
||||
/**
|
||||
* 根据用户ID获取用户信息
|
||||
|
@ -104,8 +105,6 @@ public interface UserServiceApi {
|
|||
*/
|
||||
List<Long> queryAllUserIdList(SysUserRequest sysUserRequest);
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 获取用户信息
|
||||
*
|
||||
|
|
|
@ -0,0 +1,57 @@
|
|||
package cn.stylefeng.roses.kernel.system.pojo.user;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
/**
|
||||
* 当前的在线用户的信息封装
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2021/1/11 22:30
|
||||
*/
|
||||
@Data
|
||||
public class OnlineUserResponse {
|
||||
|
||||
/**
|
||||
* 用户的token
|
||||
*/
|
||||
private String token;
|
||||
|
||||
/**
|
||||
* 主键
|
||||
*/
|
||||
private Long userId;
|
||||
|
||||
/**
|
||||
* 账号
|
||||
*/
|
||||
private String account;
|
||||
|
||||
/**
|
||||
* 昵称
|
||||
*/
|
||||
private String nickName;
|
||||
|
||||
/**
|
||||
* 姓名
|
||||
*/
|
||||
private String realName;
|
||||
|
||||
/**
|
||||
* 性别
|
||||
*/
|
||||
private String sex;
|
||||
|
||||
/**
|
||||
* 角色名称
|
||||
*/
|
||||
private String roleName;
|
||||
|
||||
/**
|
||||
* 登录的时间
|
||||
*/
|
||||
private Date loginTime;
|
||||
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
package cn.stylefeng.roses.kernel.system.pojo.user.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
|
||||
/**
|
||||
* 当前的在线用户的信息请求
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2021/1/11 22:30
|
||||
*/
|
||||
@Data
|
||||
public class OnlineUserRequest {
|
||||
|
||||
/**
|
||||
* 用户的token
|
||||
*/
|
||||
@NotBlank(message = "参数token不能为空")
|
||||
private String token;
|
||||
|
||||
/**
|
||||
* 用户账号
|
||||
*/
|
||||
private String account;
|
||||
|
||||
}
|
|
@ -0,0 +1,56 @@
|
|||
package cn.stylefeng.roses.kernel.system.modular.user.controller;
|
||||
|
||||
import cn.stylefeng.roses.kernel.auth.api.SessionManagerApi;
|
||||
import cn.stylefeng.roses.kernel.resource.api.annotation.ApiResource;
|
||||
import cn.stylefeng.roses.kernel.resource.api.annotation.GetResource;
|
||||
import cn.stylefeng.roses.kernel.resource.api.annotation.PostResource;
|
||||
import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData;
|
||||
import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData;
|
||||
import cn.stylefeng.roses.kernel.system.modular.user.service.SysUserService;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.user.request.OnlineUserRequest;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.Valid;
|
||||
|
||||
/**
|
||||
* 在线用户管理
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2021/1/11 22:52
|
||||
*/
|
||||
@RestController
|
||||
@ApiResource(name = "在线用户管理")
|
||||
public class OnlineUserController {
|
||||
|
||||
@Resource
|
||||
private SysUserService sysUserService;
|
||||
|
||||
@Resource
|
||||
private SessionManagerApi sessionManagerApi;
|
||||
|
||||
/**
|
||||
* 当前在线用户列表
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2021/1/11 22:53
|
||||
*/
|
||||
@GetResource(name = "当前在线用户列表", path = "/sysUser/onlineUserList")
|
||||
public ResponseData onlineUserList(OnlineUserRequest onlineUserRequest) {
|
||||
return new SuccessResponseData(sysUserService.onlineUserList(onlineUserRequest));
|
||||
}
|
||||
|
||||
/**
|
||||
* 踢掉在线用户
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2021/1/11 22:53
|
||||
*/
|
||||
@PostResource(name = "踢掉在线用户", path = "/sysUser/removeSession")
|
||||
public ResponseData removeSession(@Valid @RequestBody OnlineUserRequest onlineUserRequest) {
|
||||
sessionManagerApi.removeSession(onlineUserRequest.getToken());
|
||||
return new SuccessResponseData();
|
||||
}
|
||||
|
||||
}
|
|
@ -8,9 +8,9 @@ import cn.stylefeng.roses.kernel.resource.api.annotation.PostResource;
|
|||
import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest;
|
||||
import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData;
|
||||
import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.user.request.SysUserRequest;
|
||||
import cn.stylefeng.roses.kernel.system.modular.user.service.SysUserRoleService;
|
||||
import cn.stylefeng.roses.kernel.system.modular.user.service.SysUserService;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.user.request.SysUserRequest;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
@ -240,15 +240,4 @@ public class SysUserController {
|
|||
return new SuccessResponseData(sysUserService.detail(sysUserRequest));
|
||||
}
|
||||
|
||||
/**
|
||||
* 当前在线用户列表
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2021/1/1 19:01
|
||||
*/
|
||||
@GetResource(name = "当前在线用户列表", path = "/sysUser/onlineUserList", requiredPermission = false)
|
||||
public ResponseData onlineUserList() {
|
||||
return new SuccessResponseData(sysUserService.onlineUserList());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
package cn.stylefeng.roses.kernel.system.modular.user.factory;
|
||||
|
||||
import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser;
|
||||
import cn.stylefeng.roses.kernel.rule.enums.SexEnum;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.user.OnlineUserResponse;
|
||||
|
||||
/**
|
||||
* 当前在线用户的创建工厂
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2021/1/11 22:31
|
||||
*/
|
||||
public class OnlineUserCreateFactory {
|
||||
|
||||
/**
|
||||
* 登录用户转化为在线用户
|
||||
*
|
||||
* @author fengshuonan
|
||||
* @date 2021/1/11 22:31
|
||||
*/
|
||||
public static OnlineUserResponse createOnlineUser(LoginUser loginUser) {
|
||||
|
||||
OnlineUserResponse onlineUserResponse = new OnlineUserResponse();
|
||||
|
||||
onlineUserResponse.setUserId(loginUser.getUserId());
|
||||
onlineUserResponse.setAccount(loginUser.getAccount());
|
||||
onlineUserResponse.setSex(SexEnum.codeToMessage(loginUser.getSimpleUserInfo().getSex()));
|
||||
onlineUserResponse.setRealName(loginUser.getSimpleUserInfo().getRealName());
|
||||
onlineUserResponse.setNickName(loginUser.getSimpleUserInfo().getNickName());
|
||||
|
||||
if (loginUser.getSimpleRoleInfoList() != null && loginUser.getSimpleRoleInfoList().size() > 0) {
|
||||
onlineUserResponse.setRoleName(loginUser.getSimpleRoleInfoList().get(0).getRoleName());
|
||||
}
|
||||
|
||||
onlineUserResponse.setLoginTime(loginUser.getLoginTime());
|
||||
onlineUserResponse.setToken(loginUser.getToken());
|
||||
|
||||
return onlineUserResponse;
|
||||
}
|
||||
|
||||
}
|
|
@ -13,10 +13,7 @@ import cn.stylefeng.roses.kernel.system.pojo.role.response.SysRoleResponse;
|
|||
import cn.stylefeng.roses.kernel.system.pojo.user.SysUserOrgResponse;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.user.UserLoginInfoDTO;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 组装当前登录用户的信息
|
||||
|
@ -34,7 +31,7 @@ public class UserLoginInfoFactory {
|
|||
* @param dataScopeResponse 数据范围信息
|
||||
* @param userOrgInfo 组织机构信息
|
||||
* @param resourceUrlsListByCodes 用户的所有资源url
|
||||
* @param roleButtonCodes
|
||||
* @param roleButtonCodes 用户的所拥有的按钮编码
|
||||
* @author fengshuonan
|
||||
* @date 2020/12/26 17:53
|
||||
*/
|
||||
|
@ -102,6 +99,9 @@ public class UserLoginInfoFactory {
|
|||
// 填充用户拥有的按钮编码
|
||||
loginUser.setButtonCodes(roleButtonCodes);
|
||||
|
||||
// 设置用户的登录时间
|
||||
loginUser.setLoginTime(new Date());
|
||||
|
||||
// 响应dto
|
||||
userLoginInfoDTO.setLoginUser(loginUser);
|
||||
return userLoginInfoDTO;
|
||||
|
|
|
@ -2,6 +2,7 @@ package cn.stylefeng.roses.kernel.system.modular.user.service.impl;
|
|||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import cn.stylefeng.roses.kernel.auth.api.SessionManagerApi;
|
||||
import cn.stylefeng.roses.kernel.auth.api.context.LoginContext;
|
||||
import cn.stylefeng.roses.kernel.auth.api.expander.AuthConfigExpander;
|
||||
|
@ -25,11 +26,10 @@ import cn.stylefeng.roses.kernel.system.exception.enums.SysUserExceptionEnum;
|
|||
import cn.stylefeng.roses.kernel.system.modular.user.entity.SysUser;
|
||||
import cn.stylefeng.roses.kernel.system.modular.user.entity.SysUserDataScope;
|
||||
import cn.stylefeng.roses.kernel.system.modular.user.entity.SysUserRole;
|
||||
import cn.stylefeng.roses.kernel.system.modular.user.factory.OnlineUserCreateFactory;
|
||||
import cn.stylefeng.roses.kernel.system.modular.user.factory.SysUserCreateFactory;
|
||||
import cn.stylefeng.roses.kernel.system.modular.user.factory.UserLoginInfoFactory;
|
||||
import cn.stylefeng.roses.kernel.system.modular.user.mapper.SysUserMapper;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.user.SysUserDTO;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.user.request.SysUserRequest;
|
||||
import cn.stylefeng.roses.kernel.system.modular.user.pojo.response.SysUserResponse;
|
||||
import cn.stylefeng.roses.kernel.system.modular.user.service.SysUserDataScopeService;
|
||||
import cn.stylefeng.roses.kernel.system.modular.user.service.SysUserOrgService;
|
||||
|
@ -37,8 +37,12 @@ import cn.stylefeng.roses.kernel.system.modular.user.service.SysUserRoleService;
|
|||
import cn.stylefeng.roses.kernel.system.modular.user.service.SysUserService;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.organization.DataScopeResponse;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.role.response.SysRoleResponse;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.user.OnlineUserResponse;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.user.SysUserDTO;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.user.SysUserOrgResponse;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.user.UserLoginInfoDTO;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.user.request.OnlineUserRequest;
|
||||
import cn.stylefeng.roses.kernel.system.pojo.user.request.SysUserRequest;
|
||||
import cn.stylefeng.roses.kernel.system.util.DataScopeUtil;
|
||||
import com.alibaba.excel.support.ExcelTypeEnum;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
|
@ -473,8 +477,18 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
|
|||
}
|
||||
|
||||
@Override
|
||||
public List<LoginUser> onlineUserList() {
|
||||
return sessionManagerApi.onlineUserList();
|
||||
public List<OnlineUserResponse> onlineUserList(OnlineUserRequest onlineUserRequest) {
|
||||
List<LoginUser> loginUsers = sessionManagerApi.onlineUserList();
|
||||
|
||||
// 对象转化
|
||||
List<OnlineUserResponse> result = loginUsers.stream().map(OnlineUserCreateFactory::createOnlineUser).collect(Collectors.toList());
|
||||
|
||||
// 如果带了条件则根据account筛选结果
|
||||
if (StrUtil.isNotBlank(onlineUserRequest.getAccount())) {
|
||||
return result.stream().filter(i -> i.getAccount().equals(onlineUserRequest.getAccount())).collect(Collectors.toList());
|
||||
} else {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
Loading…
Reference in New Issue