package com.gk.firework.Service.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.gk.firework.Domain.PermissionInfo; import com.gk.firework.Domain.UserInfo; import com.gk.firework.Domain.Vo.Menu; import com.gk.firework.Domain.Vo.SortData; import com.gk.firework.Mapper.PermissionInfoMapper; import com.gk.firework.Service.PermissionService; import com.gk.firework.Service.UserService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; @Service("PermissionService") public class PermissionServiceImpl extends ServiceImpl implements PermissionService { @Autowired private PermissionInfoMapper permissionInfoMapper; @Autowired private UserService userService; @Override public List selectByUserId(String userId) { List menus = new ArrayList<>(); UserInfo userInfo = userService.getById(Integer.parseInt(userId)); if (null != userInfo && null != userInfo.getType()){ List permissionInfoList = permissionInfoMapper.selectAll(); if (userInfo.getType() == 1){ //返回所有菜单 for (PermissionInfo permissionInfo : permissionInfoList){ //一级菜单 if (null == permissionInfo.getParentid()){ Menu pmenu = new Menu(); BeanUtils.copyProperties(permissionInfo,pmenu,Menu.class); List iterateMenuList = iterateMenus(permissionInfoList,permissionInfo.getId()); pmenu.setChildren(iterateMenuList); menus.add(pmenu); } } }else if (userInfo.getType() == 2){ //排除系统管理 for (PermissionInfo permissionInfo : permissionInfoList){ //一级菜单 if (null == permissionInfo.getParentid() && !permissionInfo.getTitle().equals("权限管理")){ Menu pmenu = new Menu(); BeanUtils.copyProperties(permissionInfo,pmenu,Menu.class); List iterateMenuList = iterateMenus(permissionInfoList,permissionInfo.getId()); pmenu.setChildren(iterateMenuList); menus.add(pmenu); } } }else { permissionInfoList = permissionInfoMapper.selectByUserId(userId); menus = addMenuList(permissionInfoList); // for (PermissionInfo permissionInfo : permissionInfoList){ // Menu pmenu = new Menu(); // BeanUtils.copyProperties(permissionInfo,pmenu,Menu.class); // List iterateMenuList = iterateMenus(permissionInfoList,permissionInfo.getId()); // if (iterateMenuList.size() > 0) { // pmenu.setChildren(iterateMenuList); // menus.add(pmenu); // } // } } } return menus; } private List iterateMenus(List permissionInfoList, Integer pid) { List result = new ArrayList(); for (PermissionInfo resource : permissionInfoList) { Integer menuid = resource.getId();//获取菜单的id Integer parentid = resource.getParentid();//获取菜单的父id if(null != parentid && (parentid.equals(pid))){ Menu pmenu = new Menu(); BeanUtils.copyProperties(resource,pmenu,Menu.class); List iterateMenu = iterateMenus(permissionInfoList,menuid); pmenu.setChildren(iterateMenu); result.add(pmenu); } } return result; } private List addMenuList(List permissionInfoList) { List menuList = new ArrayList(); //一级菜单 for (PermissionInfo permissionInfo : permissionInfoList) { if (permissionInfo.getType() == 1 && permissionInfo.getLevel() == 1 && permissionInfo.getStatus() == 1){ Menu menu = new Menu(); BeanUtils.copyProperties(permissionInfo,menu,Menu.class); List childList = new ArrayList(); menu.setChildren(childList); menuList.add(menu); } } //二级菜单 for (PermissionInfo permissionInfo : permissionInfoList) { if (permissionInfo.getType() == 1 && permissionInfo.getLevel() == 2 && permissionInfo.getStatus() == 1){ boolean isfound = false; for (Menu menu : menuList){ if (menu.getId().equals(permissionInfo.getParentid())){ Menu pmenu = new Menu(); BeanUtils.copyProperties(permissionInfo,pmenu,Menu.class); List secList = iterateMenus(permissionInfoList,permissionInfo.getId()); pmenu.setChildren(secList); menu.getChildren().add(pmenu); isfound = true; break; } } if (!isfound){ PermissionInfo onePermission = this.getById(permissionInfo.getParentid()); if (onePermission != null) { Menu childmenu = new Menu(); BeanUtils.copyProperties(permissionInfo,childmenu,Menu.class); List secList = new ArrayList(); childmenu.setChildren(secList); Menu onemenu = new Menu(); BeanUtils.copyProperties(onePermission,onemenu,Menu.class); List childList = new ArrayList(); childList.add(childmenu); onemenu.setChildren(childList); menuList.add(onemenu); } } } } return menuList.stream().sorted(Comparator.comparing(Menu::getSortorder)).collect(Collectors.toList()); } }