ZengTao
2024-04-29 91e4ba507f9806c975a4273154d79f1a43b836c4
hangzhoumesParent/common/springsecurity/src/main/java/com/mes/menu/service/impl/SysMenuServiceImpl.java
@@ -1,18 +1,28 @@
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;
/**
@@ -30,21 +40,75 @@
    @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 "批量删除成功";
    }
@@ -74,87 +138,9 @@
    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;
//    }
}