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; /** *

* 菜单表 服务实现类 *

* * @author zhoush * @since 2024-04-11 */ @Service @Slf4j public class SysMenuServiceImpl extends ServiceImpl implements SysMenuService { @Autowired SysUserService sysUserService; @Autowired SysUserRoleMapper sysUserRoleMapper; @Autowired SysRoleMenuService sysRoleMenuService; @Override public SysMenu updateMenu(SysMenu menu) { baseMapper.updateById(menu); // 清除所有与该菜单相关的权限缓存 sysUserService.clearUserAuthorityInfoByMenuId(menu.getId()); return menu; } @Override public List getMenuTree(GeneralRequest request) { //todo:需要先获取用户的角色,角色下的菜单权限,拿到菜单id获取所有菜单 SysUser user = UserInfoUtils.get(); MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); wrapper.selectAll(SysMenu.class).distinct() .innerJoin(SysUser.class, SysUser::getId, SysUserRole::getUserId) .innerJoin(SysRoleMenu.class, SysRoleMenu::getRoleId, SysUserRole::getRoleId) .innerJoin(SysMenu.class, SysMenu::getId, SysRoleMenu::getMenuId) .eq(SysUser::getId, user.getId()) .like(StringUtils.isNotBlank(request.getKey()), SysMenu::getMenuName, request.getKey()); // List menuList = sysUserRoleMapper.selectJoinList(SysMenu.class, wrapper); log.info("userinfos:{}",menuList); return create(menuList); } @Override public List getAuthorityInfo() { SysUser user = UserInfoUtils.get(); log.info("获取用户信息,用户名为{}", user); // 获取权限信息 // ROLE_admin,ROLE_normal,sys:user:list,.... return sysUserService.getUserAuthorityInfo(user.getId()); } @Override public Map nav() { List menuTree = getMenuTree(new GeneralRequest()); List authorityInfo = getAuthorityInfo(); return MapUtil.builder().put("authoritys", authorityInfo) .put("tree", menuTree).map(); } @Override public String deleteMenu(Long menuId) { int count = this.count(new LambdaQueryWrapper().eq(SysMenu::getParentId, menuId)); if (count > 0) { return "无法删除,请先删除子菜单"; } // 清除所有与该菜单相关的权限缓存 sysUserService.clearUserAuthorityInfoByMenuId(menuId); this.removeById(menuId); // 同步删除中间关联表 sysRoleMenuService.remove(new LambdaQueryWrapper().eq(SysRoleMenu::getMenuId, menuId)); return "删除成功"; } @Override public String batchDeleteMenu(List menuIds) { menuIds.stream().forEach(e -> deleteMenu(e)); return "批量删除成功"; } /** * 将数据库中查询出来的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())) .collect(Collectors.toList()); log.info("菜单树:{}", JSONUtil.toJsonStr(res)); return res; } }