package cn.iocoder.yudao.module.archive.dal.mysql.borrow;
|
|
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.archive.controller.admin.borrow.vo.ArchiveBorrowPageReqVO;
|
import cn.iocoder.yudao.module.archive.dal.dataobject.borrow.ArchiveBorrowDO;
|
import cn.iocoder.yudao.module.archive.enums.ArchiveBorrowStatusEnum;
|
import org.apache.ibatis.annotations.Mapper;
|
|
import java.time.LocalDate;
|
import java.util.Collection;
|
import java.util.List;
|
|
@Mapper
|
public interface ArchiveBorrowMapper extends BaseMapperX<ArchiveBorrowDO> {
|
|
/** 借阅单分页查询 */
|
default PageResult<ArchiveBorrowDO> selectPage(ArchiveBorrowPageReqVO reqVO) {
|
return selectPage(reqVO, buildQuery(reqVO, false));
|
}
|
|
/** 逾期借阅单分页查询:借出中 且 归还期限已过 */
|
default PageResult<ArchiveBorrowDO> selectOverduePage(ArchiveBorrowPageReqVO reqVO) {
|
return selectPage(reqVO, buildQuery(reqVO, true));
|
}
|
|
/** 逾期借阅单列表(不分页,统计与导出用) */
|
default List<ArchiveBorrowDO> selectOverdueList() {
|
return selectList(new LambdaQueryWrapperX<ArchiveBorrowDO>()
|
.eq(ArchiveBorrowDO::getStatus, ArchiveBorrowStatusEnum.BORROWED.getStatus())
|
.lt(ArchiveBorrowDO::getReturnDeadline, LocalDate.now()));
|
}
|
|
/**
|
* 构建借阅单查询条件
|
*
|
* @param overdueOnly true=仅查询逾期(借出中 且 归还期限 < 今天)
|
*/
|
default LambdaQueryWrapperX<ArchiveBorrowDO> buildQuery(ArchiveBorrowPageReqVO reqVO, boolean overdueOnly) {
|
LambdaQueryWrapperX<ArchiveBorrowDO> query = new LambdaQueryWrapperX<ArchiveBorrowDO>()
|
.likeIfPresent(ArchiveBorrowDO::getNo, reqVO.getNo())
|
.likeIfPresent(ArchiveBorrowDO::getDocumentNo, reqVO.getDocumentNo())
|
.likeIfPresent(ArchiveBorrowDO::getDocumentTitle, reqVO.getDocumentTitle())
|
.likeIfPresent(ArchiveBorrowDO::getBorrowerName, reqVO.getBorrowerName())
|
.eqIfPresent(ArchiveBorrowDO::getStatus, reqVO.getStatus())
|
.betweenIfPresent(ArchiveBorrowDO::getBorrowDate, reqVO.getBorrowDate())
|
.betweenIfPresent(ArchiveBorrowDO::getReturnDeadline, reqVO.getReturnDeadline())
|
.orderByDesc(ArchiveBorrowDO::getId);
|
if (overdueOnly) {
|
query.eq(ArchiveBorrowDO::getStatus, ArchiveBorrowStatusEnum.BORROWED.getStatus())
|
.lt(ArchiveBorrowDO::getReturnDeadline, LocalDate.now());
|
}
|
return query;
|
}
|
|
/**
|
* 查询指定档案处于未归还(审批中 / 借出中)状态的借阅单
|
* 用于「同一档案同一时间只能有一条未归还借阅单」的唯一性校验
|
*/
|
default List<ArchiveBorrowDO> selectListByDocumentIdAndStatusIn(Long documentId, Collection<Integer> statuses) {
|
return selectList(new LambdaQueryWrapperX<ArchiveBorrowDO>()
|
.eq(ArchiveBorrowDO::getDocumentId, documentId)
|
.inIfPresent(ArchiveBorrowDO::getStatus, statuses));
|
}
|
|
/** 按状态统计借阅单数量 */
|
default Long selectCountByStatus(Integer status) {
|
return selectCount(ArchiveBorrowDO::getStatus, status);
|
}
|
|
/** 借出中借阅单数量 */
|
default Long selectBorrowingCount() {
|
return selectCountByStatus(ArchiveBorrowStatusEnum.BORROWED.getStatus());
|
}
|
|
/** 逾期借阅单数量 */
|
default Long selectOverdueCount() {
|
return selectCount(new LambdaQueryWrapperX<ArchiveBorrowDO>()
|
.eq(ArchiveBorrowDO::getStatus, ArchiveBorrowStatusEnum.BORROWED.getStatus())
|
.lt(ArchiveBorrowDO::getReturnDeadline, LocalDate.now()));
|
}
|
|
}
|