郑永安
2023-06-19 f65443d8abeaedc9d102324565e8368e7c9d90c8
src/main/java/com/gk/firework/Service/ServiceImpl/PermissionServiceImpl.java
对比新文件
@@ -0,0 +1,142 @@
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<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);
                menus = addMenuList(permissionInfoList);
//                for (PermissionInfo permissionInfo : permissionInfoList){
//                    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());
    }
}