| | |
| | | // 获得到所有的根节点 |
| | | List<AuthPermissionInfoRespVO.MenuVO> menuVOS = filterList(treeNodeMap.values(), node -> id.equals(node.getParentId())); |
| | | menuVOS.stream().forEach(menuVO -> { |
| | | menuVO.setPath(parentPath + "/" + menuVO.getPath()); |
| | | menuVO.setPath((parentPath + "/" + menuVO.getPath()).replace("//", "/")); |
| | | }); |
| | | return menuVOS; |
| | | } |
| | | |
| | | /** |
| | | * 将菜单列表,构建成菜单树 |
| | | * |
| | | * @param menuList 菜单列表 |
| | | * @return 菜单树 |
| | | */ |
| | | default List<AuthPermissionInfoRespVO.MenuVO> buildMenuTree(List<MenuDO> menuList, Long id, String parentPath, Integer type) { |
| | | if (CollUtil.isEmpty(menuList)) { |
| | | return Collections.emptyList(); |
| | | } |
| | | // 移除按钮 |
| | | menuList.removeIf(menu -> menu.getType().equals(MenuTypeEnum.BUTTON.getType())); |
| | | // 排序,保证菜单的有序性 |
| | | menuList.sort(Comparator.comparing(MenuDO::getSort)); |
| | | |
| | | // 构建菜单树 |
| | | // 使用 LinkedHashMap 的原因,是为了排序 。实际也可以用 Stream API ,就是太丑了。 |
| | | Map<Long, AuthPermissionInfoRespVO.MenuVO> treeNodeMap = new LinkedHashMap<>(); |
| | | menuList.forEach(menu -> treeNodeMap.put(menu.getId(), AuthConvert.INSTANCE.convertTreeNode(menu))); |
| | | // 处理父子关系 |
| | | treeNodeMap.values().stream().filter(node -> !node.getParentId().equals(id)).forEach(childNode -> { |
| | | // 获得父节点 |
| | | AuthPermissionInfoRespVO.MenuVO parentNode = treeNodeMap.get(childNode.getParentId()); |
| | | if (parentNode == null) { |
| | | LoggerFactory.getLogger(getClass()).error("[buildRouterTree][resource({}) 找不到父资源({})]", |
| | | childNode.getId(), childNode.getParentId()); |
| | | return; |
| | | } |
| | | // 将自己添加到父节点中 |
| | | if (parentNode.getChildren() == null) { |
| | | parentNode.setChildren(new ArrayList<>()); |
| | | } |
| | | parentNode.getChildren().add(childNode); |
| | | }); |
| | | // 获得到所有的根节点 |
| | | List<AuthPermissionInfoRespVO.MenuVO> menuVOS = filterList(treeNodeMap.values(), node -> id.equals(node.getParentId())); |
| | | if(type == 0) { |
| | | menuVOS.stream().forEach(menuVO -> { |
| | | menuVO.setPath((parentPath + "/" + menuVO.getPath()).replace("//", "/")); |
| | | }); |
| | | } |
| | | return menuVOS; |
| | | } |
| | | |
| | | SocialUserBindReqDTO convert(Long userId, Integer userType, AuthSocialLoginReqVO reqVO); |
| | | |
| | | SmsCodeSendReqDTO convert(AuthSmsSendReqVO reqVO); |