74 lines
2.1 KiB
Java
74 lines
2.1 KiB
Java
package com.atguigu.utils;
|
||
|
||
|
||
import com.atguigu.spzx.model.entity.system.SysMenu;
|
||
import com.atguigu.spzx.model.vo.system.SysMenuVo;
|
||
import org.springframework.util.CollectionUtils;
|
||
|
||
import java.util.ArrayList;
|
||
import java.util.LinkedList;
|
||
import java.util.List;
|
||
|
||
|
||
public class MenuHelper {
|
||
/**
|
||
* 构建树型结构
|
||
*
|
||
* @param sysMenuList 系统菜单列表
|
||
* @return 菜单结构列表
|
||
*/
|
||
public static List<SysMenu> buildTree(List<SysMenu> sysMenuList) {
|
||
ArrayList<SysMenu> tress = new ArrayList<>();
|
||
// 把菜单数据进行遍历
|
||
sysMenuList.forEach(sysMenu -> {
|
||
if (sysMenu.getParentId() == 0) tress.add(getChildren(sysMenu, sysMenuList));
|
||
});
|
||
return tress;
|
||
}
|
||
|
||
/**
|
||
* 构建递归循环
|
||
*
|
||
* @param sysMenu 当前菜单对象
|
||
* @param sysMenuList 全部菜单列表
|
||
* @return 菜单
|
||
*/
|
||
private static SysMenu getChildren(SysMenu sysMenu, List<SysMenu> sysMenuList) {
|
||
// 遍历所有菜单数据,判断id和parentID对应关系
|
||
sysMenu.setChildren(new ArrayList<>());
|
||
|
||
sysMenuList.forEach(menu -> {
|
||
if (menu.getChildren() == null) menu.setChildren(new ArrayList<>());
|
||
if (sysMenu.getId().equals(menu.getParentId())) {
|
||
sysMenu.getChildren().add(getChildren(menu, sysMenuList));
|
||
}
|
||
});
|
||
|
||
return sysMenu;
|
||
}
|
||
|
||
|
||
/**
|
||
* 将List<SysMenu>对象转换成List<SysMenuVo>对象
|
||
*
|
||
* @param menus 全部菜单列表
|
||
* @return 系统菜单响应结果实体类列表
|
||
*/
|
||
public static List<SysMenuVo> buildMenus(List<SysMenu> menus) {
|
||
LinkedList<SysMenuVo> sysMenuVos = new LinkedList<>();
|
||
|
||
menus.forEach(menu -> {
|
||
SysMenuVo menuVo = new SysMenuVo();
|
||
menuVo.setTitle(menu.getTitle());
|
||
menuVo.setName(menu.getComponent());
|
||
|
||
List<SysMenu> children = menu.getChildren();
|
||
if (!CollectionUtils.isEmpty(children)) {
|
||
menuVo.setChildren(buildMenus(children));
|
||
}
|
||
sysMenuVos.add(menuVo);
|
||
});
|
||
return sysMenuVos;
|
||
}
|
||
}
|