package com.doumee.biz.system.impl; 
 | 
  
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.doumee.biz.system.SystemDepartmentBiz; 
 | 
import com.doumee.core.exception.BusinessException; 
 | 
import com.doumee.core.constants.ResponseStatus; 
 | 
import com.doumee.dao.system.SystemUserJoinMapper; 
 | 
import com.doumee.dao.system.model.SystemDepartment; 
 | 
import com.doumee.dao.system.model.SystemDepartmentUser; 
 | 
import com.doumee.dao.system.model.SystemUser; 
 | 
import com.doumee.dao.system.vo.SystemDepartmentListVO; 
 | 
import com.doumee.service.aware.DepartmentDataPermissionAware; 
 | 
import com.doumee.service.system.SystemDepartmentService; 
 | 
import com.doumee.service.system.SystemDepartmentUserService; 
 | 
import com.github.yulichang.wrapper.MPJLambdaWrapper; 
 | 
import org.springframework.beans.BeanUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
import org.springframework.util.CollectionUtils; 
 | 
  
 | 
import java.util.Date; 
 | 
import java.util.List; 
 | 
import java.util.Objects; 
 | 
import java.util.Optional; 
 | 
import java.util.stream.Collectors; 
 | 
  
 | 
@Service 
 | 
public class SystemDepartmentBizImpl implements SystemDepartmentBiz { 
 | 
  
 | 
    @Autowired 
 | 
    private SystemDepartmentService systemDepartmentService; 
 | 
  
 | 
    @Autowired 
 | 
    private SystemDepartmentUserService systemDepartmentUserService; 
 | 
  
 | 
    @Autowired 
 | 
    private DepartmentDataPermissionAware departmentDataPermissionAware; 
 | 
  
 | 
    @Autowired 
 | 
    private SystemUserJoinMapper systemUserJoinMapper; 
 | 
  
 | 
    @Override 
 | 
    public Integer create(SystemDepartment department) { 
 | 
        // 验证部门编码 
 | 
        if (Objects.nonNull(department.getParentId())){ 
 | 
            SystemDepartment systemDepartment = systemDepartmentService.findById(department.getParentId()); 
 | 
            if (systemDepartment == null) { 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "上级部门不存在"); 
 | 
            } 
 | 
        } 
 | 
        SystemDepartment query = new SystemDepartment(); 
 | 
        query.setName(department.getName()); 
 | 
        query.setDeleted(false); 
 | 
        SystemDepartment one = systemDepartmentService.findOne(query); 
 | 
        if (one != null){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "部门名称已经存在"); 
 | 
        } 
 | 
  
 | 
        SystemDepartment insert = new SystemDepartment(); 
 | 
        insert.setParentId(department.getParentId()); 
 | 
        insert.setCode(department.getCode()); 
 | 
        insert.setName(department.getName()); 
 | 
        insert.setPhone(department.getPhone()); 
 | 
        insert.setEmail(department.getEmail()); 
 | 
        insert.setCreateUser(department.getCreateUser()); 
 | 
        insert.setUpdateUser(department.getCreateUser()); 
 | 
        return systemDepartmentService.create(insert); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateById(SystemDepartment department) { 
 | 
  
 | 
        if (Objects.isNull(department.getParentId())){ 
 | 
            SystemDepartment update = new SystemDepartment(); 
 | 
            update.setId(department.getId()); 
 | 
            update.setName(department.getName()); 
 | 
            update.setUpdateUser(department.getUpdateUser()); 
 | 
            update.setUpdateTime(new Date()); 
 | 
            systemDepartmentService.updateById(update); 
 | 
            return; 
 | 
        } 
 | 
  
 | 
        SystemDepartment systemDepartment = Optional.ofNullable(department) 
 | 
                                                    .map(s -> systemDepartmentService.findById(s.getParentId())) 
 | 
                                                    .orElseThrow(()->new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"上级部门不存在")); 
 | 
        SystemDepartment update = new SystemDepartment(); 
 | 
        update.setId(department.getId()); 
 | 
        update.setParentId(department.getParentId()); 
 | 
        update.setName(department.getName()); 
 | 
        update.setUpdateUser(department.getUpdateUser()); 
 | 
        update.setUpdateTime(new Date()); 
 | 
        systemDepartmentService.updateById(update); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<SystemDepartmentListVO> findTree() { 
 | 
        return departmentDataPermissionAware.execute(); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public SystemDepartmentListVO findTreeUser(Integer parentId) { 
 | 
  
 | 
        SystemDepartment parent = null; 
 | 
        if (Objects.nonNull(parentId)){ 
 | 
            parent = systemDepartmentService.findById(parentId); 
 | 
        }else { 
 | 
            QueryWrapper<SystemDepartment> wrapper = new QueryWrapper<>(); 
 | 
            wrapper.lambda().isNull(SystemDepartment::getParentId).last("limit 1"); 
 | 
            parent = systemDepartmentService.findOne(wrapper); 
 | 
        } 
 | 
        if (Objects.isNull(parent)){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"部门不存在"); 
 | 
        } 
 | 
        QueryWrapper<SystemDepartment> wrapper = new QueryWrapper<>(); 
 | 
        wrapper.lambda().eq(SystemDepartment::getParentId,parent.getId()); 
 | 
        List<SystemDepartment> list = systemDepartmentService.findList(wrapper); 
 | 
  
 | 
        MPJLambdaWrapper<SystemUser> userWrapper = new MPJLambdaWrapper<>(); 
 | 
        userWrapper.selectAll(SystemUser.class) 
 | 
                .rightJoin(SystemDepartmentUser.class,SystemDepartmentUser::getUserId,SystemUser::getId) 
 | 
                .eq(SystemDepartmentUser::getDepartmentId,parentId); 
 | 
        List<SystemUser> systemUsers = systemUserJoinMapper.selectJoinList(SystemUser.class, userWrapper); 
 | 
  
 | 
        SystemDepartmentListVO systemDepartmentListVO = new SystemDepartmentListVO(); 
 | 
        BeanUtils.copyProperties(parent,systemDepartmentListVO); 
 | 
        systemDepartmentListVO.setUserList(systemUsers); 
 | 
        if (!CollectionUtils.isEmpty(list)){ 
 | 
            List<SystemDepartmentListVO> collect = list.stream().map(s -> { 
 | 
                SystemDepartmentListVO children = new SystemDepartmentListVO(); 
 | 
                BeanUtils.copyProperties(s, children); 
 | 
                return children; 
 | 
            }).collect(Collectors.toList()); 
 | 
            systemDepartmentListVO.setChildren(collect); 
 | 
        } 
 | 
  
 | 
  
 | 
        return systemDepartmentListVO; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteById(Integer id) { 
 | 
        List<Integer> ids = systemDepartmentService.findChildren(id); 
 | 
        if (!CollectionUtils.isEmpty(ids)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "存在子节点。请删除子节点"); 
 | 
        } 
 | 
        SystemDepartmentUser systemDepartmentUser = new SystemDepartmentUser(); 
 | 
        systemDepartmentUser.setDepartmentId(id); 
 | 
        systemDepartmentUser.setDeleted(false); 
 | 
        List<SystemDepartmentUser> list = systemDepartmentUserService.findList(systemDepartmentUser); 
 | 
  
 | 
        if (!CollectionUtils.isEmpty(list)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EXISTS.getCode(), "部门存在人员,请处理人员"); 
 | 
        } 
 | 
  
 | 
        ids.add(id); 
 | 
        systemDepartmentService.deleteByIdInBatch(ids); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    @Transactional 
 | 
    public void deleteByIdInBatch(List<Integer> ids) { 
 | 
        if (CollectionUtils.isEmpty(ids)) { 
 | 
            return; 
 | 
        } 
 | 
        for (Integer id : ids) { 
 | 
            this.deleteById(id); 
 | 
        } 
 | 
    } 
 | 
} 
 |