package com.flow.service.impl; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.flow.common.core.exception.BaseException; import com.flow.common.mybatis.constant.SqlConstant; import com.flow.common.mybatis.service.impl.BaseServiceImpl; import com.flow.dao.DeptDao; import com.flow.entity.Dept; import com.flow.entity.User; import com.flow.mapstruct.DeptMapper; import com.flow.model.DeptQuery; import com.flow.service.DeptService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Comparator; import java.util.List; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; @Service public class DeptServiceImpl extends BaseServiceImpl implements DeptService { @Autowired private DeptDao deptDao; @Autowired private DeptMapper deptMapper; @Override public List getList(DeptQuery deptQuery) { return deptDao.getList(deptQuery); } @Override public List search(DeptQuery deptQuery) { Dept dept = deptMapper.toEntity(deptQuery); return deptDao.lambdaQueryChain() .setEntity(dept) .list(); } @Override public List getOptions(Set deptIds) { return deptDao.lambdaQueryChain() .in(Dept::getId, deptIds) .list(); } @Override public List getTree(DeptQuery deptQuery) { List list = this.getList(deptQuery); //构建部门树 return list.stream() .filter(m -> m.getPid() == 0) .sorted(Comparator.comparingInt(Dept::getSort)) .peek(m -> m.setChildren(this.getChildNode(m, list))) .collect(Collectors.toList()); } private List getChildNode(Dept root, List allListTree) { List collect = allListTree.stream() .filter((treeEntity) -> treeEntity.getPid().equals(root.getId())) .sorted(Comparator.comparingInt(Dept::getSort)) .peek((treeEntity) -> treeEntity.setChildren(getChildNode(treeEntity, allListTree))) .collect(Collectors.toList()); if(CollectionUtils.isEmpty(collect)){ return null; } return collect; } @Override public List getChild(Long pid) { return deptDao.lambdaQueryChain() .eq(Dept::getPid, pid) .list(); } @Transactional(rollbackFor = Exception.class) @Override public Dept create(Dept dept) { Optional optional = deptDao.lambdaQueryChain() .eq(Dept::getPid, dept.getPid()) .eq(Dept::getName, dept.getName()) .last(SqlConstant.LIMIT1) .oneOpt(); if (optional.isPresent()) { throw new BaseException("部门名称已存在"); } deptDao.insert(dept); return dept; } @Transactional(rollbackFor = Exception.class) @Override public Dept update(Dept dept) { deptDao.updateById(dept); List list = deptDao.lambdaQueryChain() .select(Dept::getId) .eq(Dept::getPid, dept.getPid()) .eq(Dept::getName, dept.getName()) .last(SqlConstant.LIMIT2) .list(); if (list.size() > 1) { throw new BaseException("部门名称已存在"); } return dept; } @Transactional(rollbackFor = Exception.class) @Override public void delete(Set ids) { deptDao.deleteBatchIds(ids); } @Override public User getLeader(String id) { return deptDao.getLeader(id); } @Override public List getLeader(List ids) { return deptDao.getLeaders(ids); } @Override public List getUsers(String id) { return deptDao.getUsers(id); } @Override public List getUsers(List ids) { return deptDao.getUsersByIds(ids); } @Override public List getRoleUsers(List ids,List roleIds) { return deptDao.getRoleUsers(ids,roleIds); } }