package cn.iocoder.yudao.module.qcreport.dal.mysql.instance;
|
|
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.qcreport.controller.admin.instance.vo.QcReportInstancePageReqVO;
|
import cn.iocoder.yudao.module.qcreport.dal.dataobject.instance.QcReportInstanceDO;
|
import org.apache.ibatis.annotations.Mapper;
|
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Select;
|
|
@Mapper
|
public interface QcReportInstanceMapper extends BaseMapperX<QcReportInstanceDO> {
|
|
default PageResult<QcReportInstanceDO> selectPage(QcReportInstancePageReqVO reqVO) {
|
return selectPage(reqVO, new LambdaQueryWrapperX<QcReportInstanceDO>()
|
.eqIfPresent(QcReportInstanceDO::getTemplateId, reqVO.getTemplateId())
|
.likeIfPresent(QcReportInstanceDO::getReportNo, reqVO.getReportNo())
|
.eqIfPresent(QcReportInstanceDO::getBusinessType, reqVO.getBusinessType())
|
.eqIfPresent(QcReportInstanceDO::getBusinessId, reqVO.getBusinessId())
|
.eqIfPresent(QcReportInstanceDO::getStatus, reqVO.getStatus())
|
.betweenIfPresent(QcReportInstanceDO::getCreateTime, reqVO.getCreateTime())
|
.orderByDesc(QcReportInstanceDO::getId));
|
}
|
|
default QcReportInstanceDO selectByReportNo(String reportNo) {
|
return selectOne(new LambdaQueryWrapperX<QcReportInstanceDO>()
|
.eq(QcReportInstanceDO::getReportNo, reportNo));
|
}
|
|
/**
|
* 取当天流水最大的那条编号,用于推出下一个序号。
|
* <p>
|
* **必须走手写 SQL、把软删除的行也算进来**:条件构造器会自动带上 {@code deleted = 0},
|
* 而 {@code uk_report_no} 唯一索引不认 {@code deleted}。删掉当天最大号的那份报告后,
|
* 条件构造器看不到它、算回同一个号、插入必然撞唯一索引;重试又是同一套查询同一个结果,
|
* 连撞 5 次后报「编号冲突」——用户会以为是自己手气差,实际是删过一份报告就再出不了这一天的件。
|
* <p>
|
* 排序**不能**只写 {@code ORDER BY report_no DESC}:序号补零到 4 位,
|
* 当天一旦超过 9999 条位宽就会变长,字典序会把 {@code ...-9999} 排到 {@code ...-10000} 前面。
|
* 先比长度再比字典序,两端对齐才是真的「最大」。
|
* <p>
|
* 只取编号本身:调用方要的就是它的尾部流水,不必把 JSON 快照一整个列拽出来。
|
*/
|
@Select("SELECT report_no FROM qc_report_instance WHERE report_no LIKE CONCAT(#{prefix}, '%') "
|
+ "ORDER BY CHAR_LENGTH(report_no) DESC, report_no DESC LIMIT 1")
|
String selectLatestReportNoByPrefix(@Param("prefix") String prefix);
|
|
}
|