搜索菜单优化(指定)

dev
Shen jia feng 2024-04-12 21:30:15 +08:00
parent 47571b1f06
commit d5d07a6388
4 changed files with 139 additions and 52 deletions

View File

@ -1,5 +1,6 @@
package com.muyu.system.controller; package com.muyu.system.controller;
import com.muyu.common.core.constant.CacheConstants;
import com.muyu.common.core.domain.Result; import com.muyu.common.core.domain.Result;
import com.muyu.common.core.utils.StringUtils; import com.muyu.common.core.utils.StringUtils;
import com.muyu.common.core.utils.poi.ExcelUtil; import com.muyu.common.core.utils.poi.ExcelUtil;
@ -7,6 +8,7 @@ import com.muyu.common.core.web.controller.BaseController;
import com.muyu.common.core.web.page.TableDataInfo; import com.muyu.common.core.web.page.TableDataInfo;
import com.muyu.common.log.annotation.Log; import com.muyu.common.log.annotation.Log;
import com.muyu.common.log.enums.BusinessType; import com.muyu.common.log.enums.BusinessType;
import com.muyu.common.redis.service.RedisService;
import com.muyu.common.security.annotation.InnerAuth; import com.muyu.common.security.annotation.InnerAuth;
import com.muyu.common.security.annotation.RequiresPermissions; import com.muyu.common.security.annotation.RequiresPermissions;
import com.muyu.common.security.utils.SecurityUtils; import com.muyu.common.security.utils.SecurityUtils;
@ -243,9 +245,13 @@ public class SysUserController extends BaseController {
userService.checkUserDataScope(user.getUserId()); userService.checkUserDataScope(user.getUserId());
user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
user.setUpdateBy(SecurityUtils.getUsername()); user.setUpdateBy(SecurityUtils.getUsername());
// redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + user.getUserId());
return toAjax(userService.resetPwd(user)); return toAjax(userService.resetPwd(user));
} }
/** /**
* *
*/ */

View File

