package com.gk.hotwork.Service.ServiceImpl;
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.gk.hotwork.Domain.PermissionInfo;
|
import com.gk.hotwork.Domain.UserInfo;
|
import com.gk.hotwork.Domain.Vo.Menu;
|
import com.gk.hotwork.Mapper.PermissionInfoMapper;
|
import com.gk.hotwork.Service.PermissionService;
|
import com.gk.hotwork.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<PermissionInfoMapper, PermissionInfo> implements PermissionService {
|
@Autowired
|
private PermissionInfoMapper permissionInfoMapper;
|
@Autowired
|
private UserService userService;
|
|
@Override
|
public List<Menu> selectByUserId(String userId) {
|
List<Menu> menus = new ArrayList<>();
|
|
UserInfo userInfo = userService.getById(Integer.parseInt(userId));
|
if (null != userInfo && null != userInfo.getType()){
|
List<PermissionInfo> 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<Menu> 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<Menu> iterateMenuList = iterateMenus(permissionInfoList,permissionInfo.getId());
|
pmenu.setChildren(iterateMenuList);
|
menus.add(pmenu);
|
}
|
}
|
}
|
else {
|
permissionInfoList = permissionInfoMapper.selectByUserId(userId);
|
for (PermissionInfo permissionInfo : permissionInfoList){
|
if (permissionInfo.getParentid() == null) {
|
Menu pmenu = new Menu();
|
BeanUtils.copyProperties(permissionInfo,pmenu,Menu.class);
|
List<Menu> iterateMenuList = iterateMenus(permissionInfoList,permissionInfo.getId());
|
if (iterateMenuList.size() > 0) {
|
pmenu.setChildren(iterateMenuList);
|
menus.add(pmenu);
|
}
|
}
|
|
|
}
|
}
|
}
|
return menus;
|
}
|
|
private List<Menu> iterateMenus(List<PermissionInfo> permissionInfoList, Integer pid) {
|
List<Menu> result = new ArrayList<Menu>();
|
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<Menu> iterateMenu = iterateMenus(permissionInfoList,menuid);
|
pmenu.setChildren(iterateMenu);
|
result.add(pmenu);
|
}
|
}
|
return result;
|
}
|
|
private List<Menu> addMenuList(List<PermissionInfo> permissionInfoList) {
|
List<Menu> menuList = new ArrayList<Menu>();
|
//一级菜单
|
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<Menu> childList = new ArrayList<Menu>();
|
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<Menu> 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<Menu> secList = new ArrayList<Menu>();
|
childmenu.setChildren(secList);
|
|
Menu onemenu = new Menu();
|
BeanUtils.copyProperties(onePermission,onemenu,Menu.class);
|
List<Menu> childList = new ArrayList<Menu>();
|
childList.add(childmenu);
|
onemenu.setChildren(childList);
|
menuList.add(onemenu);
|
}
|
}
|
}
|
}
|
|
|
return menuList.stream().sorted(Comparator.comparing(Menu::getSortorder)).collect(Collectors.toList());
|
}
|
|
|
}
|