SysDepartmentServiceImpl.java 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /*
  2. * 爱组搭 http://aizuda.com 低代码组件化开发平台
  3. * ------------------------------------------
  4. * 受知识产权保护,请勿删除版权申明
  5. */
  6. package com.aizuda.boot.system.service.impl;
  7. import com.aizuda.core.api.ApiAssert;
  8. import com.aizuda.service.service.BaseServiceImpl;
  9. import com.aizuda.boot.system.entity.SysDepartment;
  10. import com.aizuda.boot.system.entity.vo.SysDepartmentVO;
  11. import com.aizuda.boot.system.mapper.SysDepartmentMapper;
  12. import com.aizuda.boot.system.service.ISysDepartmentService;
  13. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  14. import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
  15. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  16. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  17. import org.springframework.stereotype.Service;
  18. import java.util.Collection;
  19. import java.util.List;
  20. import java.util.Objects;
  21. import java.util.stream.Collectors;
  22. /**
  23. * 部门 服务实现类
  24. *
  25. * @author 青苗
  26. * @since 2021-11-07
  27. */
  28. @Service
  29. public class SysDepartmentServiceImpl extends BaseServiceImpl<SysDepartmentMapper, SysDepartment> implements ISysDepartmentService {
  30. @Override
  31. public Page<SysDepartment> page(Page<SysDepartment> page, SysDepartment sysDepartment) {
  32. LambdaQueryWrapper<SysDepartment> lqw = Wrappers.lambdaQuery(sysDepartment);
  33. return super.page(page, lqw);
  34. }
  35. @Override
  36. public boolean updateById(SysDepartment sysDepartment) {
  37. ApiAssert.isEmpty(sysDepartment.getId(), "主键不存在无法更新");
  38. List<Long> ids = baseMapper.selectIdsRecursive(sysDepartment.getId());
  39. ApiAssert.fail(CollectionUtils.isNotEmpty(ids) && ids.contains(sysDepartment.getPid()),
  40. "父分类不能为子分类,请重新选择父分类");
  41. if (null == sysDepartment.getPid()) {
  42. // 未设置父ID设置为0
  43. sysDepartment.setPid(0L);
  44. }
  45. return super.updateById(sysDepartment);
  46. }
  47. @Override
  48. public List<SysDepartmentVO> listTree(SysDepartment sysDepartment) {
  49. List<SysDepartment> sysDepartmentList = super.list(Wrappers.lambdaQuery(sysDepartment));
  50. if (CollectionUtils.isEmpty(sysDepartmentList)) {
  51. return null;
  52. }
  53. return sysDepartmentList.stream().filter(e -> Objects.equals(0L, e.getPid())).map(e -> {
  54. SysDepartmentVO vo = e.convert(SysDepartmentVO.class);
  55. vo.setChildren(this.getChild(vo.getId(), vo.getName(), sysDepartmentList));
  56. return vo;
  57. }).collect(Collectors.toList());
  58. }
  59. /**
  60. * 获取子节点
  61. */
  62. protected List<SysDepartmentVO> getChild(Long id, String parentName, List<SysDepartment> sysDepartmentList) {
  63. // 遍历所有节点,将所有菜单的父id与传过来的根节点的id比较
  64. List<SysDepartment> childList = sysDepartmentList.stream().filter(e -> Objects.equals(id, e.getPid()))
  65. .collect(Collectors.toList());
  66. if (childList.isEmpty()) {
  67. // 没有子节点,返回一个空 List(递归退出)
  68. return null;
  69. }
  70. // 递归
  71. return childList.stream().map(e -> {
  72. SysDepartmentVO vo = e.convert(SysDepartmentVO.class);
  73. vo.setParentName(parentName);
  74. vo.setChildren(this.getChild(vo.getId(), vo.getName(), sysDepartmentList));
  75. return vo;
  76. }).collect(Collectors.toList());
  77. }
  78. @Override
  79. public boolean removeByIds(Collection<?> list) {
  80. this.checkExists(Wrappers.<SysDepartment>lambdaQuery().select(SysDepartment::getId)
  81. .in(SysDepartment::getPid, list), "存在子类不允许删除");
  82. return super.removeByIds(list);
  83. }
  84. }