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<>());
}
}
}
递归要知道从哪里开始哪里结束