mirror of https://gitee.com/stylefeng/roses
【8.3.3】【role】增加一个接口获取角色分类和角色组成的树
parent
582873494e
commit
ec22f6306d
|
@ -0,0 +1,99 @@
|
||||||
|
/*
|
||||||
|
* Copyright [2020-2030] [https://www.stylefeng.cn]
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
|
||||||
|
*
|
||||||
|
* 1.请不要删除和修改根目录下的LICENSE文件。
|
||||||
|
* 2.请不要删除和修改Guns源码头部的版权声明。
|
||||||
|
* 3.请保留源码和相关描述文件的项目出处,作者声明等。
|
||||||
|
* 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||||
|
* 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||||
|
* 6.若您的项目无法满足以上几点,可申请商业授权
|
||||||
|
*/
|
||||||
|
package cn.stylefeng.roses.kernel.sys.api.pojo.role;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.rule.annotation.ChineseDescription;
|
||||||
|
import cn.stylefeng.roses.kernel.rule.tree.factory.base.AbstractTreeNode;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色和角色类型组成的机构树的传输bean
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2025/1/24 11:16
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class SysRoleTreeDTO implements AbstractTreeNode<SysRoleTreeDTO> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色分类id或者角色id
|
||||||
|
*/
|
||||||
|
@ChineseDescription("角色分类id或者角色id")
|
||||||
|
private Long roleTreeNodeId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上级id
|
||||||
|
*/
|
||||||
|
@ChineseDescription("上级id")
|
||||||
|
private Long roleTreeParentNodeId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色分类名称或者角色名称
|
||||||
|
*/
|
||||||
|
@ChineseDescription("角色分类名称或者角色名称")
|
||||||
|
private String roleTreeNodeName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 节点类型:1-角色分类,2-角色
|
||||||
|
*/
|
||||||
|
@ChineseDescription("节点类型:1-角色分类,2-角色")
|
||||||
|
private Integer nodeType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色类型:10-系统角色,15-业务角色,20-公司角色
|
||||||
|
*/
|
||||||
|
@ChineseDescription("角色类型:10-系统角色,15-业务角色,20-公司角色")
|
||||||
|
private Integer roleType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 子节点
|
||||||
|
*/
|
||||||
|
@ChineseDescription("子节点")
|
||||||
|
private List<SysRoleTreeDTO> children;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getNodeId() {
|
||||||
|
if (roleTreeNodeId == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return roleTreeNodeId.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getNodeParentId() {
|
||||||
|
if (roleTreeParentNodeId == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return roleTreeParentNodeId.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setChildrenNodes(List<SysRoleTreeDTO> childrenNodes) {
|
||||||
|
this.children = childrenNodes;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,82 @@
|
||||||
|
/*
|
||||||
|
* Copyright [2020-2030] [https://www.stylefeng.cn]
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
* Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
|
||||||
|
*
|
||||||
|
* 1.请不要删除和修改根目录下的LICENSE文件。
|
||||||
|
* 2.请不要删除和修改Guns源码头部的版权声明。
|
||||||
|
* 3.请保留源码和相关描述文件的项目出处,作者声明等。
|
||||||
|
* 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||||
|
* 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns
|
||||||
|
* 6.若您的项目无法满足以上几点,可申请商业授权
|
||||||
|
*/
|
||||||
|
package cn.stylefeng.roses.kernel.sys.modular.role.enums;
|
||||||
|
|
||||||
|
import cn.hutool.core.convert.Convert;
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.stylefeng.roses.kernel.rule.base.ReadableEnum;
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色分类组成的树节点
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2025/1/24 13:36
|
||||||
|
*/
|
||||||
|
@Getter
|
||||||
|
public enum RoleTreeNodeTypeEnum implements ReadableEnum<RoleTreeNodeTypeEnum> {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色分类
|
||||||
|
*/
|
||||||
|
ROLE_CATEGORY(1, "角色分类"),
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色
|
||||||
|
*/
|
||||||
|
ROLE(2, "角色");
|
||||||
|
|
||||||
|
private final Integer code;
|
||||||
|
|
||||||
|
private final String message;
|
||||||
|
|
||||||
|
RoleTreeNodeTypeEnum(Integer code, String message) {
|
||||||
|
this.code = code;
|
||||||
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getKey() {
|
||||||
|
return this.code;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getName() {
|
||||||
|
return this.message;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RoleTreeNodeTypeEnum parseToEnum(String originValue) {
|
||||||
|
if (ObjectUtil.isEmpty(originValue)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
for (RoleTreeNodeTypeEnum value : RoleTreeNodeTypeEnum.values()) {
|
||||||
|
if (value.code.equals(Convert.toInt(originValue))) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
package cn.stylefeng.roses.kernel.sys.modular.role.factory;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
|
import cn.stylefeng.roses.kernel.rule.constants.TreeConstants;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.api.pojo.role.SysRoleTreeDTO;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.entity.RoleCategory;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.entity.SysRole;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.enums.RoleTreeNodeTypeEnum;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 角色树构建工厂
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2025/1/24 12:27
|
||||||
|
*/
|
||||||
|
public class RoleTreeFactory {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 创建角色和角色分类组成的树结构
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2025/1/24 13:33
|
||||||
|
*/
|
||||||
|
public static List<SysRoleTreeDTO> createRoleTree(List<RoleCategory> roleCategoryList, List<SysRole> sysRoleList) {
|
||||||
|
|
||||||
|
List<SysRoleTreeDTO> roleTreeList = new ArrayList<>();
|
||||||
|
|
||||||
|
// 先将角色分类放入到树结构中
|
||||||
|
for (RoleCategory roleCategory : roleCategoryList) {
|
||||||
|
SysRoleTreeDTO roleTree = new SysRoleTreeDTO();
|
||||||
|
roleTree.setRoleTreeNodeId(roleCategory.getId());
|
||||||
|
roleTree.setRoleTreeParentNodeId(roleCategory.getCategoryParentId());
|
||||||
|
roleTree.setRoleTreeNodeName(roleCategory.getRoleCategoryName());
|
||||||
|
roleTree.setNodeType(RoleTreeNodeTypeEnum.ROLE_CATEGORY.getCode());
|
||||||
|
roleTree.setRoleType(roleCategory.getCategoryType());
|
||||||
|
roleTreeList.add(roleTree);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将角色放在树结构中
|
||||||
|
for (SysRole sysRole : sysRoleList) {
|
||||||
|
SysRoleTreeDTO roleTree = new SysRoleTreeDTO();
|
||||||
|
roleTree.setRoleTreeNodeId(sysRole.getRoleId());
|
||||||
|
|
||||||
|
// 角色如果有分类,则设置角色的父级id为角色分类id,如果没有,则直接个挂载根下边
|
||||||
|
if (ObjectUtil.isNotEmpty(sysRole.getRoleCategoryId())) {
|
||||||
|
roleTree.setRoleTreeParentNodeId(sysRole.getRoleCategoryId());
|
||||||
|
} else {
|
||||||
|
roleTree.setRoleTreeParentNodeId(TreeConstants.DEFAULT_PARENT_ID);
|
||||||
|
}
|
||||||
|
|
||||||
|
roleTree.setRoleTreeNodeName(sysRole.getRoleName());
|
||||||
|
roleTree.setNodeType(RoleTreeNodeTypeEnum.ROLE.getCode());
|
||||||
|
roleTree.setRoleType(sysRole.getRoleType());
|
||||||
|
roleTreeList.add(roleTree);
|
||||||
|
}
|
||||||
|
|
||||||
|
return roleTreeList;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
package cn.stylefeng.roses.kernel.sys.modular.role.service;
|
package cn.stylefeng.roses.kernel.sys.modular.role.service;
|
||||||
|
|
||||||
|
import cn.stylefeng.roses.kernel.sys.api.pojo.role.SysRoleTreeDTO;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.entity.RoleCategory;
|
import cn.stylefeng.roses.kernel.sys.modular.role.entity.RoleCategory;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleCategoryRequest;
|
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleCategoryRequest;
|
||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
@ -60,4 +61,12 @@ public interface RoleCategoryService extends IService<RoleCategory> {
|
||||||
*/
|
*/
|
||||||
RoleCategory detail(RoleCategoryRequest roleCategoryRequest);
|
RoleCategory detail(RoleCategoryRequest roleCategoryRequest);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取角色分类和角色组成的树结构
|
||||||
|
*
|
||||||
|
* @author fengshuonan
|
||||||
|
* @since 2025/1/24 11:10
|
||||||
|
*/
|
||||||
|
List<SysRoleTreeDTO> roleCategoryAndRoleTreeList(Integer roleType, Long companyId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,11 +8,15 @@ import cn.stylefeng.roses.kernel.rule.pidset.CalcParentIdListUtil;
|
||||||
import cn.stylefeng.roses.kernel.rule.pidset.callback.PidGetterService;
|
import cn.stylefeng.roses.kernel.rule.pidset.callback.PidGetterService;
|
||||||
import cn.stylefeng.roses.kernel.rule.pidset.pojo.ParentIdInfoPojo;
|
import cn.stylefeng.roses.kernel.rule.pidset.pojo.ParentIdInfoPojo;
|
||||||
import cn.stylefeng.roses.kernel.rule.tree.factory.DefaultTreeBuildFactory;
|
import cn.stylefeng.roses.kernel.rule.tree.factory.DefaultTreeBuildFactory;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.api.pojo.role.SysRoleTreeDTO;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.entity.RoleCategory;
|
import cn.stylefeng.roses.kernel.sys.modular.role.entity.RoleCategory;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.entity.SysRole;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.enums.RoleCategoryExceptionEnum;
|
import cn.stylefeng.roses.kernel.sys.modular.role.enums.RoleCategoryExceptionEnum;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.factory.RoleTreeFactory;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.mapper.RoleCategoryMapper;
|
import cn.stylefeng.roses.kernel.sys.modular.role.mapper.RoleCategoryMapper;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleCategoryRequest;
|
import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleCategoryRequest;
|
||||||
import cn.stylefeng.roses.kernel.sys.modular.role.service.RoleCategoryService;
|
import cn.stylefeng.roses.kernel.sys.modular.role.service.RoleCategoryService;
|
||||||
|
import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleService;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||||
|
@ -36,6 +40,9 @@ public class RoleCategoryServiceImpl extends ServiceImpl<RoleCategoryMapper, Rol
|
||||||
@Resource
|
@Resource
|
||||||
private DbOperatorApi dbOperatorApi;
|
private DbOperatorApi dbOperatorApi;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private SysRoleService sysRoleService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<RoleCategory> treeList(RoleCategoryRequest roleCategoryRequest) {
|
public List<RoleCategory> treeList(RoleCategoryRequest roleCategoryRequest) {
|
||||||
LambdaQueryWrapper<RoleCategory> wrapper = this.createWrapper(roleCategoryRequest);
|
LambdaQueryWrapper<RoleCategory> wrapper = this.createWrapper(roleCategoryRequest);
|
||||||
|
@ -104,6 +111,29 @@ public class RoleCategoryServiceImpl extends ServiceImpl<RoleCategoryMapper, Rol
|
||||||
return this.getOne(queryWrapper, false);
|
return this.getOne(queryWrapper, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<SysRoleTreeDTO> roleCategoryAndRoleTreeList(Integer roleType, Long companyId) {
|
||||||
|
|
||||||
|
// 根据业务类型或者公司类型,获取所有的角色分类列表
|
||||||
|
LambdaQueryWrapper<RoleCategory> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.eq(RoleCategory::getCategoryType, roleType);
|
||||||
|
if (ObjectUtil.isNotEmpty(companyId)) {
|
||||||
|
queryWrapper.eq(RoleCategory::getCompanyId, companyId);
|
||||||
|
}
|
||||||
|
List<RoleCategory> roleCategoryList = this.list(queryWrapper);
|
||||||
|
|
||||||
|
// 根据业务类型,获取所有的角色列表
|
||||||
|
LambdaQueryWrapper<SysRole> roleQueryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
roleQueryWrapper.eq(SysRole::getRoleType, roleType);
|
||||||
|
if (ObjectUtil.isNotEmpty(companyId)) {
|
||||||
|
roleQueryWrapper.eq(SysRole::getRoleCompanyId, companyId);
|
||||||
|
}
|
||||||
|
List<SysRole> sysRoleList = this.sysRoleService.list(roleQueryWrapper);
|
||||||
|
|
||||||
|
// 将角色类型和角色树组成一颗完整的树
|
||||||
|
return RoleTreeFactory.createRoleTree(roleCategoryList, sysRoleList);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取信息
|
* 获取信息
|
||||||
*
|
*
|
||||||
|
|
Loading…
Reference in New Issue