package com.ycl.service.user.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ycl.dto.UmsMenuNode;
|
import com.ycl.entity.user.UmsMenu;
|
import com.ycl.entity.user.vo.UmsMenuVo;
|
import com.ycl.mapper.user.AdminMenuRelationMapper;
|
import com.ycl.mapper.user.UmsMenuMapper;
|
import com.ycl.service.user.UmsMenuService;
|
import org.springframework.beans.BeanUtils;
|
import org.springframework.stereotype.Service;
|
|
import javax.annotation.Resource;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Objects;
|
import java.util.stream.Collectors;
|
|
/**
|
* 后台菜单管理Service实现类
|
*/
|
@Service
|
public class UmsMenuServiceImpl extends ServiceImpl<UmsMenuMapper, UmsMenu> implements UmsMenuService {
|
|
@Resource
|
AdminMenuRelationMapper adminMenuRelationMapper;
|
@Resource
|
UmsMenuMapper umsMenuMapper;
|
|
@Override
|
public boolean create(UmsMenu umsMenu) {
|
umsMenu.setCreateTime(new Date());
|
updateLevel(umsMenu);
|
return save(umsMenu);
|
}
|
|
|
/**
|
* 修改菜单层级
|
*/
|
private void updateLevel(UmsMenu umsMenu) {
|
if (umsMenu.getParentId() == 0) {
|
//没有父菜单时为一级菜单
|
umsMenu.setLevel(0);
|
} else {
|
//有父菜单时选择根据父菜单level设置
|
UmsMenu parentMenu = getById(umsMenu.getParentId());
|
if (parentMenu != null) {
|
umsMenu.setLevel(parentMenu.getLevel() + 1);
|
} else {
|
umsMenu.setLevel(0);
|
}
|
}
|
}
|
|
@Override
|
public boolean update(Long id, UmsMenu umsMenu) {
|
umsMenu.setId(id);
|
updateLevel(umsMenu);
|
return updateById(umsMenu);
|
}
|
|
@Override
|
public Page<UmsMenu> list(Long parentId, Integer pageSize, Integer pageNum) {
|
Page<UmsMenu> page = new Page<>(pageNum, pageSize);
|
QueryWrapper<UmsMenu> wrapper = new QueryWrapper<>();
|
wrapper.lambda().eq(UmsMenu::getParentId, parentId)
|
.orderByDesc(UmsMenu::getSort);
|
return page(page, wrapper);
|
}
|
|
@Override
|
public List<UmsMenuNode> treeList() {
|
List<UmsMenu> menuList = list();
|
List<UmsMenuNode> result = menuList.stream()
|
.filter(menu -> menu.getParentId().equals(0L))
|
.map(menu -> covertMenuNode(menu, menuList)).collect(Collectors.toList());
|
return result;
|
}
|
|
@Override
|
public boolean updateHidden(Long id, Integer hidden) {
|
UmsMenu umsMenu = new UmsMenu();
|
umsMenu.setId(id);
|
umsMenu.setHidden(hidden);
|
return updateById(umsMenu);
|
}
|
|
@Override
|
public List<UmsMenuVo> ListTreeMyself(Long id) {
|
List<UmsMenuVo> fatherUmsMenuVoList = umsMenuMapper.adminMenuRelation(id);
|
List<UmsMenuVo> umsMenuVoList = fatherUmsMenuVoList.stream()
|
.filter(item -> item.getParentId() == 0L)
|
.peek(item -> item.setMenuVoArrayList(getChildren(item, fatherUmsMenuVoList)))
|
.collect(Collectors.toList());
|
return umsMenuVoList;
|
}
|
|
public List<UmsMenuVo> getChildren(UmsMenuVo root, List<UmsMenuVo> allMenus) {
|
return allMenus.stream()
|
.filter(menu -> Objects.equals(menu.getParentId(), root.getId()))
|
.peek(menu -> menu.setMenuVoArrayList(getChildren(menu, allMenus)))
|
.collect(Collectors.toList());
|
}
|
|
/**
|
* 将UmsMenu转化为UmsMenuNode并设置children属性
|
*/
|
private UmsMenuNode covertMenuNode(UmsMenu menu, List<UmsMenu> menuList) {
|
UmsMenuNode node = new UmsMenuNode();
|
BeanUtils.copyProperties(menu, node);
|
List<UmsMenuNode> children = menuList.stream()
|
.filter(subMenu -> subMenu.getParentId().equals(menu.getId()))
|
.map(subMenu -> covertMenuNode(subMenu, menuList)).collect(Collectors.toList());
|
node.setChildren(children);
|
return node;
|
}
|
}
|