package cn.iocoder.yudao.module.hrm.dal.mysql.attendance;
|
|
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.attendance.vo.HrmAttendanceRecordPageReqVO;
|
import cn.iocoder.yudao.module.hrm.dal.dataobject.attendance.HrmAttendanceRecordDO;
|
import cn.hutool.core.collection.CollUtil;
|
import org.apache.ibatis.annotations.Mapper;
|
|
import java.time.LocalDate;
|
import java.util.ArrayList;
|
import java.util.Collection;
|
import java.util.List;
|
|
/**
|
* 考勤打卡记录 Mapper
|
*
|
* @author 超级管理员
|
*/
|
@Mapper
|
public interface HrmAttendanceRecordMapper extends BaseMapperX<HrmAttendanceRecordDO> {
|
|
default PageResult<HrmAttendanceRecordDO> selectPage(HrmAttendanceRecordPageReqVO reqVO) {
|
return selectPage(reqVO, new LambdaQueryWrapperX<HrmAttendanceRecordDO>()
|
.eqIfPresent(HrmAttendanceRecordDO::getUserId, reqVO.getUserId())
|
.eqIfPresent(HrmAttendanceRecordDO::getDeptId, reqVO.getDeptId())
|
.geIfPresent(HrmAttendanceRecordDO::getDate, reqVO.getStartDate())
|
.leIfPresent(HrmAttendanceRecordDO::getDate, reqVO.getEndDate())
|
.eqIfPresent(HrmAttendanceRecordDO::getClockInType, reqVO.getClockInType())
|
.eqIfPresent(HrmAttendanceRecordDO::getClockOutType, reqVO.getClockOutType())
|
.orderByDesc(HrmAttendanceRecordDO::getDate));
|
}
|
|
/**
|
* 分页查询(支持按员工ID集合过滤,用于「员工姓名」模糊搜索)
|
*/
|
default PageResult<HrmAttendanceRecordDO> selectPage(HrmAttendanceRecordPageReqVO reqVO, Collection<Long> userIds) {
|
return selectPage(reqVO, new LambdaQueryWrapperX<HrmAttendanceRecordDO>()
|
.eqIfPresent(HrmAttendanceRecordDO::getUserId, reqVO.getUserId())
|
.inIfPresent(HrmAttendanceRecordDO::getUserId, userIds)
|
.eqIfPresent(HrmAttendanceRecordDO::getDeptId, reqVO.getDeptId())
|
.geIfPresent(HrmAttendanceRecordDO::getDate, reqVO.getStartDate())
|
.leIfPresent(HrmAttendanceRecordDO::getDate, reqVO.getEndDate())
|
.eqIfPresent(HrmAttendanceRecordDO::getClockInType, reqVO.getClockInType())
|
.eqIfPresent(HrmAttendanceRecordDO::getClockOutType, reqVO.getClockOutType())
|
.orderByDesc(HrmAttendanceRecordDO::getDate));
|
}
|
|
default HrmAttendanceRecordDO selectByUserIdAndDate(Long userId, LocalDate date) {
|
return selectOne(new LambdaQueryWrapperX<HrmAttendanceRecordDO>()
|
.eq(HrmAttendanceRecordDO::getUserId, userId)
|
.eq(HrmAttendanceRecordDO::getDate, date));
|
}
|
|
default List<HrmAttendanceRecordDO> selectListByUserIdAndDateBetween(Long userId, LocalDate startDate, LocalDate endDate) {
|
return selectList(new LambdaQueryWrapperX<HrmAttendanceRecordDO>()
|
.eq(HrmAttendanceRecordDO::getUserId, userId)
|
.ge(HrmAttendanceRecordDO::getDate, startDate)
|
.le(HrmAttendanceRecordDO::getDate, endDate)
|
.orderByAsc(HrmAttendanceRecordDO::getDate));
|
}
|
|
/**
|
* 按员工集合 + 日期区间批量查询打卡记录(用于按日区间的实时考勤统计)
|
*/
|
default List<HrmAttendanceRecordDO> selectListByUserIdsAndDateBetween(Collection<Long> userIds,
|
LocalDate startDate, LocalDate endDate) {
|
if (CollUtil.isEmpty(userIds)) {
|
return new ArrayList<>();
|
}
|
return selectList(new LambdaQueryWrapperX<HrmAttendanceRecordDO>()
|
.in(HrmAttendanceRecordDO::getUserId, userIds)
|
.ge(HrmAttendanceRecordDO::getDate, startDate)
|
.le(HrmAttendanceRecordDO::getDate, endDate)
|
.orderByAsc(HrmAttendanceRecordDO::getDate));
|
}
|
|
}
|