| | |
| | | |
| | | @Resource |
| | | private SafetyOrgMapper safetyOrgMapper; |
| | | @Resource |
| | | private SafetyRefResolver refResolver; |
| | | |
| | | public Long createOrg(SafetyOrgSaveReqVO reqVO) { |
| | | reqVO.setId(null); |
| | | validateParent(reqVO.getParentId(), null); |
| | | SafetyOrgDO org = BeanUtils.toBean(reqVO, SafetyOrgDO.class); |
| | | org.setParentId(reqVO.getParentId() == null ? 0L : reqVO.getParentId()); |
| | | applyLeader(org, reqVO.getLeaderId()); |
| | | safetyOrgMapper.insert(org); |
| | | return org.getId(); |
| | | } |
| | |
| | | validateParent(reqVO.getParentId(), reqVO.getId()); |
| | | SafetyOrgDO org = BeanUtils.toBean(reqVO, SafetyOrgDO.class); |
| | | org.setParentId(reqVO.getParentId() == null ? 0L : reqVO.getParentId()); |
| | | applyLeader(org, reqVO.getLeaderId()); |
| | | safetyOrgMapper.updateById(org); |
| | | } |
| | | |
| | | /** |
| | | * 负责人:从员工档案带出姓名与电话并落快照 |
| | | */ |
| | | private void applyLeader(SafetyOrgDO org, Long leaderId) { |
| | | org.setLeaderId(leaderId); |
| | | if (leaderId == null) { |
| | | org.setLeaderName(""); |
| | | return; |
| | | } |
| | | var employee = refResolver.requireEmployee(leaderId, SAFETY_EMPLOYEE_REQUIRED); |
| | | org.setLeaderName(employee.getName()); |
| | | org.setLeaderPhone(employee.getPhone()); |
| | | } |
| | | |
| | | public void deleteOrg(Long id) { |
| | |
| | | } |
| | | |
| | | /** |
| | | * 取负责人最新档案(供单条查询回填用) |
| | | */ |
| | | public cn.iocoder.yudao.module.hrm.api.employee.dto.HrmEmployeeSimpleDTO getLeader(Long leaderId) { |
| | | return refResolver.findEmployee(leaderId); |
| | | } |
| | | |
| | | /** |
| | | * 查询组织树 |
| | | */ |
| | | public List<SafetyOrgRespVO> getOrgTree() { |
| | | List<SafetyOrgDO> all = safetyOrgMapper.selectListOrdered(); |
| | | List<SafetyOrgRespVO> nodes = BeanUtils.toBean(all, SafetyOrgRespVO.class); |
| | | // 负责人用员工档案最新姓名覆盖快照,员工改名/调岗后树也同步 |
| | | var employeeMap = refResolver.employeeMap( |
| | | all.stream().map(SafetyOrgDO::getLeaderId).toList()); |
| | | nodes.forEach(node -> { |
| | | var employee = employeeMap.get(node.getLeaderId()); |
| | | if (employee != null) { |
| | | node.setLeaderName(employee.getName()); |
| | | } |
| | | }); |
| | | Map<Long, List<SafetyOrgRespVO>> grouped = nodes.stream() |
| | | .collect(Collectors.groupingBy(SafetyOrgRespVO::getParentId, Collectors.toList())); |
| | | nodes.forEach(node -> node.setChildren(grouped.getOrDefault(node.getId(), new ArrayList<>()))); |