123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- package com.fdkankan.manage.service.impl;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
- import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
- import com.fdkankan.common.request.RequestBase;
- import com.fdkankan.common.response.PageInfo;
- import com.fdkankan.manage.entity.SysMenu;
- import com.fdkankan.manage.entity.SysRoleMenu;
- import com.fdkankan.manage.entity.SysUser;
- import com.fdkankan.manage.mapper.ISysMenuMapper;
- import com.fdkankan.manage.service.ISysMenuService;
- import com.fdkankan.manage.service.ISysRoleMenuService;
- import com.fdkankan.manage.service.ISysUserService;
- import com.fdkankan.manage.vo.response.SysMenuVo;
- import org.springframework.beans.BeanUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.stream.Collectors;
- /**
- * <p>
- * 服务实现类
- * </p>
- *
- * @author
- * @since 2022-06-09
- */
- @Service
- public class SysMenuServiceImpl extends ServiceImpl<ISysMenuMapper, SysMenu> implements ISysMenuService {
- @Autowired
- ISysRoleMenuService roleMenuService;
- @Autowired
- ISysUserService userService;
- @Override
- public List<SysMenu> getListByUserId(Object loginId) {
- return getBaseMapper().getListByUserId(loginId);
- }
- @Override
- public PageInfo pageList(RequestBase param) {
- LambdaQueryWrapper<SysMenu> wrapper = new LambdaQueryWrapper<>();
- wrapper.isNull(SysMenu::getParentId);
- wrapper.orderByAsc(SysMenu::getSort);
- Page<SysMenu> page = this.page(new Page<>(param.getPageNum(),param.getPageSize()), wrapper);
- // List<SysMenuVo> voList = getByParentId(null,page.getRecords(),false,null);
- List<SysMenuVo> allVos = setTreeMenuVo(false,null);
- List<Long> ids = page.getRecords().parallelStream().map(SysMenu::getId).collect(Collectors.toList());
- List<SysMenuVo> voList = allVos.parallelStream().filter(vo -> ids.contains(vo.getId())).collect(Collectors.toList());
- Page<SysMenuVo> resultPage = new Page<>(page.getCurrent(),page.getSize());
- resultPage.setRecords(voList);
- resultPage.setTotal(page.getTotal());
- return PageInfo.PageInfo(resultPage);
- }
- @Override
- public List<SysMenuVo> allShowList() {
- return setTreeMenuVo(true,null);
- }
- @Override
- public List<SysMenuVo> getByUserId(Long userId) {
- SysUser user = userService.getById(userId);
- List<SysMenu> menuList = this.getListByUserId(userId);
- List<Long> menuIds = menuList.parallelStream().map(SysMenu::getId).collect(Collectors.toList());
- menuList.forEach(sysMenu -> setMenuIds(menuIds,sysMenu));
- return getByRoleId(menuIds,user.getRoleId());
- }
- private void setMenuIds( List<Long> menuIds ,SysMenu sysMenu){
- if(sysMenu.getParentId()!= null && !menuIds.contains(sysMenu.getParentId())) {
- menuIds.add(sysMenu.getParentId());
- SysMenu menu = this.getById(sysMenu.getParentId());
- this.setMenuIds(menuIds,menu);
- }
- }
- @Override
- public List<SysMenuVo> getByRoleId(List<Long> menuIds ,Long roleId) {
- if(menuIds == null){
- List<SysRoleMenu> roleMenus = roleMenuService.getByRoleId(roleId);
- menuIds = roleMenus.parallelStream().map(SysRoleMenu::getMenuId).collect(Collectors.toList());
- }
- return setTreeMenuVo(true,menuIds);
- }
- //递归设置menuTree
- private List<SysMenuVo> getByParentId(Long parentId, List<SysMenu> list, boolean show ,List<Long> menuIds){
- if(list == null){
- LambdaQueryWrapper<SysMenu> wrapper = new LambdaQueryWrapper<>();
- if(show){
- wrapper.eq(SysMenu::getIsShow,1);
- }
- if(parentId == null){
- wrapper.isNull(SysMenu::getParentId);
- }else {
- wrapper.eq(SysMenu::getParentId,parentId);
- }
- if(menuIds != null){
- wrapper.in(SysMenu::getId,menuIds);
- }
- list = this.list(wrapper);
- }
- List<SysMenuVo> sysMenuVos = new ArrayList<>();
- if(list.size() <=0){
- return sysMenuVos;
- }
- for (SysMenu record : list) {
- SysMenuVo vo = new SysMenuVo();
- BeanUtils.copyProperties(record,vo);
- sysMenuVos.add(vo);
- List<SysMenuVo> children = getByParentId(record.getId(),null,show,menuIds);
- vo.setChildren(children);
- }
- return sysMenuVos;
- }
- //查询到全部list ,根据parentId组装树形结构
- private List<SysMenuVo> setTreeMenuVo( boolean show ,List<Long> menuIds){
- LambdaQueryWrapper<SysMenu> wrapper = new LambdaQueryWrapper<>();
- if(show){
- wrapper.eq(SysMenu::getIsShow,1);
- }
- if(menuIds != null){
- wrapper.in(SysMenu::getId,menuIds);
- }
- List<SysMenu> list = this.list(wrapper);
- List<SysMenuVo> voList = new ArrayList<>();
- HashMap<Long,SysMenuVo> voMap = new HashMap<>();
- for (SysMenu sysMenu : list) {
- SysMenuVo menuVo = new SysMenuVo();
- BeanUtils.copyProperties(sysMenu,menuVo);
- voMap.put(sysMenu.getId(),menuVo);
- }
- for (SysMenu sysMenu : list) {
- if(sysMenu.getParentId() !=null){
- SysMenuVo menuVo = voMap.get(sysMenu.getId());
- List<SysMenuVo> children = voMap.get(sysMenu.getParentId()).getChildren();
- children.add(menuVo);
- }else {
- voList.add(voMap.get(sysMenu.getId()));
- }
- }
- return voList;
- }
- }
|