gaoluyang
5 天以前 eee03bbfea8b15d1a56ab63bd09a35c6c861c4cb
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/employee/HrmEmployeeMapper.java
@@ -1,13 +1,20 @@
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
@@ -19,6 +26,14 @@
    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) {
@@ -33,17 +48,76 @@
        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) {
        return selectPage(reqVO, new LambdaQueryWrapperX<HrmEmployeeDO>()
        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())
                .orderByDesc(HrmEmployeeDO::getId));
                .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) {
@@ -56,4 +130,14 @@
        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));
    }
}