gaoluyang
5 天以前 eee03bbfea8b15d1a56ab63bd09a35c6c861c4cb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
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));
    }
 
}