diff --git a/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/enums/SexEnum.java b/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/enums/SexEnum.java index dcd2865a2..1d619319e 100644 --- a/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/enums/SexEnum.java +++ b/kernel-a-rule/src/main/java/cn/stylefeng/roses/kernel/rule/enums/SexEnum.java @@ -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 "未知"; + } + } diff --git a/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/pojo/login/LoginUser.java b/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/pojo/login/LoginUser.java index cd7777c9e..8f176d6f6 100644 --- a/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/pojo/login/LoginUser.java +++ b/kernel-d-auth/auth-api/src/main/java/cn/stylefeng/roses/kernel/auth/api/pojo/login/LoginUser.java @@ -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 buttonCodes; + /** + * 登录的时间 + */ + private Date loginTime; + + /** + * 用户的token,当返回用户会话信息时候回带token + */ + private String token; + /** * 其他信息,Dict为Map的拓展 */ diff --git a/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/session/DefaultSessionManager.java b/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/session/DefaultSessionManager.java index 1ffe31794..8d69bcec7 100644 --- a/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/session/DefaultSessionManager.java +++ b/kernel-d-auth/auth-sdk/src/main/java/cn/stylefeng/roses/kernel/auth/session/DefaultSessionManager.java @@ -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 onlineUserList() { - return new ArrayList<>(loginUserCache.getAllValues()); + Map allKeyValues = loginUserCache.getAllKeyValues(); + + ArrayList loginUsers = new ArrayList<>(); + for (Map.Entry userEntry : allKeyValues.entrySet()) { + String token = userEntry.getKey(); + LoginUser loginUser = userEntry.getValue(); + loginUser.setToken(token); + loginUsers.add(loginUser); + } + + return loginUsers; } } diff --git a/kernel-s-system/_sql/system.sql b/kernel-s-system/_sql/system.sql index 4be6faf9d..999a390e2 100644 --- a/kernel-s-system/_sql/system.sql +++ b/kernel-s-system/_sql/system.sql @@ -41,9 +41,9 @@ CREATE TABLE `hr_organization` ( -- ---------------------------- -- Records of hr_organization -- ---------------------------- -INSERT INTO `hr_organization` VALUES (1339554696976781407, 0, '[0],', 'Guns总公司', 'guns_level_one', 1.00, 1, NULL, 'N', NULL, NULL, NULL, NULL); -INSERT INTO `hr_organization` VALUES (1339554696976781408, 1339554696976781407, '[0],[1339554696976781407],', '北京分公司', 'guns_beijing', 2.00, 1, NULL, 'N', NULL, NULL, NULL, NULL); -INSERT INTO `hr_organization` VALUES (1339554696976781409, 1339554696976781408, '[0],[1339554696976781407],[1339554696976781408],', '北京东直门分公司', 'guns_beijing_dongzhimen', 3.00, 1, NULL, 'N', NULL, NULL, NULL, NULL); +INSERT INTO `hr_organization` VALUES (1339554696976781407, -1, '[-1],', 'Guns总公司', 'guns_level_one', 1.00, 1, NULL, 'N', NULL, NULL, NULL, NULL); +INSERT INTO `hr_organization` VALUES (1339554696976781408, 1339554696976781407, '[-1],[1339554696976781407],', '北京分公司', 'guns_beijing', 2.00, 1, NULL, 'N', NULL, NULL, NULL, NULL); +INSERT INTO `hr_organization` VALUES (1339554696976781409, 1339554696976781408, '[-1],[1339554696976781407],[1339554696976781408],', '北京东直门分公司', 'guns_beijing_dongzhimen', 3.00, 1, NULL, 'N', NULL, NULL, NULL, NULL); -- ---------------------------- -- Table structure for hr_position @@ -335,7 +335,7 @@ INSERT INTO `sys_menu` VALUES (1339550467939639316, 1339550467939639313, '[-1],[ INSERT INTO `sys_menu` VALUES (1339550467939639317, -1, '[-1],', '系统功能', 'sys', 'system', 'Y', 50.00, 1, NULL, '', 'layui-icon-set', 'system', 'thunderbolt', NULL, NULL, NULL, 'N', '2020-12-29 19:51:14', NULL, '2021-01-08 16:47:49', 1339550467939639299); INSERT INTO `sys_menu` VALUES (1339550467939639318, 1339550467939639317, '[-1],[1339550467939639317],', '文件管理', 'sys_file', 'system', 'Y', 50.10, 1, NULL, '/view/file', NULL, 'file', 'tags', NULL, NULL, NULL, 'N', '2020-12-29 19:51:14', NULL, NULL, NULL); INSERT INTO `sys_menu` VALUES (1339550467939639319, 1339550467939639317, '[-1],[1339550467939639317],', '操作日志', 'operate_log', 'system', 'Y', 50.20, 1, NULL, '/view/log', NULL, 'logs', 'global', NULL, NULL, NULL, 'N', '2020-12-29 19:51:14', NULL, NULL, NULL); -INSERT INTO `sys_menu` VALUES (1339550467939639320, 1339550467939639317, '[-1],[1339550467939639317],', '在线用户', 'sys_online', 'system', 'Y', 50.30, 1, NULL, '/view/onlieUser', NULL, 'online', 'laptop', NULL, NULL, NULL, 'N', '2020-12-29 19:51:14', NULL, NULL, NULL); +INSERT INTO `sys_menu` VALUES (1339550467939639320, 1339550467939639317, '[-1],[1339550467939639317],', '在线用户', 'sys_online', 'system', 'Y', 50.30, 1, NULL, '/view/onlineUser', NULL, 'online', 'laptop', NULL, NULL, NULL, 'N', '2020-12-29 19:51:14', NULL, NULL, NULL); INSERT INTO `sys_menu` VALUES (1339550467939639321, 1339550467939639317, '[-1],[1339550467939639317],', '定时任务', 'sys_timer', 'system', 'Y', 50.40, 1, NULL, '/view/sysTimers', NULL, 'timer', 'inbox', NULL, NULL, NULL, 'N', '2020-12-29 19:51:14', NULL, NULL, NULL); INSERT INTO `sys_menu` VALUES (1339550467939639322, -1, '[-1],', '通知管理', 'notice', 'system', 'Y', 60.00, 1, NULL, '', 'layui-icon-tips', 'notice', 'bell', NULL, NULL, NULL, 'N', '2020-12-29 19:51:14', NULL, '2021-01-08 16:47:56', 1339550467939639299); INSERT INTO `sys_menu` VALUES (1339550467939639323, 1339550467939639322, '[-1],[1339550467939639322],', '通知发布', 'notice_update', 'system', 'Y', 60.10, 1, NULL, '/view/notice', NULL, 'noticePublish', 'cloud', NULL, NULL, NULL, 'N', '2020-12-29 19:51:14', NULL, NULL, NULL); diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/UserServiceApi.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/UserServiceApi.java index 09a488780..491a93c91 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/UserServiceApi.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/UserServiceApi.java @@ -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 onlineUserList(); + List onlineUserList(OnlineUserRequest onlineUserRequest); /** * 根据用户ID获取用户信息 @@ -104,8 +105,6 @@ public interface UserServiceApi { */ List queryAllUserIdList(SysUserRequest sysUserRequest); - - /** * 获取用户信息 * diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/menu/layui/LayuiMenuAndButtonTreeResponse.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/menu/layui/LayuiMenuAndButtonTreeResponse.java index ecb0c1ee4..3b77a4e95 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/menu/layui/LayuiMenuAndButtonTreeResponse.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/menu/layui/LayuiMenuAndButtonTreeResponse.java @@ -1,7 +1,10 @@ package cn.stylefeng.roses.kernel.system.pojo.menu.layui; +import cn.stylefeng.roses.kernel.rule.abstracts.AbstractTreeNode; import lombok.Data; +import java.util.List; + /** * 角色分配资源和菜单的树 * @@ -9,7 +12,7 @@ import lombok.Data; * @date 2021/1/9 16:59 */ @Data -public class LayuiMenuAndButtonTreeResponse { +public class LayuiMenuAndButtonTreeResponse implements AbstractTreeNode { /** * 节点ID @@ -41,4 +44,23 @@ public class LayuiMenuAndButtonTreeResponse { */ private String buttonCode; + /** + * 子节点集合 + */ + private List children; + + @Override + public String getNodeId() { + return this.id.toString(); + } + + @Override + public String getNodeParentId() { + return this.pid.toString(); + } + + @Override + public void setChildrenNodes(List childrenNodes) { + this.children = childrenNodes; + } } diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/user/OnlineUserResponse.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/user/OnlineUserResponse.java new file mode 100644 index 000000000..2f4786bd1 --- /dev/null +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/user/OnlineUserResponse.java @@ -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; + +} diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/user/request/OnlineUserRequest.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/user/request/OnlineUserRequest.java new file mode 100644 index 000000000..a470fe6e4 --- /dev/null +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/user/request/OnlineUserRequest.java @@ -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; + +} diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/ztree/ZTreeNode.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/ztree/ZTreeNode.java index b566d3383..28a0bbe87 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/ztree/ZTreeNode.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/pojo/ztree/ZTreeNode.java @@ -1,6 +1,13 @@ package cn.stylefeng.roses.kernel.system.pojo.ztree; +import cn.stylefeng.roses.kernel.rule.abstracts.AbstractTreeNode; import cn.stylefeng.roses.kernel.system.constants.SystemConstants; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.List; /** * jquery ztree 插件的节点封装 @@ -8,11 +15,15 @@ import cn.stylefeng.roses.kernel.system.constants.SystemConstants; * @author fengshuonan * @date 2021/1/6 21:47 */ -public class ZTreeNode { +@ToString +@EqualsAndHashCode +public class ZTreeNode implements AbstractTreeNode { /** * 节点id */ + @Getter + @Setter private Long id; /** @@ -23,23 +34,38 @@ public class ZTreeNode { /** * 节点名称 */ + @Getter + @Setter private String name; /** * 是否打开节点 */ + @Getter + @Setter private Boolean open; /** * 是否被选中 */ + @Getter + @Setter private Boolean checked; /** * 节点图标 single or group */ + @Getter + @Setter private String iconSkin; + /** + * 子节点集合 + */ + @Getter + @Setter + private List children; + /** * 创建ztree的父级节点 * @@ -56,51 +82,27 @@ public class ZTreeNode { return zTreeNode; } - public Long getId() { - return id; + + @Override + public String getNodeId() { + return id.toString(); } - public void setId(Long id) { - this.id = id; + @Override + public String getNodeParentId() { + return pId.toString(); } - public Long getpId() { - return pId; + @Override + public void setChildrenNodes(List childrenNodes) { + this.children = childrenNodes; } public void setpId(Long pId) { this.pId = pId; } - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Boolean getOpen() { - return open; - } - - public void setOpen(Boolean open) { - this.open = open; - } - - public Boolean getChecked() { - return checked; - } - - public void setChecked(Boolean checked) { - this.checked = checked; - } - - public String getIconSkin() { - return iconSkin; - } - - public void setIconSkin(String iconSkin) { - this.iconSkin = iconSkin; + public Long getpId() { + return pId; } } diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/controller/SysMenuController.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/controller/SysMenuController.java index d8dce9969..73416396e 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/controller/SysMenuController.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/controller/SysMenuController.java @@ -136,14 +136,26 @@ public class SysMenuController { } /** - * 获取系统菜单树(包含按钮),用于给角色授权时选择 + * 获取系统菜单平级树(包含按钮),用于给角色授权时选择(layui版本使用) * * @author majianguo * @date 2021/1/9 17:10 */ @GetResource(name = "获取系统菜单树(包含按钮),用于给角色授权时选择", path = "/sysMenu/menuAndButtonTree") public List menuAndButtonTree(SysRoleRequest sysRoleRequest) { - return sysMenuService.getMenuAndButtonTree(sysRoleRequest); + return sysMenuService.getMenuAndButtonTree(sysRoleRequest, true); + } + + /** + * 获取系统菜单树(包含按钮),用于给角色授权时选择(antd vue版本使用) + * + * @author majianguo + * @date 2021/1/9 17:10 + */ + @GetResource(name = "获取系统菜单树(包含按钮),用于给角色授权时选择", path = "/sysMenu/menuAndButtonTreeChildren") + public ResponseData menuAndButtonTreeChildren(SysRoleRequest sysRoleRequest) { + List treeResponseList = sysMenuService.getMenuAndButtonTree(sysRoleRequest, false); + return new SuccessResponseData(treeResponseList); } /** diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/SysMenuService.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/SysMenuService.java index 28d4aa7ad..2de5ec085 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/SysMenuService.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/SysMenuService.java @@ -176,8 +176,11 @@ public interface SysMenuService extends IService { /** * 获取包含按钮的系统菜单 * + * @param sysRoleRequest 请求参数 + * @param lateralFlag true-不带树形结构,false-返回带树形结构的 * @author majianguo * @date 2021/1/9 17:11 */ - List getMenuAndButtonTree(SysRoleRequest sysRoleRequest); + List getMenuAndButtonTree(SysRoleRequest sysRoleRequest, Boolean lateralFlag); + } diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/impl/SysMenuServiceImpl.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/impl/SysMenuServiceImpl.java index 3f17ac8cf..6393e87e6 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/impl/SysMenuServiceImpl.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/menu/modular/service/impl/SysMenuServiceImpl.java @@ -330,7 +330,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl } @Override - public List getMenuAndButtonTree(SysRoleRequest sysRoleRequest) { + public List getMenuAndButtonTree(SysRoleRequest sysRoleRequest, Boolean lateralFlag) { List menuTreeNodeList = CollectionUtil.newArrayList(); LambdaQueryWrapper munuWrapper = new LambdaQueryWrapper<>(); @@ -426,7 +426,12 @@ public class SysMenuServiceImpl extends ServiceImpl impl menuTreeNodeList.add(menuTree); } - return menuTreeNodeList; + // 返回结果 + if (lateralFlag) { + return menuTreeNodeList; + } else { + return new DefaultTreeBuildFactory().doTreeBuild(menuTreeNodeList); + } } @Override diff --git a/kernel-s-system/system-business-organization/src/main/java/cn/stylefeng/roses/kernel/system/modular/organization/controller/HrOrganizationController.java b/kernel-s-system/system-business-organization/src/main/java/cn/stylefeng/roses/kernel/system/modular/organization/controller/HrOrganizationController.java index 249b51900..d7aee2b23 100644 --- a/kernel-s-system/system-business-organization/src/main/java/cn/stylefeng/roses/kernel/system/modular/organization/controller/HrOrganizationController.java +++ b/kernel-s-system/system-business-organization/src/main/java/cn/stylefeng/roses/kernel/system/modular/organization/controller/HrOrganizationController.java @@ -139,7 +139,20 @@ public class HrOrganizationController { */ @GetResource(name = "获取zTree形式的组织机构树(用于角色配置数据范围类型,并且数据范围类型是指定组织机构时)(layui版本)", path = "/hrOrganization/zTree") public List layuiSelectParentMenuTreeList(@Validated(HrOrganizationRequest.orgZTree.class) HrOrganizationRequest hrOrganizationRequest) { - return hrOrganizationService.orgZTree(hrOrganizationRequest); + return hrOrganizationService.orgZTree(hrOrganizationRequest, false); } + /** + * 获取zTree形式的组织机构树(用于角色配置数据范围类型,并且数据范围类型是指定组织机构时)(antd vue版本) + * + * @author fengshuonan + * @date 2021/1/9 18:37 + */ + @GetResource(name = "获取zTree形式的组织机构树(用于角色配置数据范围类型,并且数据范围类型是指定组织机构时)(antd vue版本)", path = "/hrOrganization/treeWithChildren") + public ResponseData treeWithChildren(@Validated(HrOrganizationRequest.orgZTree.class) HrOrganizationRequest hrOrganizationRequest) { + List zTreeNodes = hrOrganizationService.orgZTree(hrOrganizationRequest, true); + return new SuccessResponseData(zTreeNodes); + } + + } diff --git a/kernel-s-system/system-business-organization/src/main/java/cn/stylefeng/roses/kernel/system/modular/organization/service/HrOrganizationService.java b/kernel-s-system/system-business-organization/src/main/java/cn/stylefeng/roses/kernel/system/modular/organization/service/HrOrganizationService.java index c07d9d92f..525f45dcd 100644 --- a/kernel-s-system/system-business-organization/src/main/java/cn/stylefeng/roses/kernel/system/modular/organization/service/HrOrganizationService.java +++ b/kernel-s-system/system-business-organization/src/main/java/cn/stylefeng/roses/kernel/system/modular/organization/service/HrOrganizationService.java @@ -119,10 +119,11 @@ public interface HrOrganizationService extends IService { * 获取ztree形式的组织机构树(用于角色配置数据范围类型,并且数据范围类型是指定组织机构时)(layui版本) * * @param hrOrganizationRequest 请求参数 + * @param buildTree 是否构建成树结构的节点,true-带树结构,false-不带 * @return ztree形式的组织机构树 * @author fengshuonan * @date 2021/1/9 18:40 */ - List orgZTree(HrOrganizationRequest hrOrganizationRequest); + List orgZTree(HrOrganizationRequest hrOrganizationRequest, boolean buildTree); } diff --git a/kernel-s-system/system-business-organization/src/main/java/cn/stylefeng/roses/kernel/system/modular/organization/service/impl/HrOrganizationServiceImpl.java b/kernel-s-system/system-business-organization/src/main/java/cn/stylefeng/roses/kernel/system/modular/organization/service/impl/HrOrganizationServiceImpl.java index f703f0767..d2ae0d5bd 100644 --- a/kernel-s-system/system-business-organization/src/main/java/cn/stylefeng/roses/kernel/system/modular/organization/service/impl/HrOrganizationServiceImpl.java +++ b/kernel-s-system/system-business-organization/src/main/java/cn/stylefeng/roses/kernel/system/modular/organization/service/impl/HrOrganizationServiceImpl.java @@ -308,7 +308,7 @@ public class HrOrganizationServiceImpl extends ServiceImpl orgZTree(HrOrganizationRequest hrOrganizationRequest) { + public List orgZTree(HrOrganizationRequest hrOrganizationRequest, boolean buildTree) { // 获取角色id Long roleId = hrOrganizationRequest.getRoleId(); @@ -328,7 +328,11 @@ public class HrOrganizationServiceImpl extends ServiceImpl().doTreeBuild(zTreeNodes); + } else { + return zTreeNodes; + } } /** diff --git a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/controller/ResourceController.java b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/controller/ResourceController.java index 65472a897..bd9fa8c34 100644 --- a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/controller/ResourceController.java +++ b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/controller/ResourceController.java @@ -68,14 +68,26 @@ public class ResourceController { } /** - * 获取资源平级树列表,用于分配接口权限 + * 获取资源平级树列表,用于分配接口权限(适用于layui版本) * * @author majianguo * @date 2021/1/9 15:07 */ @GetResource(name = "获取资源平级树列表,用于分配接口权限", path = "/resource/getLateralTree") public List getLateralTree(SysRoleRequest sysRoleRequest) { - return sysResourceService.getResourceLateralTree(sysRoleRequest.getRoleId()); + return sysResourceService.getResourceTree(sysRoleRequest.getRoleId(), true); + } + + /** + * 获取资源树列表,用于分配接口权限(适用于antd vue版本) + * + * @author majianguo + * @date 2021/1/9 15:07 + */ + @GetResource(name = "获取资源树列表,用于分配接口权限", path = "/resource/getLateralTreeChildren") + public ResponseData getLateralTreeChildren(SysRoleRequest sysRoleRequest) { + List resourceLateralTree = sysResourceService.getResourceTree(sysRoleRequest.getRoleId(), false); + return new SuccessResponseData(resourceLateralTree); } /** diff --git a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/pojo/ResourceTreeNode.java b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/pojo/ResourceTreeNode.java index 1a85b96a7..9ce0cd19c 100644 --- a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/pojo/ResourceTreeNode.java +++ b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/pojo/ResourceTreeNode.java @@ -1,5 +1,6 @@ package cn.stylefeng.roses.kernel.resource.modular.pojo; +import cn.stylefeng.roses.kernel.rule.abstracts.AbstractTreeNode; import lombok.Data; import java.util.List; @@ -11,7 +12,7 @@ import java.util.List; * @date 2020/3/26 14:29 */ @Data -public class ResourceTreeNode { +public class ResourceTreeNode implements AbstractTreeNode { /** * 资源id @@ -46,4 +47,18 @@ public class ResourceTreeNode { */ private List children; + @Override + public String getNodeId() { + return this.code; + } + + @Override + public String getNodeParentId() { + return this.parentCode; + } + + @Override + public void setChildrenNodes(List childrenNodes) { + this.children = childrenNodes; + } } diff --git a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/SysResourceService.java b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/SysResourceService.java index cef1081db..5a52523cd 100644 --- a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/SysResourceService.java +++ b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/SysResourceService.java @@ -70,8 +70,10 @@ public interface SysResourceService extends IService { /** * 获取平级树节点列表 * + * @param roleId 角色id + * @param lateralFlag true-不带树形结构,false-返回带树形结构的 * @author majianguo * @date 2021/1/9 15:08 */ - List getResourceLateralTree(Long roleId); + List getResourceTree(Long roleId, Boolean lateralFlag); } diff --git a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/impl/SysResourceServiceImpl.java b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/impl/SysResourceServiceImpl.java index 26b258891..aeeeadbf2 100644 --- a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/impl/SysResourceServiceImpl.java +++ b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/resource/modular/service/impl/SysResourceServiceImpl.java @@ -19,10 +19,12 @@ import cn.stylefeng.roses.kernel.resource.modular.pojo.ResourceTreeNode; import cn.stylefeng.roses.kernel.resource.modular.service.SysResourceService; import cn.stylefeng.roses.kernel.rule.constants.RuleConstants; import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum; +import cn.stylefeng.roses.kernel.rule.factory.DefaultTreeBuildFactory; import cn.stylefeng.roses.kernel.system.ResourceServiceApi; import cn.stylefeng.roses.kernel.system.RoleServiceApi; import cn.stylefeng.roses.kernel.system.UserServiceApi; import cn.stylefeng.roses.kernel.system.constants.SystemConstants; +import cn.stylefeng.roses.kernel.system.pojo.organization.layui.LayuiOrganizationTreeNode; import cn.stylefeng.roses.kernel.system.pojo.resource.request.ResourceRequest; import cn.stylefeng.roses.kernel.system.pojo.role.response.SysRoleResourceResponse; import cn.stylefeng.roses.kernel.system.pojo.role.response.SysRoleResponse; @@ -137,7 +139,7 @@ public class SysResourceServiceImpl extends ServiceImpl getResourceLateralTree(Long roleId) { + public List getResourceTree(Long roleId, Boolean lateralFlag) { // 结果 List res = new ArrayList<>(); @@ -214,7 +216,11 @@ public class SysResourceServiceImpl extends ServiceImpl().doTreeBuild(res); + } } @Override diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/controller/OnlineUserController.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/controller/OnlineUserController.java new file mode 100644 index 000000000..2f6f07965 --- /dev/null +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/controller/OnlineUserController.java @@ -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(); + } + +} diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/controller/SysUserController.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/controller/SysUserController.java index 38daf23b9..003edf513 100644 --- a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/controller/SysUserController.java +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/controller/SysUserController.java @@ -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()); - } - } diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/factory/OnlineUserCreateFactory.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/factory/OnlineUserCreateFactory.java new file mode 100644 index 000000000..aa31ed570 --- /dev/null +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/factory/OnlineUserCreateFactory.java @@ -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; + } + +} diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/factory/UserLoginInfoFactory.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/factory/UserLoginInfoFactory.java index 63d66fb60..99b1741dc 100644 --- a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/factory/UserLoginInfoFactory.java +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/factory/UserLoginInfoFactory.java @@ -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; diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/mapper/mapping/SysUserMapper.xml b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/mapper/mapping/SysUserMapper.xml index 7aa78a465..61fa3c12d 100644 --- a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/mapper/mapping/SysUserMapper.xml +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/mapper/mapping/SysUserMapper.xml @@ -22,13 +22,13 @@ left join sys_user_org suorg on suser.user_id = suorg.user_id - and sys_user.real_name like concat('%',#{sysUserRequest.realName},'%') + and suser.real_name like concat('%',#{sysUserRequest.realName},'%') - and sys_user.account like concat('%',#{sysUserRequest.account},'%') + and suser.account like concat('%',#{sysUserRequest.account},'%') - and sys_user.status_flag like concat('%',#{sysUserRequest.statusFlag},'%') + and suser.status_flag like concat('%',#{sysUserRequest.statusFlag},'%') and suorg.org_id = #{sysUserRequest.orgId} diff --git a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java index 05d8e0c50..e159f26f2 100644 --- a/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java +++ b/kernel-s-system/system-business-user/src/main/java/cn/stylefeng/roses/kernel/system/modular/user/service/impl/SysUserServiceImpl.java @@ -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 impl } @Override - public List onlineUserList() { - return sessionManagerApi.onlineUserList(); + public List onlineUserList(OnlineUserRequest onlineUserRequest) { + List loginUsers = sessionManagerApi.onlineUserList(); + + // 对象转化 + List 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