springboot项目依赖mapstructmybatis-plushutool数据库为oraclepublic ListTreeString getUserAssociatedMenuListString userId SetString userAssociatedRoleIdSet = userRoleRelationServicelist WrappersU
优化后的代码如下:
public List<Tree<String>> getUserAssociatedMenuList(String userId) {
Set<String> userAssociatedRoleIdSet = userRoleRelationService.listRolesByUserId(userId);
if (userAssociatedRoleIdSet.isEmpty()) {
userAssociatedRoleIdSet.add("664025b2852045ceadf67cd759ae70ad");
}
boolean isAdministrator = userAssociatedRoleIdSet.contains("b7cf04c998c44ff1811db2224d898596");
Set<String> userAssociatedMenuIdSet = getAssociatedMenuIds(userAssociatedRoleIdSet, isAdministrator);
if (userAssociatedMenuIdSet.isEmpty()) {
return new ArrayList<>();
}
List<Menu> menuList = getMenuList(isAdministrator, userAssociatedMenuIdSet);
return buildMenuTree(menuList);
}
private Set<String> getAssociatedMenuIds(Set<String> userAssociatedRoleIdSet, boolean isAdministrator) {
if (isAdministrator) {
return new HashSet<>();
}
return roleMenuRelationService.listMenuIdsByRoleIds(userAssociatedRoleIdSet);
}
private List<Menu> getMenuList(boolean isAdministrator, Set<String> userAssociatedMenuIdSet) {
LambdaQueryWrapper<Menu> wrapper = Wrappers.<Menu>lambdaQuery();
if (!isAdministrator) {
wrapper.in(Menu::getId, userAssociatedMenuIdSet);
}
wrapper.orderByAsc(Menu::getSort);
return this.list(wrapper);
}
private List<Tree<String>> buildMenuTree(List<Menu> menuList) {
return TreeUtil.build(menuList, "0", (menu, treeNode) -> {
treeNode.setId(menu.getId());
treeNode.setParentId(menu.getParentId());
treeNode.setName(menu.getName());
if (menu.getType().equals("菜单")) {
treeNode.putExtra("isExternalUrl", menu.getIsExternalUrl());
treeNode.putExtra("url", menu.getUrl());
treeNode.putExtra("remark", menu.getRemark());
treeNode.putExtra("tag", menu.getTag());
}
});
}
优化点:
- 抽离了获取用户关联角色和获取关联菜单ID的方法,提高了代码的可读性和可维护性;
- 将获取菜单列表和构建菜单树的逻辑分开,使代码结构更清晰,易于理解和修改;
- 使用Lambda表达式和方法引用简化代码;
- 对于管理员角色,直接返回空集合,避免了不必要的查询和处理;
- 对于空集合的判断和返回,使用了更简洁的写法,提高了代码的可读性。
原文地址: http://www.cveoy.top/t/topic/b0E0 著作权归作者所有。请勿转载和采集!