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