【8.3.3】【role】增加一个接口获取角色分类和角色组成的树

pull/62/head
stylefeng 2025-01-24 13:47:05 +08:00
parent 582873494e
commit ec22f6306d
5 changed files with 283 additions and 0 deletions

View File

@ -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.
*
* GunsAPACHE 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> {
/**
* idid
*/
@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;
}
}

View File

@ -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.
*
* GunsAPACHE 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;
}
}

View File

@ -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;
}
}

View File

@ -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);
} }

View File

@ -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);
}
/** /**
* *
* *