系统功能权限树

Controller层代码

/**
 *系统机构分页查询
 */
    @GetMapping("/getMenuListCS")
    @ApiOperation(value = "获取权限列表",notes = "获取权限列表",response = ResponseBean.class)
    public ResponseBean getMenuList(HttpServletRequest request){
        try {
            String userId=this.getUserId(getTokenString(request));
            return new ResponseBean(CommonResultCode.SUCCESS.getCode(),"系统机构分页查询测试"+ CommonResultCode.SUCCESS.getMsg(),permissionServiceCS.getPermissionTreeVOByUserId(Integer.parseInt(StringUtils.isNotEmpty(userId)?userId:"0")));
        }
        catch (Exception e){
            e.printStackTrace();
            LOGGER.error("系统菜单分页查询异常:{}", e.getMessage());
            return new ResponseBean(CommonResultCode.FAIL.getCode(),"系统机构分页查询"+ CommonResultCode.FAIL.getMsg());
        }

    }
}

PermissionService接口方法

在这里插入图片描述

PermissionService接口getPermissionTreeVOByUserId方法

在这里插入图片描述

getPermissionTreeVOByUserId方法的实现

在这里插入图片描述

findSortPermission方法的实现

  public List<PermissionTreeVO> findSortPermission(List<Permission> list, String roleId, String userId) {
     //new一个ArrayList集合用来存放firstList
        List<PermissionTreeVO> firstList = new ArrayList<>();
     //new一个ArrayList集合用来存放suorceList
        List<PermissionTreeVO> sourceList = new ArrayList<>();
     
     //遍历系统菜单
        for (Permission tp : list) {
            //new角色权限对照表类的对象
            RolePermission rolePermission = new RolePermission();
            //new用户权限表的对象
            UserPermission userPermission = new UserPermission();
            
            //判断角色编码是否不为空,不为空mybatisplus查询其角色编码和权限编码将查询结果保存在对应的对象中。
            if (StringUtils.isNotEmpty(roleId)) {
                QueryWrapper<RolePermission> queryWrapper = new QueryWrapper<>();
                queryWrapper.lambda().eq(RolePermission::getRoleId, roleId);
                queryWrapper.lambda().eq(RolePermission::getPerId, tp.getId());
                rolePermission = rolePermissionMapper.selectOne(queryWrapper);
            }
            //判断用户编码是否不为空,对其使用mybatisplus查询其权限编码将查询结果保存在对应的集合中。
            if (StringUtils.isNotEmpty(userId)) {
                QueryWrapper<UserPermission> queryWrapper = new QueryWrapper<>();
                queryWrapper.lambda().eq(UserPermission::getUserId, userId);
                queryWrapper.lambda().eq(UserPermission::getPerId, tp.getId());
                userPermission = userPermissionMapper.selectOne(queryWrapper);
            }
            
            //TreeServer树结构服务assemblePermissionTreeVO()封装前台菜单针对vue路由结构和树型结构
				PermissionTreeVO permissionTreeVO = treeService.assemblePermissionTreeVO(tp,StringUtils.isNotEmpty(userPermission.getButtonPer()) ? userPermission.getButtonPer() : rolePermission.getButtonPer());
            
            //判断每个节点的父节点是否为"0"为"0"添加到firstList(),所有节点都保存到sourceList()集合中


            if (tp.getParentId() == 0) {
                firstList.add(permissionTreeVO);
            }
            sourceList.add(permissionTreeVO);
        }
     //调用TreeService()接口的sortPermissionTree(firstList,sourceList)递归循环出权限列表
        treeService.sortPermissionTree(firstList, sourceList);
        return firstList;
    }

sortPermissionTree()递归循环出权限列表

 /**
     * 递归循环出权限列表
     *
     * @param oldList    上级目录列表
     * @param sourceList 全部列表
     * @return
     */
@Override
public void sortPermissionTree(List<PermissionTreeVO> oldList,List<PermissionTreeVO> sourceList) {
        for (PermissionTreeVO tp:oldList){//遍历上级目录
            
            List<PermissionTreeVO> childList = new ArrayList<>();
            for (PermissionTreeVO sp:sourceList){//遍历全部目录
              //如果全部列表的父节点等于上级目录列表的唯一编码,将sp添加到childList集合
              //就是说例如一个根节点,遍历全部,出现其上一级节点为根节点的为二级节点
                if (sp.getParentId().equals(tp.getId())){
                    childList.add(sp);
                }
            }
            
            if (childList.size()>0){//如果这个集合不为空
                tp.setChildren(childList);//将集合中数据传入子路由中
                //将这级菜单作为上级菜单调用自身方法递归
                sortPermissionTree(tp.getChildren(),sourceList);
            }else{//集合为空
                  //将空集合传入子路由结束
                tp.setChildren(new ArrayList<>());
            }
        }
    }

递归要知道从哪里开始哪里结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值