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;
}
}