package com.example.springboot.service.impl; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.example.springboot.entity.vo.MenuListVo; import com.example.springboot.mapper.MenuListMapper; import com.example.springboot.mapper.RoleMenuListMapper; import com.example.springboot.security.util.SecurityUtil; import com.example.springboot.service.MenuListService; import com.example.springboot.service.RoleService; import com.example.springboot.entity.MenuList; import com.example.springboot.entity.Role; import com.example.springboot.entity.RoleMenuList; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @Service @Slf4j public class MenuListServiceImpl extends ServiceImpl implements MenuListService { @Autowired private RoleService roleService; @Autowired private RoleMenuListMapper roleMenuListDao; @Override public IPage selectPage(MenuListVo menuListVO) { return lambdaQuery() .like(StrUtil.isNotBlank(menuListVO.getName()), MenuList::getName, menuListVO.getName()) .eq(null != menuListVO.getState(), MenuList::getState, menuListVO.getState()) .between(null != menuListVO.getStartTime() && null != menuListVO.getEndTime(), MenuList::getCreateTime, menuListVO.getStartTime(), menuListVO.getEndTime()) .orderByAsc(MenuList::getParentId).last(",create_time desc") .page(new Page<>(menuListVO.getPageNum(), menuListVO.getPageSize())); } @Override public List selectList(Long roleId) { List roles = roleService.selectRoles(roleId == null ? SecurityUtil.getCurrentUser().getRoleId() : roleId, true); List ids = roles.stream().map(Role::getId).collect(Collectors.toList()); List roleMenuLists = roleMenuListDao.selectList(new QueryWrapper().lambda() .in(RoleMenuList::getRoleId, ids)); List collect = roleMenuLists.stream().map(RoleMenuList::getMenuListId).collect(Collectors.toList()); if (CollectionUtil.isEmpty(collect)) return new ArrayList<>(); List menuLists = lambdaQuery() .or(menuListLambdaQueryWrapper -> menuListLambdaQueryWrapper.isNull(MenuList::getParentId).or().eq(MenuList::getParentId, "")) .in(MenuList::getId, collect) .list(); for (MenuList menuList : menuLists) { List list = selectByParentId(menuList.getId(), collect); menuList.setMenuLists(list); } return menuLists; } @Override public List selectByParentId(Long parentId, List ids) { List list = lambdaQuery().eq(MenuList::getParentId, parentId).in(MenuList::getId, ids).list(); if (CollectionUtil.isEmpty(list)) return null; for (MenuList menuList : list) { List menuLists = selectByParentId(menuList.getId(), ids); menuList.setMenuLists(menuLists); } return list; } }