package com.gkhy.safePlatform.account.utils;
|
|
import com.gkhy.safePlatform.account.enums.ProjectStatusEnum;
|
import com.gkhy.safePlatform.account.model.dto.resp.MenuMetaRespDTO;
|
import com.gkhy.safePlatform.account.model.dto.resp.MenuRespDTO;
|
import com.gkhy.safePlatform.account.entity.user.MenuInfoDO;
|
import com.gkhy.safePlatform.account.entity.user.RoleInfoDO;
|
import com.gkhy.safePlatform.account.model.dto.resp.ProjectRespDTO;
|
import org.springframework.beans.BeanUtils;
|
|
import java.util.ArrayList;
|
import java.util.Comparator;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
public class MenuUtil {
|
|
|
|
|
private static List<MenuRespDTO> getChildren(MenuRespDTO parentMenu, List<MenuRespDTO> allChildren) {
|
List<MenuRespDTO> children = new ArrayList<>();
|
List<Long> menuSuperior;
|
if (allChildren.size() > 0) {
|
for (MenuRespDTO nav : allChildren) {
|
assert nav.getParentId() != null;
|
if (parentMenu.getId().equals(nav.getParentId())) {
|
List<Long> parentMenuSuperior = parentMenu.getMenuSuperior();
|
menuSuperior = new ArrayList<>(parentMenuSuperior);
|
menuSuperior.add(parentMenu.getId());
|
nav.setMenuSuperior(menuSuperior);
|
children.add(nav);
|
}
|
}
|
}
|
|
if (children.size() > 0) {
|
// 排序
|
children.sort(Comparator.comparingInt(MenuRespDTO::getPriority));
|
for (MenuRespDTO nav : children) {
|
List<MenuRespDTO> subMenu = getChildren(nav, allChildren);
|
nav.setChildren(subMenu);
|
}
|
}
|
return children;
|
}
|
|
|
/**
|
* @Description: 生成菜单树
|
*/
|
public static List<MenuRespDTO> generateMenuTree(List<MenuInfoDO> menuList, Long projectId) {
|
|
|
// 区分父子节点
|
List<MenuRespDTO> rootMenu = new ArrayList<>();
|
List<MenuRespDTO> publicMenu = new ArrayList<>();
|
List<MenuRespDTO> childMenu = new ArrayList<>();
|
for (MenuInfoDO menuDo : menuList) {
|
// 先转换成dto返回对象
|
MenuRespDTO menu = convertMenuDO2DTO(menuDo);
|
// 公共菜单 直接放入根菜单
|
if (menu.getPublic()) {
|
menu.setMenuSuperior(new ArrayList<>());
|
publicMenu.add(menu);
|
}
|
// 没有父菜单
|
else if (menu.getParentId() == null &&
|
menu.getProject() != null &&
|
menu.getProject().getProjectId().equals(projectId)) {
|
//前端需要的一个数据结构
|
menu.setMenuSuperior(new ArrayList<>());
|
rootMenu.add(menu);
|
} else {
|
childMenu.add(menu);
|
}
|
}
|
|
if (projectId == null) {
|
// 只返回公共目录和他的子目录
|
rootMenu = publicMenu;
|
}else{
|
// 所有目录
|
rootMenu.addAll(publicMenu);
|
}
|
|
|
// 遍历父节点
|
if (rootMenu.size() > 0) {
|
rootMenu.sort(Comparator.comparingInt(MenuRespDTO::getPriority));
|
for (MenuRespDTO menu : rootMenu) {
|
// 当前父节点的子节点
|
List<MenuRespDTO> children = getChildren(menu, childMenu);
|
menu.setChildren(children);
|
}
|
}
|
|
return rootMenu;
|
}
|
|
|
|
public static List<MenuInfoDO> getUserMenuFromAllMenu(List<MenuInfoDO> allMenu , String roleCode) {
|
List<MenuInfoDO> userMenu = new ArrayList<>();
|
for (MenuInfoDO menu : allMenu) {
|
//当前菜单的所有编码
|
List<String> roleCodes = menu.getRoles().stream().map(RoleInfoDO::getCode).collect(Collectors.toList());
|
// 公共页面 || 有角色页面
|
if (menu.getPublicEnable() || roleCodes.contains(roleCode)) {
|
userMenu.add(menu);
|
}
|
}
|
return userMenu;
|
}
|
|
|
// public static List<MenuRespDTO> generatePublicTree(List<MenuInfoDO> allMenu){
|
// List<MenuRespDTO> publicMenu = new ArrayList<>();
|
// List<MenuRespDTO> children = new ArrayList<>();
|
// for (MenuInfoDO menuDo : allMenu) {
|
// MenuRespDTO menu = convertMenuDO2DTO(menuDo);
|
// if (menu.getPublic()) {
|
// menu.setMenuSuperior(new ArrayList<>());
|
// publicMenu.add(menu);
|
// }else{
|
// children.add(menu);
|
// }
|
// }
|
// publicMenu.sort(Comparator.comparingInt(MenuRespDTO::getPriority));
|
// if (publicMenu.size() > 0) {
|
// // 排序
|
// publicMenu.sort(Comparator.comparingInt(MenuRespDTO::getPriority));
|
// for (MenuRespDTO nav : publicMenu) {
|
// List<MenuRespDTO> subMenu = getChildren(nav, children);
|
// nav.setChildren(subMenu);
|
// }
|
// }
|
//
|
// return null;
|
// }
|
|
public static MenuRespDTO convertMenuDO2DTO(MenuInfoDO menuInfoDO) {
|
|
MenuRespDTO menuRespDTO = new MenuRespDTO();
|
menuRespDTO.setId(menuInfoDO.getId());
|
menuRespDTO.setName(menuInfoDO.getName());
|
menuRespDTO.setPath(menuInfoDO.getPath());
|
menuRespDTO.setPriority((menuInfoDO.getPriority()));
|
menuRespDTO.setDescription(menuInfoDO.getDescription());
|
menuRespDTO.setStatus(menuInfoDO.getStatus());
|
menuRespDTO.setParentId(menuInfoDO.getParentId());
|
menuRespDTO.setRedirect(menuInfoDO.getRedirect());
|
menuRespDTO.setComponent(menuInfoDO.getComponent());
|
menuRespDTO.setPublic(menuInfoDO.getPublicEnable());
|
if (menuInfoDO.getProject() != null) {
|
ProjectRespDTO projectRespDTO = new ProjectRespDTO();
|
projectRespDTO.setProjectId(menuInfoDO.getProject().getId());
|
projectRespDTO.setProjectCode(menuInfoDO.getProject().getCode());
|
projectRespDTO.setProjectName(menuInfoDO.getProject().getName());
|
projectRespDTO.setStatus(menuInfoDO.getProject().getStatus());
|
ProjectStatusEnum statusEnum = ProjectStatusEnum.parse(menuInfoDO.getProject().getStatus());
|
assert statusEnum != null;
|
projectRespDTO.setStatusDesc(statusEnum.getValue());
|
|
menuRespDTO.setProject(projectRespDTO);
|
}
|
|
|
|
//projectId
|
if (menuInfoDO.getProject() != null) {
|
menuRespDTO.setProjectId(menuInfoDO.getProject().getId());
|
}
|
|
// meta
|
MenuMetaRespDTO menuMetaRespDTO = new MenuMetaRespDTO();
|
menuMetaRespDTO.setTitle(menuInfoDO.getTitle());
|
menuMetaRespDTO.setIsLink(menuInfoDO.getLinkEnable());
|
menuMetaRespDTO.setIsHide(menuInfoDO.getHideEnable());
|
menuMetaRespDTO.setIsKeepAlive(menuInfoDO.getKeepAliveEnable());
|
menuMetaRespDTO.setIsAffix(menuInfoDO.getAffixEnable());
|
menuMetaRespDTO.setIsIframe(menuInfoDO.getIframeEnable());
|
menuMetaRespDTO.setIcon(menuInfoDO.getIcon());
|
menuMetaRespDTO.setRoles(menuInfoDO.getRoles().stream().map(RoleInfoDO::getCode).collect(Collectors.toList()));
|
menuRespDTO.setMeta(menuMetaRespDTO);
|
return menuRespDTO;
|
|
}
|
}
|