whyczh
2021-05-13 0e8d2a54766e2016345cea894c01e3bcee6adb92
角色菜单接口更新
2个文件已修改
95 ■■■■■ 已修改文件
src/main/java/com/whyc/pojo/Menu.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/service/RoleMenuService.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/whyc/pojo/Menu.java
@@ -24,7 +24,7 @@
    /**菜单的路径*/
    private String url;
    /**级别:1级,2级菜单...*/
    private String level;
    private Integer level;
    /**排序*/
    private Integer ord;
    private Integer menuId;
src/main/java/com/whyc/service/RoleMenuService.java
@@ -1,16 +1,21 @@
package com.whyc.service;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.google.common.collect.Sets;
import com.whyc.dto.Response;
import com.whyc.mapper.MenuMapper;
import com.whyc.mapper.RoleMenuMapper;
import com.whyc.pojo.Menu;
import com.whyc.pojo.RoleMenu;
import org.apache.commons.compress.utils.Lists;
import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
/**
 * 角色-菜单
@@ -46,9 +51,97 @@
                }
            }
        }
        menus = getTree(menus);
        return menus;
    }
    public List<Menu> getTree(List<Menu> list) {
        List<Menu> baseLists = new ArrayList<>();
        // 总菜单,出一级菜单,一级菜单没有父id
        for (Menu e: list) {
            if( e.getMenuId()==0 ){
                baseLists.add( e );
            }
        }
        // 遍历一级菜单
        for (Menu e: baseLists) {
            // 将子元素 set进一级菜单里面
            e.setSubMenus( getChild(e.getId(),list) );
        }
        return baseLists;
    }
    /**
     * 获取子节点
     * @param MenuId
     * @param Menus
     * @return
     */
    private List<Menu> getChild(Integer MenuId , List<Menu> Menus){
        List<Menu> childs = new ArrayList<>();
        for (Menu e: Menus) {
            if(e.getMenuId()!=null){
                if(e.getMenuId().equals( MenuId )){
                    // 子菜单的下级菜单
                    childs.add( e );
                }
            }
        }
        // 把子菜单的子菜单再循环一遍
        for (Menu e: childs) {
            // 继续添加子元素
            e.setSubMenus( getChild( e.getId() , Menus ) );
        }
        //停下来的条件,如果 没有子元素了,则停下来
        if( childs.size()==0 ){
            return null;
        }
        return childs;
    }
    public List<Menu> tree(int level){
        //非顶级菜单集合
        List<Menu> menuList = menuMapper.selectList(new QueryWrapper<Menu>().ne("menu_id",0));
        //顶级菜单
        List<Menu> topList = menuMapper.selectList(new QueryWrapper<Menu>().eq("menu_id",0));
        if (ObjectUtils.isNotNull(menuList)){
            //过滤条件set,指定set预期大小为非顶级菜单集合的size
            Set<Integer> set = Sets.newHashSetWithExpectedSize(menuList.size());
            //循环顶级菜单插入子菜单
            topList.forEach(menu-> getSubMenu(menu,menuList,level,set));
            return topList;
        }
        return null;
    }
    public void getSubMenu(Menu menu,List<Menu> menuList,int level,Set<Integer> set){
        //过滤树的深度等级
        if (menu.getLevel() < level || level==0){
            List<Menu> subList = Lists.newArrayList();
            menuList.stream()
                    //判断是否循环过当前对象
                    .filter(c->!set.contains(c.getId()))
                    //判断是否存在父子关系
                    .filter(c-> NumberUtils.compare(c.getMenuId(),menu.getId())==0)
                    //set集合大小不超过menuList的大小
                    .filter(c-> set.size() <= menuList.size())
                    .forEach(c->{
                        set.add(c.getId());
                        getSubMenu(c,menuList,level,set);
                        subList.add(c);
                    });
            menu.setSubMenus(subList);
        }
    }
    public void updateRoleMenu(int roleId,List<Menu> menus){
        QueryWrapper<RoleMenu> queryWrapper = new QueryWrapper<RoleMenu>().eq("role_id",roleId);
        mapper.delete(queryWrapper);