package cn.iocoder.yudao.module.hrm.service.employee; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.hrm.controller.admin.employee.vo.HrmEmployeeImportExcelVO; import cn.iocoder.yudao.module.hrm.controller.admin.employee.vo.HrmEmployeeImportReqVO; import cn.iocoder.yudao.module.hrm.controller.admin.employee.vo.HrmEmployeeImportRespVO; import cn.iocoder.yudao.module.hrm.controller.admin.employee.vo.HrmEmployeePageReqVO; import cn.iocoder.yudao.module.hrm.controller.admin.employee.vo.HrmEmployeeRespVO; import cn.iocoder.yudao.module.hrm.controller.admin.employee.vo.HrmEmployeeSaveReqVO; import cn.iocoder.yudao.module.hrm.controller.admin.employee.vo.HrmEmployeeSimpleRespVO; import cn.iocoder.yudao.module.hrm.dal.dataobject.employee.HrmEmployeeDO; import jakarta.validation.Valid; import java.util.Collection; import java.util.List; /** * 员工信息 Service 接口 * * @author 超级管理员 */ public interface HrmEmployeeService { /** * 创建员工 * * @param createReqVO 创建信息 * @return 员工ID */ Long createEmployee(@Valid HrmEmployeeSaveReqVO createReqVO); /** * 更新员工 * * @param updateReqVO 更新信息 */ void updateEmployee(@Valid HrmEmployeeSaveReqVO updateReqVO); /** * 删除员工 * * @param id 员工ID */ void deleteEmployee(Long id); /** * 获得员工 * * @param id 员工ID * @return 员工 */ HrmEmployeeDO getEmployee(Long id); /** * 获得员工详情(含部门名称、岗位名称) * * @param id 员工ID * @return 员工详情 */ HrmEmployeeRespVO getEmployeeDetail(Long id); /** * 校验员工是否存在 * * @param id 员工ID * @return 员工 */ HrmEmployeeDO validateEmployee(Long id); /** * 获得员工分页 * * @param pageReqVO 分页查询 * @return 员工分页 */ PageResult getEmployeePage(HrmEmployeePageReqVO pageReqVO); /** * 获得员工列表 * * @param ids 员工ID列表 * @return 员工列表 */ List getEmployeeList(Collection ids); /** * 获得指定状态的员工列表(返回 DO) * *

注意:不能把 null 传给 {@link #getEmployeeList(Collection)}, * MyBatis-Plus 的 selectByIds(null) 会抛 "The expression 'coll' evaluated to a null value"。 * * @param employeeStatus 员工状态,为 null 时查询全部 * @return 员工列表 */ List getEmployeeListByStatus(Integer employeeStatus); /** * 调岗生效:把员工档案的部门/岗位同步为目标部门/目标岗位 * * @param employeeId 员工编号(hrm_employee.id) * @param targetDeptId 目标部门编号,为 null 时不改 * @param targetPostId 目标岗位编号,为 null 时不改 */ void syncEmployeeTransfer(Long employeeId, Long targetDeptId, Long targetPostId); /** * 离职生效:把员工档案状态置为「离职」 * * @param systemUserId 系统用户编号(hrm_employee.user_id,即 system_users.id) * @param leaveDate 离职日期,为 null 时取当天 */ void syncEmployeeResignation(Long systemUserId, java.time.LocalDate leaveDate); /** * 获得指定状态的员工简单列表 * * @param employeeStatus 员工状态,为 null 时查询全部 * @return 员工简单列表 */ List getEmployeeSimpleList(Integer employeeStatus); /** * 根据系统用户ID获取员工 * * @param userId 系统用户ID * @return 员工 */ HrmEmployeeDO getEmployeeByUserId(Long userId); /** 根据员工姓名获取员工 */ HrmEmployeeDO getEmployeeByName(String name); /** * 按姓名模糊查询员工列表(列表页姓名搜索用) * * @param name 姓名关键字 * @return 员工列表 */ List getEmployeeListByNameLike(String name); /** 根据员工姓名获取所有同名员工 */ List getEmployeeListByName(String name); /** * 导入员工列表 * * @param importEmployees 员工导入列表 * @param importReqVO 导入请求 * @return 导入结果 */ HrmEmployeeImportRespVO importEmployeeList(List importEmployees, HrmEmployeeImportReqVO importReqVO); /** * 员工转正:仅「劳动合同」可转正(劳务合同不可),状态 试用 -> 在职,记录转正日期 * * @param id 员工ID */ void regularizeEmployee(Long id); /** * 获得待转正提醒列表:试用中、且当前为劳动合同、试用期在 days 天内到期的员工 * * @param days 提前天数 * @return 员工列表 */ List getRegularizeReminderList(Integer days); }