package com.mes.menu.service.impl; import cn.hutool.json.JSONUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.mes.menu.entity.SysMenu; import com.mes.menu.mapper.SysMenuMapper; import com.mes.menu.service.SysMenuService; import com.mes.userinfo.entity.SysUser; import com.mes.userinfo.service.SysUserService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.stream.Collectors; /** *

* 菜单表 服务实现类 *

* * @author zhoush * @since 2024-04-11 */ @Service @Slf4j public class SysMenuServiceImpl extends ServiceImpl implements SysMenuService { @Autowired SysUserService sysUserService; @Override public List getMenuTree() { //todo:需要先获取用户的角色,角色下的菜单权限,拿到菜单id获取所有菜单 List menuList = this.baseMapper.selectList(null); return create(menuList); } @Override public List getAuthorityInfo(String userName) { log.info("获取用户信息,用户名为{}", userName); SysUser sysUser = sysUserService.getOne(new LambdaQueryWrapper().eq(SysUser::getUserName, userName)); // 获取权限信息 // ROLE_admin,ROLE_normal,sys:user:list,.... return sysUserService.getUserAuthorityInfo(sysUser.getId()); } /** * 将数据库中查询出来的list集合传入此方法即可获得排成树形结构的list集合 * * @param lists * @return */ public List create(List lists) { List deptTreeList = lists.stream() .filter(item -> item.getParentId() == 0) .map(item -> { item.setChildren(getChildren(item, lists)); return item; }).collect(Collectors.toList()); return deptTreeList; } /** * 此方法将被递归调用 * * @param menu * @param menus * @return */ private List getChildren(SysMenu menu, List menus) { List res = menus.stream() .filter(item -> item.getParentId().equals(menu.getId())) .map(item -> { item.setChildren(getChildren(item, menus)); return item; }).collect(Collectors.toList()); log.info("菜单树:{}", JSONUtil.toJsonStr(res)); return res; } // // @Autowired // SysUserMapper sysUserMapper; // // @Override // public List getCurrentUserNav() { // String username = (String) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); // SysUser sysUser = sysUserService.listByUserNameName(username); // // List menuIds = sysUserMapper.getNavMenuIds(sysUser.getId()); // List menus = this.listByIds(menuIds); // // // 转树状结构 // List menuTree = buildTreeMenu(menus); // // // 实体转DTO // return convert(menuTree); // } // // @Override // public List tree() { // // 获取所有菜单信息 // List sysMenus = this.list(new QueryWrapper().orderByAsc("orderNum")); // // // 转成树状结构 // return buildTreeMenu(sysMenus); // } // // private List convert(List menuTree) { // List menuDtos = new ArrayList<>(); // // menuTree.forEach(m -> { // SysMenuDto dto = new SysMenuDto(); // // dto.setId(m.getId()); // dto.setName(m.getPerms()); // dto.setTitle(m.getName()); // dto.setComponent(m.getComponent()); // dto.setPath(m.getPath()); // // if (m.getChildren().size() > 0) { // // // 子节点调用当前方法进行再次转换 // dto.setChildren(convert(m.getChildren())); // } // // menuDtos.add(dto); // }); // // return menuDtos; // } // // private List buildTreeMenu(List menus) { // // List finalMenus = new ArrayList<>(); // // // 先各自寻找到各自的孩子 // for (SysMenu menu : menus) { // // for (SysMenu e : menus) { // if (menu.getId() == e.getParentId()) { // menu.getChildren().add(e); // } // } // // // 提取出父节点 // if (menu.getParentId() == 0L) { // finalMenus.add(menu); // } // } // // System.out.println(JSONUtil.toJsonStr(finalMenus)); // return finalMenus; // } }