package cn.iocoder.yudao.module.hrm.dal.mysql.certificate; 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.certificate.vo.HrmCertificatePageReqVO; import cn.iocoder.yudao.module.hrm.dal.dataobject.certificate.HrmCertificateDO; import org.apache.ibatis.annotations.Mapper; import java.time.LocalDate; import java.util.List; /** * HRM 证书资质 Mapper * * @author xiaoyi */ @Mapper public interface HrmCertificateMapper extends BaseMapperX { /** * 到期提醒天数 */ int REMIND_DAYS = 30; default PageResult selectPage(HrmCertificatePageReqVO reqVO) { LambdaQueryWrapperX query = new LambdaQueryWrapperX() .eqIfPresent(HrmCertificateDO::getEmployeeId, reqVO.getEmployeeId()) .eqIfPresent(HrmCertificateDO::getCertType, reqVO.getCertType()) .likeIfPresent(HrmCertificateDO::getCertName, reqVO.getCertName()); // 到期类型筛选(配合合规列表/待办提醒):1=即将到期,2=已过期 if (reqVO.getExpiryType() != null) { LocalDate today = LocalDate.now(); if (reqVO.getExpiryType() == 1) { // 即将到期 query.between(HrmCertificateDO::getExpireDate, today, today.plusDays(REMIND_DAYS)); } else if (reqVO.getExpiryType() == 2) { // 已过期 query.isNotNull(HrmCertificateDO::getExpireDate) .lt(HrmCertificateDO::getExpireDate, today); } } return selectPage(reqVO, query.orderByDesc(HrmCertificateDO::getId)); } /** * 查询有效期落在 [start, end] 之间的证书(到期提醒用) * * @param start 起始日期 * @param end 截止日期 * @return 即将到期证书列表 */ default List selectListByExpireDateBetween(LocalDate start, LocalDate end) { return selectList(new LambdaQueryWrapperX() .isNotNull(HrmCertificateDO::getExpireDate) .between(HrmCertificateDO::getExpireDate, start, end)); } }