From 4941fe0cd080b12b53366d97004420c8ca302cac Mon Sep 17 00:00:00 2001 From: Saisai Liu <1374434128@qq.com> Date: Sat, 13 Apr 2024 09:11:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E6=9F=A5=E8=AF=A2=E4=BC=98?= =?UTF-8?q?=E5=8C=96=EF=BC=8C=E7=BA=AF=E5=90=8E=E5=8F=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/muyu/system/domain/SysMenu.java | 157 +----------------- .../com/muyu/system/mapper/SysMenuMapper.java | 12 ++ .../service/impl/SysMenuServiceImpl.java | 127 ++++++++------ .../resources/mapper/system/SysMenuMapper.xml | 8 +- 4 files changed, 96 insertions(+), 208 deletions(-) diff --git a/muyu-modules/muyu-system/src/main/java/com/muyu/system/domain/SysMenu.java b/muyu-modules/muyu-system/src/main/java/com/muyu/system/domain/SysMenu.java index b7f4558..c73fe79 100644 --- a/muyu-modules/muyu-system/src/main/java/com/muyu/system/domain/SysMenu.java +++ b/muyu-modules/muyu-system/src/main/java/com/muyu/system/domain/SysMenu.java @@ -36,6 +36,8 @@ public class SysMenu extends BaseEntity { /** * 菜单名称 */ + @NotBlank(message = "菜单名称不能为空") + @Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符") private String menuName; /** @@ -108,162 +110,7 @@ public class SysMenu extends BaseEntity { */ private List children = new ArrayList(); - public Long getMenuId () { - return menuId; - } - public void setMenuId (Long menuId) { - this.menuId = menuId; - } - @NotBlank(message = "菜单名称不能为空") - @Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符") - public String getMenuName () { - return menuName; - } - public void setMenuName (String menuName) { - this.menuName = menuName; - } - - public String getParentName () { - return parentName; - } - - public void setParentName (String parentName) { - this.parentName = parentName; - } - - public Long getParentId () { - return parentId; - } - - public void setParentId (Long parentId) { - this.parentId = parentId; - } - - @NotNull(message = "显示顺序不能为空") - public Integer getOrderNum () { - return orderNum; - } - - public void setOrderNum (Integer orderNum) { - this.orderNum = orderNum; - } - - @Size(min = 0, max = 200, message = "路由地址不能超过200个字符") - public String getPath () { - return path; - } - - public void setPath (String path) { - this.path = path; - } - - @Size(min = 0, max = 200, message = "组件路径不能超过255个字符") - public String getComponent () { - return component; - } - - public void setComponent (String component) { - this.component = component; - } - - public String getQuery () { - return query; - } - - public void setQuery (String query) { - this.query = query; - } - - public String getIsFrame () { - return isFrame; - } - - public void setIsFrame (String isFrame) { - this.isFrame = isFrame; - } - - public String getIsCache () { - return isCache; - } - - public void setIsCache (String isCache) { - this.isCache = isCache; - } - - @NotBlank(message = "菜单类型不能为空") - public String getMenuType () { - return menuType; - } - - public void setMenuType (String menuType) { - this.menuType = menuType; - } - - public String getVisible () { - return visible; - } - - public void setVisible (String visible) { - this.visible = visible; - } - - public String getStatus () { - return status; - } - - public void setStatus (String status) { - this.status = status; - } - - @Size(min = 0, max = 100, message = "权限标识长度不能超过100个字符") - public String getPerms () { - return perms; - } - - public void setPerms (String perms) { - this.perms = perms; - } - - public String getIcon () { - return icon; - } - - public void setIcon (String icon) { - this.icon = icon; - } - - public List getChildren () { - return children; - } - - public void setChildren (List children) { - this.children = children; - } - - @Override - public String toString () { - return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) - .append("menuId", getMenuId()) - .append("menuName", getMenuName()) - .append("parentId", getParentId()) - .append("orderNum", getOrderNum()) - .append("path", getPath()) - .append("component", getComponent()) - .append("isFrame", getIsFrame()) - .append("IsCache", getIsCache()) - .append("menuType", getMenuType()) - .append("visible", getVisible()) - .append("status ", getStatus()) - .append("perms", getPerms()) - .append("icon", getIcon()) - .append("createBy", getCreateBy()) - .append("createTime", getCreateTime()) - .append("updateBy", getUpdateBy()) - .append("updateTime", getUpdateTime()) - .append("remark", getRemark()) - .toString(); - } } diff --git a/muyu-modules/muyu-system/src/main/java/com/muyu/system/mapper/SysMenuMapper.java b/muyu-modules/muyu-system/src/main/java/com/muyu/system/mapper/SysMenuMapper.java index 8ceaaa0..243e025 100644 --- a/muyu-modules/muyu-system/src/main/java/com/muyu/system/mapper/SysMenuMapper.java +++ b/muyu-modules/muyu-system/src/main/java/com/muyu/system/mapper/SysMenuMapper.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.muyu.system.domain.SysMenu; import org.apache.ibatis.annotations.Param; +import java.util.Collection; import java.util.List; /** @@ -90,6 +91,15 @@ public interface SysMenuMapper extends BaseMapper { */ public SysMenu selectMenuById (Long menuId); + /** + * 根据菜单ID查询信息 + * + * @param parentId 父级菜单ID + * + * @return 菜单信息 + */ + List selectMenuByParentId(Long parentId); + /** * 是否存在菜单子节点 * @@ -135,4 +145,6 @@ public interface SysMenuMapper extends BaseMapper { * @return 结果 */ public SysMenu checkMenuNameUnique (@Param("menuName") String menuName, @Param("parentId") Long parentId); + + } diff --git a/muyu-modules/muyu-system/src/main/java/com/muyu/system/service/impl/SysMenuServiceImpl.java b/muyu-modules/muyu-system/src/main/java/com/muyu/system/service/impl/SysMenuServiceImpl.java index e4e2ec8..d7e0256 100644 --- a/muyu-modules/muyu-system/src/main/java/com/muyu/system/service/impl/SysMenuServiceImpl.java +++ b/muyu-modules/muyu-system/src/main/java/com/muyu/system/service/impl/SysMenuServiceImpl.java @@ -1,5 +1,6 @@ package com.muyu.system.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.muyu.common.core.constant.Constants; import com.muyu.common.core.constant.UserConstants; @@ -43,11 +44,10 @@ public class SysMenuServiceImpl extends ServiceImpl impl * 根据用户查询系统菜单列表 * * @param userId 用户ID - * * @return 菜单列表 */ @Override - public List selectMenuList (Long userId) { + public List selectMenuList(Long userId) { return selectMenuList(new SysMenu(), userId); } @@ -55,11 +55,11 @@ public class SysMenuServiceImpl extends ServiceImpl impl * 查询系统菜单列表 * * @param menu 菜单信息 - * * @return 菜单列表 */ @Override - public List selectMenuList (SysMenu menu, Long userId) { + public List selectMenuList(SysMenu menu, Long userId) { + int size = menuMapper.selectMenuList(new SysMenu()).size(); List menuList = null; // 管理员显示所有菜单信息 if (SysUser.isAdmin(userId)) { @@ -68,18 +68,61 @@ public class SysMenuServiceImpl extends ServiceImpl impl menu.getParams().put("userId", userId); menuList = menuMapper.selectMenuListByUserId(menu); } + if (menuList.size() != size) { + List sysMenuList = new ArrayList<>(); + menuList.forEach(menuObj -> { + //查子级 + sysMenuList.addAll(treeMenu(menuObj)); + //查父级 + if (menuObj.getParentId() != 0) { + sysMenuList.addAll(superMenu(menuObj)); + } + }); + menuList.addAll(sysMenuList); + menuList = menuList.stream().distinct().toList(); + } return menuList; } + public List treeMenu(SysMenu menus) { + List sysMenus1 = new ArrayList<>(); + List sysMenus = menuMapper.selectMenuByParentId(menus.getMenuId()); + sysMenus1.addAll(sysMenus); + if (sysMenus.size()>0){ + for (SysMenu sysMenu : sysMenus) { + treeMenu(sysMenu); + } + } +// for (SysMenu sysMenu : sysMenus1) { +// sysMenus.addAll(treeMenu(sysMenu)); +// } + return sysMenus1; + } + + /** + * 将父级存入 + * + * @param sysMenu + * @return + */ + public List superMenu(SysMenu sysMenu) { + List sysMenus = new ArrayList<>(); + SysMenu sysMenuParent = menuMapper.selectMenuById(sysMenu.getParentId()); + sysMenus.add(sysMenuParent); + if (sysMenuParent.getParentId() != 0) { + sysMenus.addAll(superMenu(sysMenuParent)); + } + return sysMenus; + } + /** * 根据用户ID查询权限 * * @param userId 用户ID - * * @return 权限列表 */ @Override - public Set selectMenuPermsByUserId (Long userId) { + public Set selectMenuPermsByUserId(Long userId) { List perms = menuMapper.selectMenuPermsByUserId(userId); Set permsSet = new HashSet<>(); for (String perm : perms) { @@ -94,11 +137,10 @@ public class SysMenuServiceImpl extends ServiceImpl impl * 根据角色ID查询权限 * * @param roleId 角色ID - * * @return 权限列表 */ @Override - public Set selectMenuPermsByRoleId (Long roleId) { + public Set selectMenuPermsByRoleId(Long roleId) { List perms = menuMapper.selectMenuPermsByRoleId(roleId); Set permsSet = new HashSet<>(); for (String perm : perms) { @@ -113,11 +155,10 @@ public class SysMenuServiceImpl extends ServiceImpl impl * 根据用户ID查询菜单 * * @param userId 用户名称 - * * @return 菜单列表 */ @Override - public List selectMenuTreeByUserId (Long userId) { + public List selectMenuTreeByUserId(Long userId) { List menus = null; if (SecurityUtils.isAdmin(userId)) { menus = menuMapper.selectMenuTreeAll(); @@ -131,11 +172,10 @@ public class SysMenuServiceImpl extends ServiceImpl impl * 根据角色ID查询菜单树信息 * * @param roleId 角色ID - * * @return 选中菜单列表 */ @Override - public List selectMenuListByRoleId (Long roleId) { + public List selectMenuListByRoleId(Long roleId) { SysRole role = roleMapper.selectRoleById(roleId); return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly()); } @@ -144,11 +184,10 @@ public class SysMenuServiceImpl extends ServiceImpl impl * 构建前端路由所需要的菜单 * * @param menus 菜单列表 - * * @return 路由列表 */ @Override - public List buildMenus (List menus) { + public List buildMenus(List menus) { List routers = new LinkedList(); for (SysMenu menu : menus) { RouterVo router = new RouterVo(); @@ -196,14 +235,13 @@ public class SysMenuServiceImpl extends ServiceImpl impl * 构建前端所需要树结构 * * @param menus 菜单列表 - * * @return 树结构列表 */ @Override - public List buildMenuTree (List menus) { + public List buildMenuTree(List menus) { List returnList = new ArrayList(); List tempList = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList()); - for (Iterator iterator = menus.iterator() ; iterator.hasNext() ; ) { + for (Iterator iterator = menus.iterator(); iterator.hasNext(); ) { SysMenu menu = (SysMenu) iterator.next(); // 如果是顶级节点, 遍历该父节点的所有子节点 if (!tempList.contains(menu.getParentId())) { @@ -221,11 +259,10 @@ public class SysMenuServiceImpl extends ServiceImpl impl * 构建前端所需要下拉树结构 * * @param menus 菜单列表 - * * @return 下拉树结构列表 */ @Override - public List buildMenuTreeSelect (List menus) { + public List buildMenuTreeSelect(List menus) { List menuTrees = buildMenuTree(menus); return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); } @@ -234,11 +271,10 @@ public class SysMenuServiceImpl extends ServiceImpl impl * 根据菜单ID查询信息 * * @param menuId 菜单ID - * * @return 菜单信息 */ @Override - public SysMenu selectMenuById (Long menuId) { + public SysMenu selectMenuById(Long menuId) { return menuMapper.selectMenuById(menuId); } @@ -246,11 +282,10 @@ public class SysMenuServiceImpl extends ServiceImpl impl * 是否存在菜单子节点 * * @param menuId 菜单ID - * * @return 结果 */ @Override - public boolean hasChildByMenuId (Long menuId) { + public boolean hasChildByMenuId(Long menuId) { int result = menuMapper.hasChildByMenuId(menuId); return result > 0; } @@ -259,11 +294,10 @@ public class SysMenuServiceImpl extends ServiceImpl impl * 查询菜单使用数量 * * @param menuId 菜单ID - * * @return 结果 */ @Override - public boolean checkMenuExistRole (Long menuId) { + public boolean checkMenuExistRole(Long menuId) { int result = roleMenuMapper.checkMenuExistRole(menuId); return result > 0; } @@ -272,11 +306,10 @@ public class SysMenuServiceImpl extends ServiceImpl impl * 新增保存菜单信息 * * @param menu 菜单信息 - * * @return 结果 */ @Override - public int insertMenu (SysMenu menu) { + public int insertMenu(SysMenu menu) { return menuMapper.insertMenu(menu); } @@ -284,11 +317,10 @@ public class SysMenuServiceImpl extends ServiceImpl impl * 修改保存菜单信息 * * @param menu 菜单信息 - * * @return 结果 */ @Override - public int updateMenu (SysMenu menu) { + public int updateMenu(SysMenu menu) { return menuMapper.updateMenu(menu); } @@ -296,11 +328,10 @@ public class SysMenuServiceImpl extends ServiceImpl impl * 删除菜单管理信息 * * @param menuId 菜单ID - * * @return 结果 */ @Override - public int deleteMenuById (Long menuId) { + public int deleteMenuById(Long menuId) { return menuMapper.deleteMenuById(menuId); } @@ -308,11 +339,10 @@ public class SysMenuServiceImpl extends ServiceImpl impl * 校验菜单名称是否唯一 * * @param menu 菜单信息 - * * @return 结果 */ @Override - public boolean checkMenuNameUnique (SysMenu menu) { + public boolean checkMenuNameUnique(SysMenu menu) { Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId(); SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId()); if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) { @@ -325,10 +355,9 @@ public class SysMenuServiceImpl extends ServiceImpl impl * 获取路由名称 * * @param menu 菜单信息 - * * @return 路由名称 */ - public String getRouteName (SysMenu menu) { + public String getRouteName(SysMenu menu) { String routerName = StringUtils.capitalize(menu.getPath()); // 非外链并且是一级目录(类型为目录) if (isMenuFrame(menu)) { @@ -341,10 +370,9 @@ public class SysMenuServiceImpl extends ServiceImpl impl * 获取路由地址 * * @param menu 菜单信息 - * * @return 路由地址 */ - public String getRouterPath (SysMenu menu) { + public String getRouterPath(SysMenu menu) { String routerPath = menu.getPath(); // 内链打开外网方式 if (menu.getParentId().intValue() != 0 && isInnerLink(menu)) { @@ -366,10 +394,9 @@ public class SysMenuServiceImpl extends ServiceImpl impl * 获取组件信息 * * @param menu 菜单信息 - * * @return 组件信息 */ - public String getComponent (SysMenu menu) { + public String getComponent(SysMenu menu) { String component = UserConstants.LAYOUT; if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu)) { component = menu.getComponent(); @@ -385,10 +412,9 @@ public class SysMenuServiceImpl extends ServiceImpl impl * 是否为菜单内部跳转 * * @param menu 菜单信息 - * * @return 结果 */ - public boolean isMenuFrame (SysMenu menu) { + public boolean isMenuFrame(SysMenu menu) { return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType()) && menu.getIsFrame().equals(UserConstants.NO_FRAME); } @@ -397,10 +423,9 @@ public class SysMenuServiceImpl extends ServiceImpl impl * 是否为内链组件 * * @param menu 菜单信息 - * * @return 结果 */ - public boolean isInnerLink (SysMenu menu) { + public boolean isInnerLink(SysMenu menu) { return menu.getIsFrame().equals(UserConstants.NO_FRAME) && StringUtils.ishttp(menu.getPath()); } @@ -408,10 +433,9 @@ public class SysMenuServiceImpl extends ServiceImpl impl * 是否为parent_view组件 * * @param menu 菜单信息 - * * @return 结果 */ - public boolean isParentView (SysMenu menu) { + public boolean isParentView(SysMenu menu) { return menu.getParentId().intValue() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType()); } @@ -420,12 +444,11 @@ public class SysMenuServiceImpl extends ServiceImpl impl * * @param list 分类表 * @param parentId 传入的父节点ID - * * @return String */ - public List getChildPerms (List list, int parentId) { + public List getChildPerms(List list, int parentId) { List returnList = new ArrayList(); - for (Iterator iterator = list.iterator() ; iterator.hasNext() ; ) { + for (Iterator iterator = list.iterator(); iterator.hasNext(); ) { SysMenu t = (SysMenu) iterator.next(); // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点 if (t.getParentId() == parentId) { @@ -442,7 +465,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl * @param list 分类表 * @param t 子节点 */ - private void recursionFn (List list, SysMenu t) { + private void recursionFn(List list, SysMenu t) { // 得到子节点列表 List childList = getChildList(list, t); t.setChildren(childList); @@ -456,7 +479,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl /** * 得到子节点列表 */ - private List getChildList (List list, SysMenu t) { + private List getChildList(List list, SysMenu t) { List tlist = new ArrayList(); Iterator it = list.iterator(); while (it.hasNext()) { @@ -471,7 +494,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl /** * 判断是否有子节点 */ - private boolean hasChild (List list, SysMenu t) { + private boolean hasChild(List list, SysMenu t) { return getChildList(list, t).size() > 0; } @@ -480,7 +503,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl * * @return 替换后的内链域名 */ - public String innerLinkReplaceEach (String path) { + public String innerLinkReplaceEach(String path) { return StringUtils.replaceEach(path, new String[]{Constants.HTTP, Constants.HTTPS, Constants.WWW, ".", ":"}, new String[]{"", "", "", "/", "/"}); } diff --git a/muyu-modules/muyu-system/src/main/resources/mapper/system/SysMenuMapper.xml b/muyu-modules/muyu-system/src/main/resources/mapper/system/SysMenuMapper.xml index 1dac5c4..59b9c97 100644 --- a/muyu-modules/muyu-system/src/main/resources/mapper/system/SysMenuMapper.xml +++ b/muyu-modules/muyu-system/src/main/resources/mapper/system/SysMenuMapper.xml @@ -7,7 +7,6 @@ - @@ -175,6 +174,13 @@ where menu_id = #{menuId} + + + +