@ -21,6 +21,19 @@ public interface SysMenuMapper extends BaseMapper<SysMenu> {
*/ */
public List<SysMenu> selectMenuList (SysMenu menu); public List<SysMenu> selectMenuList (SysMenu menu);
/**
*
* @return
*/
public List<SysMenu> selectSysMenList(@Param("longs") List<Long> longs);
/**
*
* @param longs
* @return
*/
public List<SysMenu> selectSysChdMenuList(@Param("longs") List<Long> longs);
/** /**
* *
* *

View File

@ -43,31 +43,96 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* *
* *
* @param userId ID * @param userId ID
*
* @return * @return
*/ */
@Override @Override
public List<SysMenu> selectMenuList (Long userId) { public List<SysMenu> selectMenuList(Long userId) {
return selectMenuList(new SysMenu(), userId); return selectMenuList(new SysMenu(), userId);
} }
/**
*
*
* @param menuList
* @return
*/
public List<SysMenu> selectSysMenList(List<SysMenu> menuList) {
// 获取父级ID 返回 流 id去重
List<Long> longs = menuList.stream()
.map(SysMenu::getParentId)
.filter(parentId -> parentId != 0)
.distinct()
.toList();
// 没有找到直接返回null
if (longs.size() == 0) {
return null;
}
// 递归调用自身
List<SysMenu> sysMenus = menuMapper.selectSysMenList(longs);
// 自己调自己
List<SysMenu> sysMenus1 = selectSysMenList(sysMenus);
if (sysMenus1 != null) {
sysMenus.addAll(sysMenus1);
}
return sysMenus;
}
public List<SysMenu> selectSysChdMenuList(List<SysMenu> menuList) {
// stream流 获取id
List<Long> longs = menuList.stream()
.map(SysMenu::getMenuId)
.toList();
// 跟进parentId 值查询数据库终结对应的子菜单信息
List<SysMenu> sysMenus = menuMapper.selectSysChdMenuList(longs);
if (sysMenus != null && sysMenus.size() != 0) {
// 如果有 调用selectSysMenList 继续递归查询 子菜单
List<SysMenu> sysMenus1 = selectSysChdMenuList(sysMenus);
if (sysMenus1 != null) {
// 不为空 添加原始数据
sysMenus.addAll(sysMenus1);
}
} else {
// 没有查到任何条件的信息
return null;
}
return sysMenus;
}
/** /**
* *
* *
* @param menu * @param menu
*
* @return * @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> sysMenus1 = selectSysMenList(menuList);
if (sysMenus1 != null && sysMenus1.size() != 0) {
menuList.addAll(sysMenus1);
}
List<SysMenu> sysMenus = selectSysChdMenuList(menuMapper.selectMenuList(menu));
// --------------
if (sysMenus != null && sysMenus.size() != 0) {
menuList.addAll(sysMenus);
}
} else { } else {
menu.getParams().put("userId", userId); menu.getParams().put("userId", userId);
menuList = menuMapper.selectMenuListByUserId(menu); menuList = menuMapper.selectMenuListByUserId(menu);
} }
// -----
menuList = menuList.stream()
.distinct()
.toList();
return menuList; return menuList;
} }
@ -75,11 +140,10 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* ID * ID
* *
* @param userId ID * @param userId ID
*
* @return * @return
*/ */
@Override @Override
public Set<String> selectMenuPermsByUserId (Long userId) { public Set<String> selectMenuPermsByUserId(Long userId) {
List<String> perms = menuMapper.selectMenuPermsByUserId(userId); List<String> perms = menuMapper.selectMenuPermsByUserId(userId);
Set<String> permsSet = new HashSet<>(); Set<String> permsSet = new HashSet<>();
for (String perm : perms) { for (String perm : perms) {
@ -94,11 +158,10 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* ID * ID
* *
* @param roleId ID * @param roleId ID
*
* @return * @return
*/ */
@Override @Override
public Set<String> selectMenuPermsByRoleId (Long roleId) { public Set<String> selectMenuPermsByRoleId(Long roleId) {
List<String> perms = menuMapper.selectMenuPermsByRoleId(roleId); List<String> perms = menuMapper.selectMenuPermsByRoleId(roleId);
Set<String> permsSet = new HashSet<>(); Set<String> permsSet = new HashSet<>();
for (String perm : perms) { for (String perm : perms) {
@ -113,11 +176,10 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* ID * ID
* *
* @param userId * @param userId
*
* @return * @return
*/ */
@Override @Override
public List<SysMenu> selectMenuTreeByUserId (Long userId) { public List<SysMenu> selectMenuTreeByUserId(Long userId) {
List<SysMenu> menus = null; List<SysMenu> menus = null;
if (SecurityUtils.isAdmin(userId)) { if (SecurityUtils.isAdmin(userId)) {
menus = menuMapper.selectMenuTreeAll(); menus = menuMapper.selectMenuTreeAll();
@ -131,11 +193,10 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* ID * ID
* *
* @param roleId ID * @param roleId ID
*
* @return * @return
*/ */
@Override @Override
public List<Long> selectMenuListByRoleId (Long roleId) { public List<Long> selectMenuListByRoleId(Long roleId) {
SysRole role = roleMapper.selectRoleById(roleId); SysRole role = roleMapper.selectRoleById(roleId);
return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly()); return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly());
} }
@ -144,11 +205,10 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* *
* *
* @param menus * @param menus
*
* @return * @return
*/ */
@Override @Override
public List<RouterVo> buildMenus (List<SysMenu> menus) { public List<RouterVo> buildMenus(List<SysMenu> menus) {
List<RouterVo> routers = new LinkedList<RouterVo>(); List<RouterVo> routers = new LinkedList<RouterVo>();
for (SysMenu menu : menus) { for (SysMenu menu : menus) {
RouterVo router = new RouterVo(); RouterVo router = new RouterVo();
@ -196,14 +256,13 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* *
* *
* @param menus * @param menus
*
* @return * @return
*/ */
@Override @Override
public List<SysMenu> buildMenuTree (List<SysMenu> menus) { public List<SysMenu> buildMenuTree(List<SysMenu> menus) {
List<SysMenu> returnList = new ArrayList<SysMenu>(); List<SysMenu> returnList = new ArrayList<SysMenu>();
List<Long> tempList = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList()); List<Long> tempList = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList());
for (Iterator<SysMenu> iterator = menus.iterator() ; iterator.hasNext() ; ) { for (Iterator<SysMenu> iterator = menus.iterator(); iterator.hasNext(); ) {
SysMenu menu = (SysMenu) iterator.next(); SysMenu menu = (SysMenu) iterator.next();
// 如果是顶级节点, 遍历该父节点的所有子节点 // 如果是顶级节点, 遍历该父节点的所有子节点
if (!tempList.contains(menu.getParentId())) { if (!tempList.contains(menu.getParentId())) {
@ -221,11 +280,10 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* *
* *
* @param menus * @param menus
*
* @return * @return
*/ */
@Override @Override
public List<TreeSelect> buildMenuTreeSelect (List<SysMenu> menus) { public List<TreeSelect> buildMenuTreeSelect(List<SysMenu> menus) {
List<SysMenu> menuTrees = buildMenuTree(menus); List<SysMenu> menuTrees = buildMenuTree(menus);
return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
} }
@ -234,11 +292,10 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* ID * ID
* *
* @param menuId ID * @param menuId ID
*
* @return * @return
*/ */
@Override @Override
public SysMenu selectMenuById (Long menuId) { public SysMenu selectMenuById(Long menuId) {
return menuMapper.selectMenuById(menuId); return menuMapper.selectMenuById(menuId);
} }
@ -246,11 +303,10 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* *
* *
* @param menuId ID * @param menuId ID
*
* @return * @return
*/ */
@Override @Override
public boolean hasChildByMenuId (Long menuId) { public boolean hasChildByMenuId(Long menuId) {
int result = menuMapper.hasChildByMenuId(menuId); int result = menuMapper.hasChildByMenuId(menuId);
return result > 0; return result > 0;
} }
@ -259,11 +315,10 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* 使 * 使
* *
* @param menuId ID * @param menuId ID
*
* @return * @return
*/ */
@Override @Override
public boolean checkMenuExistRole (Long menuId) { public boolean checkMenuExistRole(Long menuId) {
int result = roleMenuMapper.checkMenuExistRole(menuId); int result = roleMenuMapper.checkMenuExistRole(menuId);
return result > 0; return result > 0;
} }
@ -272,11 +327,10 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* *
* *
* @param menu * @param menu
*
* @return * @return
*/ */
@Override @Override
public int insertMenu (SysMenu menu) { public int insertMenu(SysMenu menu) {
return menuMapper.insertMenu(menu); return menuMapper.insertMenu(menu);
} }
@ -284,11 +338,10 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* *
* *
* @param menu * @param menu
*
* @return * @return
*/ */
@Override @Override
public int updateMenu (SysMenu menu) { public int updateMenu(SysMenu menu) {
return menuMapper.updateMenu(menu); return menuMapper.updateMenu(menu);
} }
@ -296,11 +349,10 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* *
* *
* @param menuId ID * @param menuId ID
*
* @return * @return
*/ */
@Override @Override
public int deleteMenuById (Long menuId) { public int deleteMenuById(Long menuId) {
return menuMapper.deleteMenuById(menuId); return menuMapper.deleteMenuById(menuId);
} }
@ -308,11 +360,10 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* *
* *
* @param menu * @param menu
*
* @return * @return
*/ */
@Override @Override
public boolean checkMenuNameUnique (SysMenu menu) { public boolean checkMenuNameUnique(SysMenu menu) {
Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId(); Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId();
SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId()); SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId());
if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) { if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) {
@ -325,10 +376,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* *
* *
* @param menu * @param menu
*
* @return * @return
*/ */
public String getRouteName (SysMenu menu) { public String getRouteName(SysMenu menu) {
String routerName = StringUtils.capitalize(menu.getPath()); String routerName = StringUtils.capitalize(menu.getPath());
// 非外链并且是一级目录(类型为目录) // 非外链并且是一级目录(类型为目录)
if (isMenuFrame(menu)) { if (isMenuFrame(menu)) {
@ -341,10 +391,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* *
* *
* @param menu * @param menu
*
* @return * @return
*/ */
public String getRouterPath (SysMenu menu) { public String getRouterPath(SysMenu menu) {
String routerPath = menu.getPath(); String routerPath = menu.getPath();
// 内链打开外网方式 // 内链打开外网方式
if (menu.getParentId().intValue() != 0 && isInnerLink(menu)) { if (menu.getParentId().intValue() != 0 && isInnerLink(menu)) {
@ -366,10 +415,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* *
* *
* @param menu * @param menu
*
* @return * @return
*/ */
public String getComponent (SysMenu menu) { public String getComponent(SysMenu menu) {
String component = UserConstants.LAYOUT; String component = UserConstants.LAYOUT;
if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu)) { if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu)) {
component = menu.getComponent(); component = menu.getComponent();
@ -385,10 +433,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* *
* *
* @param menu * @param menu
*
* @return * @return
*/ */
public boolean isMenuFrame (SysMenu menu) { public boolean isMenuFrame(SysMenu menu) {
return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType()) return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType())
&& menu.getIsFrame().equals(UserConstants.NO_FRAME); && menu.getIsFrame().equals(UserConstants.NO_FRAME);
} }
@ -397,10 +444,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* *
* *
* @param menu * @param menu
*
* @return * @return
*/ */
public boolean isInnerLink (SysMenu menu) { public boolean isInnerLink(SysMenu menu) {
return menu.getIsFrame().equals(UserConstants.NO_FRAME) && StringUtils.ishttp(menu.getPath()); return menu.getIsFrame().equals(UserConstants.NO_FRAME) && StringUtils.ishttp(menu.getPath());
} }
@ -408,10 +454,9 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* parent_view * parent_view
* *
* @param menu * @param menu
*
* @return * @return
*/ */
public boolean isParentView (SysMenu menu) { public boolean isParentView(SysMenu menu) {
return menu.getParentId().intValue() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType()); return menu.getParentId().intValue() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType());
} }
@ -420,12 +465,11 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* *
* @param list * @param list
* @param parentId ID * @param parentId ID
*
* @return String * @return String
*/ */
public List<SysMenu> getChildPerms (List<SysMenu> list, int parentId) { public List<SysMenu> getChildPerms(List<SysMenu> list, int parentId) {
List<SysMenu> returnList = new ArrayList<SysMenu>(); List<SysMenu> returnList = new ArrayList<SysMenu>();
for (Iterator<SysMenu> iterator = list.iterator() ; iterator.hasNext() ; ) { for (Iterator<SysMenu> iterator = list.iterator(); iterator.hasNext(); ) {
SysMenu t = (SysMenu) iterator.next(); SysMenu t = (SysMenu) iterator.next();
// 一、根据传入的某个父节点ID,遍历该父节点的所有子节点 // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点
if (t.getParentId() == parentId) { if (t.getParentId() == parentId) {
@ -442,7 +486,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* @param list * @param list
* @param t * @param t
*/ */
private void recursionFn (List<SysMenu> list, SysMenu t) { private void recursionFn(List<SysMenu> list, SysMenu t) {
// 得到子节点列表 // 得到子节点列表
List<SysMenu> childList = getChildList(list, t); List<SysMenu> childList = getChildList(list, t);
t.setChildren(childList); t.setChildren(childList);
@ -456,7 +500,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
/** /**
* *
*/ */
private List<SysMenu> getChildList (List<SysMenu> list, SysMenu t) { private List<SysMenu> getChildList(List<SysMenu> list, SysMenu t) {
List<SysMenu> tlist = new ArrayList<SysMenu>(); List<SysMenu> tlist = new ArrayList<SysMenu>();
Iterator<SysMenu> it = list.iterator(); Iterator<SysMenu> it = list.iterator();
while (it.hasNext()) { while (it.hasNext()) {
@ -471,7 +515,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
/** /**
* *
*/ */
private boolean hasChild (List<SysMenu> list, SysMenu t) { private boolean hasChild(List<SysMenu> list, SysMenu t) {
return getChildList(list, t).size() > 0; return getChildList(list, t).size() > 0;
} }
@ -480,7 +524,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
* *
* @return * @return
*/ */
public String innerLinkReplaceEach (String path) { public String innerLinkReplaceEach(String path) {
return StringUtils.replaceEach(path, new String[]{Constants.HTTP, Constants.HTTPS, Constants.WWW, ".", ":"}, return StringUtils.replaceEach(path, new String[]{Constants.HTTP, Constants.HTTPS, Constants.WWW, ".", ":"},
new String[]{"", "", "", "/", "/"}); new String[]{"", "", "", "/", "/"});
} }

View File

@ -186,6 +186,30 @@
where menu_name=#{menuName} and parent_id = #{parentId} limit 1 where menu_name=#{menuName} and parent_id = #{parentId} limit 1
</select> </select>
<select id="selectSysMenList" resultType="com.muyu.system.domain.SysMenu">
<include refid="selectMenuVo"/>
<where>
menu_id in(
<foreach collection="longs" separator="," item="id">
#{id}
</foreach>
)
</where>
order by parent_id,order_num
</select>
<select id="selectSysChdMenuList" resultType="com.muyu.system.domain.SysMenu">
<include refid="selectMenuVo"/>
<where>
parent_id in(
<foreach collection="longs" separator="," item="id">
#{id}
</foreach>
)
</where>
order by parent_id,order_num
</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>