package cn.iocoder.yudao.module.hrm.dal.mysql.employee;
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.hutool.core.util.StrUtil;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
import cn.iocoder.yudao.module.hrm.controller.admin.employee.vo.HrmEmployeePageReqVO;
|
import cn.iocoder.yudao.module.hrm.dal.dataobject.employee.HrmEmployeeDO;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import org.apache.ibatis.annotations.Mapper;
|
|
import java.time.LocalDate;
|
import java.util.Collection;
|
import java.util.Collections;
|
import java.util.List;
|
import java.util.stream.Collectors;
|
|
/**
|
* 员工信息 Mapper
|
*
|
* @author 超级管理员
|
*/
|
@Mapper
|
public interface HrmEmployeeMapper extends BaseMapperX<HrmEmployeeDO> {
|
|
default HrmEmployeeDO selectByPhone(String phone) {
|
return selectOne(HrmEmployeeDO::getPhone, phone);
|
}
|
|
default HrmEmployeeDO selectByName(String name) {
|
return selectOne(HrmEmployeeDO::getName, name);
|
}
|
|
default List<HrmEmployeeDO> selectListByName(String name) {
|
return selectList(HrmEmployeeDO::getName, name);
|
}
|
|
default HrmEmployeeDO selectByEmployeeNo(String employeeNo) {
|
return selectOne(HrmEmployeeDO::getEmployeeNo, employeeNo);
|
}
|
|
default HrmEmployeeDO selectByUserId(Long userId) {
|
return selectOne(HrmEmployeeDO::getUserId, userId);
|
}
|
|
default List<HrmEmployeeDO> selectByDeptId(Long deptId) {
|
return selectList(HrmEmployeeDO::getDeptId, deptId);
|
}
|
|
/**
|
* 按部门集合(含下级部门)查询员工
|
*/
|
default List<HrmEmployeeDO> selectListByDeptIds(Collection<Long> deptIds) {
|
return selectList(new LambdaQueryWrapperX<HrmEmployeeDO>()
|
.in(HrmEmployeeDO::getDeptId, deptIds)
|
.orderByAsc(HrmEmployeeDO::getName));
|
}
|
|
default List<HrmEmployeeDO> selectByEmployeeStatus(Integer employeeStatus) {
|
return selectList(HrmEmployeeDO::getEmployeeStatus, employeeStatus);
|
}
|
|
/**
|
* 按岗位编号集合查询在职/试用员工
|
* <p>
|
* 员工表的 post_ids 存的是 JSON 数组(如 [17, 18]),使用 JSON_CONTAINS 精确匹配岗位
|
*
|
* @param postIds 岗位编号集合
|
* @return 员工列表
|
*/
|
default List<HrmEmployeeDO> selectListByPostIds(Collection<Long> postIds) {
|
if (CollUtil.isEmpty(postIds)) {
|
return Collections.emptyList();
|
}
|
String postCondition = postIds.stream()
|
.map(postId -> "JSON_CONTAINS(post_ids, '[" + postId + "]')")
|
.collect(Collectors.joining(" OR "));
|
return selectList(new LambdaQueryWrapperX<HrmEmployeeDO>()
|
.in(HrmEmployeeDO::getEmployeeStatus, List.of(1, 2))
|
.apply("(" + postCondition + ")")
|
.orderByAsc(HrmEmployeeDO::getName));
|
}
|
|
default PageResult<HrmEmployeeDO> selectPage(HrmEmployeePageReqVO reqVO) {
|
LambdaQueryWrapperX<HrmEmployeeDO> wrapper = new LambdaQueryWrapperX<HrmEmployeeDO>()
|
.likeIfPresent(HrmEmployeeDO::getEmployeeNo, reqVO.getEmployeeNo())
|
.likeIfPresent(HrmEmployeeDO::getName, reqVO.getName())
|
.eqIfPresent(HrmEmployeeDO::getDeptId, reqVO.getDeptId())
|
.eqIfPresent(HrmEmployeeDO::getEmployeeStatus, reqVO.getEmployeeStatus());
|
appendKeyword(wrapper, reqVO.getKeyword());
|
wrapper.orderByDesc(HrmEmployeeDO::getId);
|
return selectPage(reqVO, wrapper);
|
}
|
|
/**
|
* 按部门集合(含子部门)分页查询员工
|
*/
|
default PageResult<HrmEmployeeDO> selectPageByDeptIds(HrmEmployeePageReqVO reqVO, Collection<Long> deptIds) {
|
LambdaQueryWrapperX<HrmEmployeeDO> wrapper = new LambdaQueryWrapperX<HrmEmployeeDO>()
|
.likeIfPresent(HrmEmployeeDO::getEmployeeNo, reqVO.getEmployeeNo())
|
.likeIfPresent(HrmEmployeeDO::getName, reqVO.getName())
|
.inIfPresent(HrmEmployeeDO::getDeptId, deptIds)
|
.eqIfPresent(HrmEmployeeDO::getEmployeeStatus, reqVO.getEmployeeStatus());
|
appendKeyword(wrapper, reqVO.getKeyword());
|
wrapper.orderByDesc(HrmEmployeeDO::getId);
|
return selectPage(reqVO, wrapper);
|
}
|
|
/**
|
* 关键词模糊匹配员工编号 / 姓名 / 手机号
|
*/
|
private void appendKeyword(LambdaQueryWrapperX<HrmEmployeeDO> wrapper, String keyword) {
|
if (StrUtil.isBlank(keyword)) {
|
return;
|
}
|
String kw = keyword.trim();
|
wrapper.and(w -> w.like(HrmEmployeeDO::getEmployeeNo, kw)
|
.or().like(HrmEmployeeDO::getName, kw)
|
.or().like(HrmEmployeeDO::getPhone, kw));
|
}
|
|
default List<HrmEmployeeDO> selectListByStatus(Integer employeeStatus) {
|
return selectList(new LambdaQueryWrapperX<HrmEmployeeDO>()
|
.eqIfPresent(HrmEmployeeDO::getEmployeeStatus, employeeStatus)
|
.orderByAsc(HrmEmployeeDO::getName));
|
}
|
|
default Long selectCountBySalaryStructureId(Long salaryStructureId) {
|
return selectCount(HrmEmployeeDO::getSalaryStructureId, salaryStructureId);
|
}
|
|
/**
|
* 按系统用户编号更新员工离职状态与离职日期
|
*/
|
default int updateEmployeeStatusByUserId(Long userId, Integer employeeStatus, LocalDate leaveDate) {
|
return update(null, new LambdaUpdateWrapper<HrmEmployeeDO>()
|
.eq(HrmEmployeeDO::getUserId, userId)
|
.set(HrmEmployeeDO::getEmployeeStatus, employeeStatus)
|
.set(HrmEmployeeDO::getLeaveDate, leaveDate));
|
}
|
|
}
|