| | |
| | | package com.mes.menu.service.impl; |
| | | |
| | | import cn.hutool.core.map.MapUtil; |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.core.toolkit.StringUtils; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.github.yulichang.wrapper.MPJLambdaWrapper; |
| | | import com.mes.common.utils.UserInfoUtils; |
| | | import com.mes.entity.request.GeneralRequest; |
| | | import com.mes.menu.entity.SysMenu; |
| | | import com.mes.menu.mapper.SysMenuMapper; |
| | | import com.mes.menu.service.SysMenuService; |
| | | import com.mes.role.entity.SysRoleMenu; |
| | | import com.mes.role.service.SysRoleMenuService; |
| | | import com.mes.userinfo.entity.SysUser; |
| | | import com.mes.userinfo.entity.SysUserRole; |
| | | import com.mes.userinfo.mapper.SysUserRoleMapper; |
| | | 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.Map; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | |
| | | @Autowired |
| | | SysUserService sysUserService; |
| | | |
| | | @Autowired |
| | | SysUserRoleMapper sysUserRoleMapper; |
| | | |
| | | @Autowired |
| | | SysRoleMenuService sysRoleMenuService; |
| | | |
| | | @Override |
| | | public List<SysMenu> getMenuTree() { |
| | | public SysMenu updateMenu(SysMenu menu) { |
| | | baseMapper.updateById(menu); |
| | | // 清除所有与该菜单相关的权限缓存 |
| | | sysUserService.clearUserAuthorityInfoByMenuId(menu.getId()); |
| | | return menu; |
| | | } |
| | | |
| | | @Override |
| | | public List<SysMenu> getMenuTree(GeneralRequest request) { |
| | | //todo:需要先获取用户的角色,角色下的菜单权限,拿到菜单id获取所有菜单 |
| | | List<SysMenu> menuList = this.baseMapper.selectList(null); |
| | | SysUser user = UserInfoUtils.get(); |
| | | MPJLambdaWrapper<SysUserRole> wrapper = new MPJLambdaWrapper<>(); |
| | | |
| | | wrapper.selectAll(SysMenu.class).distinct() |
| | | .leftJoin(SysUser.class, SysUser::getId, SysUserRole::getUserId) |
| | | .leftJoin(SysRoleMenu.class, SysRoleMenu::getRoleId, SysUserRole::getRoleId) |
| | | .leftJoin(SysMenu.class, SysMenu::getId, SysRoleMenu::getMenuId) |
| | | .eq(SysUser::getId, user.getId()) |
| | | .like(StringUtils.isNotBlank(request.getKey()), SysMenu::getMenuName, request.getKey()); |
| | | |
| | | List<SysMenu> menuList = sysUserRoleMapper.selectJoinList(SysMenu.class, wrapper); |
| | | return create(menuList); |
| | | } |
| | | |
| | | @Override |
| | | public List<String> getAuthorityInfo(String userName) { |
| | | log.info("获取用户信息,用户名为{}", userName); |
| | | SysUser sysUser = sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, userName)); |
| | | |
| | | public List<String> getAuthorityInfo() { |
| | | SysUser user = UserInfoUtils.get(); |
| | | log.info("获取用户信息,用户名为{}", user); |
| | | // 获取权限信息 |
| | | // ROLE_admin,ROLE_normal,sys:user:list,.... |
| | | return sysUserService.getUserAuthorityInfo(sysUser.getId()); |
| | | return sysUserService.getUserAuthorityInfo(user.getId()); |
| | | } |
| | | |
| | | @Override |
| | | public Map<Object, Object> nav() { |
| | | List<SysMenu> menuTree = getMenuTree(new GeneralRequest()); |
| | | List<String> authorityInfo = getAuthorityInfo(); |
| | | return MapUtil.builder().put("authoritys", authorityInfo) |
| | | .put("tree", menuTree).map(); |
| | | } |
| | | |
| | | @Override |
| | | public String deleteMenu(Long menuId) { |
| | | int count = this.count(new LambdaQueryWrapper<SysMenu>().eq(SysMenu::getParentId, menuId)); |
| | | if (count > 0) { |
| | | return "无法删除,请先删除子菜单"; |
| | | } |
| | | |
| | | // 清除所有与该菜单相关的权限缓存 |
| | | sysUserService.clearUserAuthorityInfoByMenuId(menuId); |
| | | |
| | | this.removeById(menuId); |
| | | |
| | | // 同步删除中间关联表 |
| | | sysRoleMenuService.remove(new LambdaQueryWrapper<SysRoleMenu>().eq(SysRoleMenu::getMenuId, menuId)); |
| | | return "删除成功"; |
| | | } |
| | | |
| | | @Override |
| | | public String batchDeleteMenu(List<Long> menuIds) { |
| | | menuIds.stream().forEach(e -> deleteMenu(e)); |
| | | return "批量删除成功"; |
| | | } |
| | | |
| | | |
| | |
| | | private List<SysMenu> getChildren(SysMenu menu, List<SysMenu> menus) { |
| | | List<SysMenu> res = menus.stream() |
| | | .filter(item -> item.getParentId().equals(menu.getId())) |
| | | .map(item -> { |
| | | item.setChildren(getChildren(item, menus)); |
| | | return item; |
| | | }).collect(Collectors.toList()); |
| | | .collect(Collectors.toList()); |
| | | log.info("菜单树:{}", JSONUtil.toJsonStr(res)); |
| | | return res; |
| | | } |
| | | |
| | | // |
| | | // @Autowired |
| | | // SysUserMapper sysUserMapper; |
| | | // |
| | | // @Override |
| | | // public List<SysMenuDto> getCurrentUserNav() { |
| | | // String username = (String) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); |
| | | // SysUser sysUser = sysUserService.listByUserNameName(username); |
| | | // |
| | | // List<Long> menuIds = sysUserMapper.getNavMenuIds(sysUser.getId()); |
| | | // List<SysMenu> menus = this.listByIds(menuIds); |
| | | // |
| | | // // 转树状结构 |
| | | // List<SysMenu> menuTree = buildTreeMenu(menus); |
| | | // |
| | | // // 实体转DTO |
| | | // return convert(menuTree); |
| | | // } |
| | | // |
| | | // @Override |
| | | // public List<SysMenu> tree() { |
| | | // // 获取所有菜单信息 |
| | | // List<SysMenu> sysMenus = this.list(new QueryWrapper<SysMenu>().orderByAsc("orderNum")); |
| | | // |
| | | // // 转成树状结构 |
| | | // return buildTreeMenu(sysMenus); |
| | | // } |
| | | // |
| | | // private List<SysMenuDto> convert(List<SysMenu> menuTree) { |
| | | // List<SysMenuDto> 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<SysMenu> buildTreeMenu(List<SysMenu> menus) { |
| | | // |
| | | // List<SysMenu> 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; |
| | | // } |
| | | |
| | | } |