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 { default PageResult selectPage(HrmAttendanceRecordPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .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)); } default HrmAttendanceRecordDO selectByUserIdAndDate(Long userId, LocalDate date) { return selectOne(new LambdaQueryWrapperX() .eq(HrmAttendanceRecordDO::getUserId, userId) .eq(HrmAttendanceRecordDO::getDate, date)); } default List selectListByUserIdAndDateBetween(Long userId, LocalDate startDate, LocalDate endDate) { return selectList(new LambdaQueryWrapperX() .eq(HrmAttendanceRecordDO::getUserId, userId) .ge(HrmAttendanceRecordDO::getDate, startDate) .le(HrmAttendanceRecordDO::getDate, endDate) .orderByAsc(HrmAttendanceRecordDO::getDate)); } /** * 按员工集合 + 日期区间批量查询打卡记录(用于按日区间的实时考勤统计) */ default List selectListByUserIdsAndDateBetween(Collection userIds, LocalDate startDate, LocalDate endDate) { if (CollUtil.isEmpty(userIds)) { return new ArrayList<>(); } return selectList(new LambdaQueryWrapperX() .in(HrmAttendanceRecordDO::getUserId, userIds) .ge(HrmAttendanceRecordDO::getDate, startDate) .le(HrmAttendanceRecordDO::getDate, endDate) .orderByAsc(HrmAttendanceRecordDO::getDate)); } }