初版菜单搜索优化

master
李永杰 2024-04-21 10:55:16 +08:00
parent 1fb4c0f046
commit ee7e092210
4 changed files with 68 additions and 24 deletions

View File

@ -120,6 +120,14 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>

View File

@ -123,4 +123,11 @@ public interface SysMenuMapper {
* @return
*/
public SysMenu checkMenuNameUnique(@Param("menuName") String menuName, @Param("parentId") Long parentId);
/**
* ID
* @param parentId
* @return
*/
List<SysMenu> selectMenuByParentId(@Param("parentId") Long parentId);
}

View File

@ -57,39 +57,63 @@ public class SysMenuServiceImpl implements ISysMenuService {
*/
@Override
public List<SysMenu> selectMenuList(SysMenu menu, Long userId) {
int size = menuMapper.selectMenuList(new SysMenu()).size();
List<SysMenu> menuList = null;
String menuName = menu.getMenuName();
// 管理员显示所有菜单信息
if (SysUser.isAdmin(userId)) {
if(SysUser.isAdmin(userId)){
menuList = menuMapper.selectMenuList(menu);
} else {
menu.getParams().put("userId", userId);
menuList = menuMapper.selectMenuListByUserId(menu);
}
List<SysMenu> finalMenuList = menuList;
return menuList.stream()
.parallel()
.filter(sysMenu -> sysMenu.getParentId().equals(sysMenu.getMenuId()))
.map(first -> {
first.setChildren(getChildren(first.getMenuId(), finalMenuList).isEmpty() ? null :
getChildren(first.getMenuId(), finalMenuList));
return first;
})
.collect(Collectors.toList());
// 菜单对象数量与数据库中数量不相等
if (menuList.size() != size) {
List<SysMenu> sysMenuList = new ArrayList<>();
// 遍历获取子级、父级菜单
menuList.forEach(item -> {
sysMenuList.addAll(childrenMenu(item));
if (item.getParentId() != 0){
sysMenuList.addAll(parentMenu(item));
}
});
menuList.addAll(sysMenuList);
menuList = new ArrayList<>(new HashSet<>(menuList));
}
return menuList;
}
private List<SysMenu> getChildren(Long parentId, List<SysMenu> menus) {
List<SysMenu> collect = menus.stream()
.parallel()
.filter(sysMenu -> parentId.equals(sysMenu.getParentId()))
.map(second -> {
second.setChildren(getChildren(second.getMenuId(), menus).isEmpty() ? null
: getChildren(second.getMenuId(), menus));
return second;
})
.collect(Collectors.toList());
return collect;
/**
*
* @param menus
* @return
*/
public List<SysMenu> childrenMenu(SysMenu menus){
// 详细
// List<SysMenu> sysMenus = menuMapper.selectMenuByParentId(menus.getMenuId());
// List<SysMenu> childrenMenu = new ArrayList<>(sysMenus);
// if (sysMenus.size() > 0){
// for (SysMenu sysMenu : sysMenus) {
// childrenMenu(sysMenu);
// }
// }
// return childrenMenu;
List<SysMenu> sysMenus = menuMapper.selectMenuByParentId(menus.getMenuId());
return new ArrayList<>(sysMenus);
}
/**
*
* @param menu
* @return
*/
public List<SysMenu> parentMenu(SysMenu menu){
List<SysMenu> parentMenu = new ArrayList<>();
SysMenu sysMenu = menuMapper.selectMenuById(menu.getParentId());
parentMenu.add(sysMenu);
if (sysMenu.getParentId() != 0){
parentMenu.addAll(parentMenu(sysMenu));
}
return parentMenu;
}
/**

View File

@ -186,6 +186,11 @@
where menu_name=#{menuName} and parent_id = #{parentId} limit 1
</select>
<select id="selectMenuByParentId" resultType="com.muyu.system.common.domain.SysMenu">
<include refid="selectMenuVo"/>
where parent_id = #{parentId}
</select>
<update id="updateMenu" parameterType="com.muyu.system.common.domain.SysMenu">
update sys_menu
<set>