若依后台 优化菜单查询 添加注释

dev
mengwang 2024-04-12 21:19:26 +08:00
parent 2f5edc5abe
commit 80302ded05
3 changed files with 51 additions and 4 deletions

View File

@ -136,7 +136,17 @@ public interface SysMenuMapper extends BaseMapper<SysMenu> {
*/ */
public SysMenu checkMenuNameUnique (@Param("menuName") String menuName, @Param("parentId") Long parentId); public SysMenu checkMenuNameUnique (@Param("menuName") String menuName, @Param("parentId") Long parentId);
public List<SysMenu> selectSysMenuList(@Param("longList") List<Long> longList); /**
* ID
* @param longList IDList<Long>
* @return SysMenuID
*/
List<SysMenu> selectSysMenuList(@Param("longList") List<Long> longList);
/**
* ID
* @param longList IDList<Long>
* @return SysMenuID
*/
List<SysMenu> selectSysChildrenList(@Param("longList") List<Long> longList); List<SysMenu> selectSysChildrenList(@Param("longList") List<Long> longList);
} }

View File

@ -51,34 +51,55 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
return selectMenuList(new SysMenu(), userId); return selectMenuList(new SysMenu(), userId);
} }
/**
*
* @param sysMenuList
* @return 0null
*/
public List<SysMenu> selectMenuList (List<SysMenu> sysMenuList) { public List<SysMenu> selectMenuList (List<SysMenu> sysMenuList) {
// 从给定的菜单列表中筛选出所有父菜单ID不为0的ID并去重
List<Long> longList = sysMenuList.stream() List<Long> longList = sysMenuList.stream()
.map(SysMenu::getParentId) .map(SysMenu::getParentId)
.filter(parentId -> parentId != 0) .filter(parentId -> parentId != 0)
.distinct() .distinct()
.toList(); .toList();
// 如果筛选后的列表为空则表示没有需要处理的菜单直接返回null
if(longList.isEmpty()){ if(longList.isEmpty()){
return null; return null;
} }
// 根据筛选出的父菜单ID列表查询相应的菜单信息
List<SysMenu> sysMenus = menuMapper.selectSysMenuList(longList); List<SysMenu> sysMenus = menuMapper.selectSysMenuList(longList);
// 递归调用,查询这些菜单的子菜单
List<SysMenu> sysMenus1 = selectMenuList(sysMenus); List<SysMenu> sysMenus1 = selectMenuList(sysMenus);
// 如果递归查询到了子菜单,则将其添加到主菜单列表中
if(sysMenus1 != null){ if(sysMenus1 != null){
sysMenus.addAll(sysMenus1); sysMenus.addAll(sysMenus1);
} }
return sysMenus; return sysMenus;
} }
/**
*
*
* @param sysMenuList ID
* @return null
*/
public List<SysMenu> selectSysChildrenList (List<SysMenu> sysMenuList) { public List<SysMenu> selectSysChildrenList (List<SysMenu> sysMenuList) {
// 将父级菜单列表转换为菜单ID列表
List<Long> longList = sysMenuList.stream() List<Long> longList = sysMenuList.stream()
.map(SysMenu::getMenuId) .map(SysMenu::getMenuId)
.toList(); .toList();
// 根据菜单ID列表查询子菜单列表
List<SysMenu> sysMenus = menuMapper.selectSysChildrenList(longList); List<SysMenu> sysMenus = menuMapper.selectSysChildrenList(longList);
if(sysMenus != null && !sysMenus.isEmpty()){ if(sysMenus != null && !sysMenus.isEmpty()){
// 递归查询子菜单的子菜单
List<SysMenu> sysMenus1 = selectMenuList(sysMenus); List<SysMenu> sysMenus1 = selectMenuList(sysMenus);
if(sysMenus1 != null){ if(sysMenus1 != null){
// 将查询到的子菜单添加到原子菜单列表中
sysMenus.addAll(sysMenus1); sysMenus.addAll(sysMenus1);
} }
}else { }else {
// 如果没有查询到子菜单则返回null
return null; return null;
} }
return sysMenus; return sysMenus;
@ -91,30 +112,42 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* *
* @return * @return
*/ */
/**
*
* @param menu
* @param userId ID
* @return
*/
@Override @Override
public List<SysMenu> selectMenuList (SysMenu menu, Long userId) { public List<SysMenu> selectMenuList (SysMenu menu, Long userId) {
List<SysMenu> menuList = null; List<SysMenu> menuList = null;
// 管理员显示所有信息 // 判断是否为管理员,管理员显示所有菜单信息
if(SysUser.isAdmin(userId)){ if(SysUser.isAdmin(userId)){
// 查询所有菜单
menuList = menuMapper.selectMenuList(menu); menuList = menuMapper.selectMenuList(menu);
// 通过递归查询所有子菜单
List<SysMenu> sysMenus = selectMenuList(menuList); List<SysMenu> sysMenus = selectMenuList(menuList);
if(sysMenus != null && !sysMenus.isEmpty()){ if(sysMenus != null && !sysMenus.isEmpty()){
menuList.addAll(sysMenus); menuList.addAll(sysMenus);
} }
// 查询直接子菜单
List<SysMenu> sysMenus1 = selectSysChildrenList(menuMapper.selectMenuList(menu)); List<SysMenu> sysMenus1 = selectSysChildrenList(menuMapper.selectMenuList(menu));
if(sysMenus1 != null && !sysMenus1.isEmpty()){ if(sysMenus1 != null && !sysMenus1.isEmpty()){
menuList.addAll(sysMenus1); menuList.addAll(sysMenus1);
} }
}else { }else {
// 为非管理员用户查询权限内的菜单
menu.getParams().put("userId",userId); menu.getParams().put("userId",userId);
menuList = menuMapper.selectMenuListByUserId(menu); menuList = menuMapper.selectMenuListByUserId(menu);
} }
// 去除菜单列表中的重复元素
menuList = menuList.stream() menuList = menuList.stream()
.distinct() .distinct()
.toList(); .toList();
return menuList; return menuList;
} }
/** /**
* ID * ID
* *

View File

@ -185,8 +185,9 @@
<include refid="selectMenuVo"/> <include refid="selectMenuVo"/>
where menu_name=#{menuName} and parent_id = #{parentId} limit 1 where menu_name=#{menuName} and parent_id = #{parentId} limit 1
</select> </select>
<!-- 查询指定菜单ID列表的系统菜单信息 -->
<select id="selectSysMenuList" resultType="com.muyu.system.domain.SysMenu"> <select id="selectSysMenuList" resultType="com.muyu.system.domain.SysMenu">
<include refid="selectMenuVo"></include> <include refid="selectMenuVo"></include> <!-- 包含查询菜单信息的基本字段 -->
<where> <where>
menu_id in ( menu_id in (
<foreach collection="longList" item="id" separator=","> <foreach collection="longList" item="id" separator=",">
@ -195,8 +196,10 @@
) )
</where> </where>
</select> </select>
<!-- 查询指定父级菜单ID列表的子菜单信息 -->
<select id="selectSysChildrenList" resultType="com.muyu.system.domain.SysMenu"> <select id="selectSysChildrenList" resultType="com.muyu.system.domain.SysMenu">
<include refid="selectMenuVo"></include> <include refid="selectMenuVo"></include> <!-- 包含查询菜单信息的基本字段 -->
<where> <where>
parent_id in ( parent_id in (
<foreach collection="longList" item="id" separator=","> <foreach collection="longList" item="id" separator=",">
@ -206,6 +209,7 @@
</where> </where>
</select> </select>
<update id="updateMenu" parameterType="com.muyu.system.domain.SysMenu"> <update id="updateMenu" parameterType="com.muyu.system.domain.SysMenu">
update sys_menu update sys_menu
<set> <set>