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;
/**
*
* 菜单表 服务实现类
*
*
* @author zhoush
* @since 2024-04-11
*/
@Service
@Slf4j
public class SysMenuServiceImpl extends ServiceImpl implements SysMenuService {
@Autowired
SysUserService sysUserService;
@Override
public List getMenuTree() {
//todo:需要先获取用户的角色,角色下的菜单权限,拿到菜单id获取所有菜单
List menuList = this.baseMapper.selectList(null);
return create(menuList);
}
@Override
public List getAuthorityInfo(String userName) {
log.info("获取用户信息,用户名为{}", userName);
SysUser sysUser = sysUserService.getOne(new LambdaQueryWrapper().eq(SysUser::getUserName, userName));
// 获取权限信息
// ROLE_admin,ROLE_normal,sys:user:list,....
return sysUserService.getUserAuthorityInfo(sysUser.getId());
}
/**
* 将数据库中查询出来的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()))
.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 getCurrentUserNav() {
// String username = (String) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
// SysUser sysUser = sysUserService.listByUserNameName(username);
//
// List menuIds = sysUserMapper.getNavMenuIds(sysUser.getId());
// List menus = this.listByIds(menuIds);
//
// // 转树状结构
// List menuTree = buildTreeMenu(menus);
//
// // 实体转DTO
// return convert(menuTree);
// }
//
// @Override
// public List tree() {
// // 获取所有菜单信息
// List sysMenus = this.list(new QueryWrapper().orderByAsc("orderNum"));
//
// // 转成树状结构
// return buildTreeMenu(sysMenus);
// }
//
// private List convert(List menuTree) {
// List 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 buildTreeMenu(List menus) {
//
// List 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;
// }
}