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;
|
|
/**
|
* <p>
|
* 菜单表 服务实现类
|
* </p>
|
*
|
* @author zhoush
|
* @since 2024-04-11
|
*/
|
@Service
|
@Slf4j
|
public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements SysMenuService {
|
|
@Autowired
|
SysUserService sysUserService;
|
|
@Override
|
public List<SysMenu> getMenuTree() {
|
//todo:需要先获取用户的角色,角色下的菜单权限,拿到菜单id获取所有菜单
|
List<SysMenu> menuList = this.baseMapper.selectList(null);
|
return create(menuList);
|
}
|
|
@Override
|
public List<String> getAuthorityInfo(String userName) {
|
log.info("获取用户信息,用户名为{}", userName);
|
SysUser sysUser = sysUserService.getOne(new LambdaQueryWrapper<SysUser>().eq(SysUser::getUserName, userName));
|
|
// 获取权限信息
|
// ROLE_admin,ROLE_normal,sys:user:list,....
|
return sysUserService.getUserAuthorityInfo(sysUser.getId());
|
}
|
|
|
/**
|
* 将数据库中查询出来的list集合传入此方法即可获得排成树形结构的list集合
|
*
|
* @param lists
|
* @return
|
*/
|
public List<SysMenu> create(List<SysMenu> lists) {
|
List<SysMenu> 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<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());
|
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;
|
// }
|
|
}
|