package cn.iocoder.yudao.module.hrm.api.employee;
|
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.module.hrm.api.employee.dto.HrmEmployeeSimpleDTO;
|
import cn.iocoder.yudao.module.hrm.dal.dataobject.employee.HrmEmployeeDO;
|
import cn.iocoder.yudao.module.hrm.dal.mysql.employee.HrmEmployeeMapper;
|
import cn.iocoder.yudao.module.system.api.dept.DeptApi;
|
import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
|
import jakarta.annotation.Resource;
|
import org.springframework.stereotype.Service;
|
|
import java.util.Collection;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.Objects;
|
|
/**
|
* 员工档案 API 实现类
|
*
|
* @author 超级管理员
|
*/
|
@Service
|
public class HrmEmployeeApiImpl implements HrmEmployeeApi {
|
|
@Resource
|
private HrmEmployeeMapper employeeMapper;
|
@Resource
|
private DeptApi deptApi;
|
|
@Override
|
public HrmEmployeeSimpleDTO getEmployee(Long id) {
|
if (id == null) {
|
return null;
|
}
|
HrmEmployeeDO employee = employeeMapper.selectById(id);
|
if (employee == null) {
|
return null;
|
}
|
return build(employee, getDeptName(employee.getDeptId()));
|
}
|
|
@Override
|
public List<HrmEmployeeSimpleDTO> getEmployeeList(Collection<Long> ids) {
|
if (ids == null || ids.isEmpty()) {
|
return List.of();
|
}
|
List<HrmEmployeeDO> employees = employeeMapper.selectBatchIds(ids);
|
if (employees.isEmpty()) {
|
return List.of();
|
}
|
// 批量查部门,避免 N+1
|
List<Long> deptIds = employees.stream().map(HrmEmployeeDO::getDeptId)
|
.filter(Objects::nonNull).distinct().toList();
|
Map<Long, DeptRespDTO> deptMap = deptIds.isEmpty() ? Map.of() : deptApi.getDeptMap(deptIds);
|
return employees.stream()
|
.map(e -> {
|
DeptRespDTO dept = deptMap.get(e.getDeptId());
|
return build(e, dept == null ? null : dept.getName());
|
})
|
.toList();
|
}
|
|
@Override
|
public boolean validateEmployeeExists(Long id) {
|
return id != null && employeeMapper.selectById(id) != null;
|
}
|
|
private String getDeptName(Long deptId) {
|
if (deptId == null) {
|
return null;
|
}
|
DeptRespDTO dept = deptApi.getDept(deptId);
|
return dept == null ? null : dept.getName();
|
}
|
|
private static HrmEmployeeSimpleDTO build(HrmEmployeeDO employee, String deptName) {
|
HrmEmployeeSimpleDTO dto = BeanUtils.toBean(employee, HrmEmployeeSimpleDTO.class);
|
dto.setDeptName(deptName);
|
return dto;
|
}
|
|
}
|