| | |
| | | package com.whyc.service; |
| | | |
| | | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; |
| | | import com.baomidou.mybatisplus.extension.api.R; |
| | | 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; |
| | | |
| | | /** |
| | | * 角色-菜单 |
| | |
| | | return menus; |
| | | } |
| | | |
| | | public Response updateRoleMenu(int roleId,int[] menuIds){ |
| | | QueryWrapper<RoleMenu> queryWrapper = new QueryWrapper<RoleMenu>().eq("role_id",roleId); |
| | | mapper.delete(queryWrapper); |
| | | List<RoleMenu> roleMenus = new ArrayList<>(); |
| | | for (int menuId:menuIds) { |
| | | RoleMenu roleMenu = new RoleMenu(); |
| | | roleMenu.setRoleId(roleId); |
| | | roleMenu.setMenuId(menuId); |
| | | roleMenus.add(roleMenu); |
| | | } |
| | | if (mapper.insertBatchSomeColumn(roleMenus)==roleMenus.size()){ |
| | | return new Response().setMsg(1,"更新成功"); |
| | | }else { |
| | | return new Response().setMsg(0,"更新失败"); |
| | | } |
| | | } |
| | | |
| | | public List<Menu> getRoleMenu(Integer roleId){ |
| | | List<Menu> menus = menuMapper.selectList(null); |
| | | QueryWrapper<RoleMenu> queryWrapper = new QueryWrapper<>(); |
| | |
| | | } |
| | | } |
| | | } |
| | | 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()!=0){ |
| | | 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); |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | } |