| package com.doumee.biz.system.impl; | 
|   | 
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | 
| import com.doumee.biz.system.SystemDepartmentBiz; | 
| import com.doumee.core.constants.ResponseStatus; | 
| import com.doumee.core.exception.BusinessException; | 
| 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.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 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) { | 
|         SystemDepartment systemDepartment = Optional.ofNullable(department) | 
|                                                     .map(s -> systemDepartmentService.findById(s.getParentId())) | 
|                                                     .orElseThrow(()->new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"上级部门不存在")); | 
|         SystemDepartment update = new SystemDepartment(); | 
|         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); | 
|         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(), "存在子节点。请删除子节点"); | 
|         } | 
|         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); | 
|         } | 
|     } | 
| } |