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 getEmployeeList(Collection ids) { if (ids == null || ids.isEmpty()) { return List.of(); } List employees = employeeMapper.selectBatchIds(ids); if (employees.isEmpty()) { return List.of(); } // 批量查部门,避免 N+1 List deptIds = employees.stream().map(HrmEmployeeDO::getDeptId) .filter(Objects::nonNull).distinct().toList(); Map 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; } }