liu
2026-10-30 82155dd6f2b16fbfb718e636a54e2c9dae31246b
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/dal/mysql/approval/HrmLeaveApplicationMapper.java
@@ -14,7 +14,7 @@
/**
 * 请假申请 Mapper
 *
 * @author 芋道源码
 * @author 超级管理员
 */
@Mapper
public interface HrmLeaveApplicationMapper extends BaseMapperX<HrmLeaveApplicationDO> {
@@ -46,6 +46,31 @@
     * @param endTime   结束时间
     * @return 请假记录列表
     */
    /**
     * 查询与指定时间区间【有交集】的请假单
     *
     * <p>语义与 selectApprovedListByUserIdAndTimeRange 不同:那边要求请假单完整落在区间内,
     * 这里只要有重叠就算命中。考勤判断「某天是否请假」必须用这个:
     * 跨天的请假单(如 9/24 18:00 ~ 9/25 18:00)在 9/25 这天也算请假。</p>
     *
     * <p>交集条件:start_time &lt; rangeEnd 且 end_time &gt;= rangeStart</p>
     *
     * @param userId    员工ID(hrm_leave_application.user_id)
     * @param status    审批状态,传 null 不过滤
     * @param rangeStart 区间开始(含)
     * @param rangeEnd   区间结束(不含)
     * @return 与区间有交集的请假单
     */
    default List<HrmLeaveApplicationDO> selectListByUserIdAndOverlapDate(
            Long userId, Integer status, LocalDateTime rangeStart, LocalDateTime rangeEnd) {
        return selectList(new LambdaQueryWrapperX<HrmLeaveApplicationDO>()
                .eq(HrmLeaveApplicationDO::getUserId, userId)
                .eqIfPresent(HrmLeaveApplicationDO::getStatus, status)
                .lt(HrmLeaveApplicationDO::getStartTime, rangeEnd)
                .ge(HrmLeaveApplicationDO::getEndTime, rangeStart)
                .orderByAsc(HrmLeaveApplicationDO::getStartTime));
    }
    default List<HrmLeaveApplicationDO> selectApprovedListByUserIdAndTimeRange(Long userId, LocalDateTime startTime, LocalDateTime endTime) {
        return selectList(new LambdaQueryWrapperX<HrmLeaveApplicationDO>()
                .eq(HrmLeaveApplicationDO::getUserId, userId)