若依后台 优化菜单查询 添加注释
parent
2f5edc5abe
commit
80302ded05
|
@ -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 需要查询的菜单ID列表,类型为List<Long>。
|
||||
* @return 返回一个SysMenu类型的菜单列表,包含所有指定ID的菜单项。
|
||||
*/
|
||||
List<SysMenu> selectSysMenuList(@Param("longList") List<Long> longList);
|
||||
|
||||
/**
|
||||
* 通过ID列表查询系统菜单的子菜单列表。
|
||||
* @param longList 需要查询子菜单的菜单ID列表,类型为List<Long>。
|
||||
* @return 返回一个SysMenu类型的子菜单列表,包含所有指定菜单ID下的子菜单项。
|
||||
*/
|
||||
List<SysMenu> selectSysChildrenList(@Param("longList") List<Long> longList);
|
||||
}
|
||||
|
|
|
@ -51,34 +51,55 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
|
|||
return selectMenuList(new SysMenu(), userId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 递归查询菜单列表
|
||||
* @param sysMenuList 待处理的菜单列表
|
||||
* @return 返回处理后的菜单列表,如果不存在父菜单不是0的菜单则返回null
|
||||
*/
|
||||
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查询权限
|
||||
*
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue