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

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 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);
}

View File

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

View File

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