package com.yuanchu.mom.service.impl; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.yuanchu.mom.dto.DepartmentDto; import com.yuanchu.mom.mapper.DepartmentMapper; import com.yuanchu.mom.pojo.Department; import com.yuanchu.mom.service.DepartmentService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** *

* 部门明细 服务实现类 *

* * @author 江苏鵷雏网络科技有限公司 * @since 2024-04-15 04:01:48 */ @Service @AllArgsConstructor @Transactional(rollbackFor = Exception.class) @Slf4j public class DepartmentServiceImpl extends ServiceImpl implements DepartmentService { DepartmentMapper departmentMapper; //添加部门 @Override public int addDepartment(Department department) { departmentMapper.insert(department); return department.getId(); } //获取部门树 @Override public List selectDepartment() { List departments = departmentMapper.selectDepartment(); //获取父节点 List collect = departments.stream().filter(m -> m.getFatherId() == null).peek( (m) -> m.setChildren(getChildren(m, departments)) ).collect(Collectors.toList()); return collect; } /** * 递归查询子节点 * @param root 根节点 * @param all 所有节点 * @return 根节点信息 */ private List getChildren(DepartmentDto root, List all) { return all.stream().filter(m -> Objects.equals(m.getFatherId(), root.getId())).peek( (m) -> m.setChildren(getChildren(m, all)) ).collect(Collectors.toList()); } //删除部门 @Override public boolean delDepartment(Integer id) { //判断是否有子类,直到没有为止 List department = getDepartment(id); return removeBatchByIds(department); } //判断是否有子类,直到没有为止 public List getDepartment(Integer id) { List list = new ArrayList<>(); Department depart = baseMapper.selectById(id); list.add(depart); List departments = baseMapper.selectList(Wrappers.lambdaQuery().eq(Department::getFatherId, id)); if (ObjectUtils.isNotEmpty(departments)) { list.addAll(departments); for (Department department : departments) { list.addAll(getDepartment(department.getId())); } } return list; } }