package cn.iocoder.yudao.module.finance.dal.mysql.voucher; 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.finance.controller.admin.voucher.vo.FinVoucherPageReqVO; import cn.iocoder.yudao.module.finance.dal.dataobject.voucher.FinVoucherDO; import org.apache.ibatis.annotations.Mapper; import java.time.LocalDate; import java.util.Collection; import java.util.List; /** * 记账凭证 Mapper * * @author 超级管理员 */ @Mapper public interface FinVoucherMapper extends BaseMapperX { /** * @param creatorIds 制单人编号集合。列表里展示的是昵称,所以 reqVO.getCreator() 拿到的是昵称/编号这类 * 搜索词,由 Service 先解析成编号集合再传进来;传 null 表示不按制单人过滤。 */ default PageResult selectPage(FinVoucherPageReqVO reqVO, Collection creatorIds) { return selectPage(reqVO, new LambdaQueryWrapperX() .likeIfPresent(FinVoucherDO::getVoucherNo, reqVO.getVoucherNo()) .likeIfPresent(FinVoucherDO::getSummary, reqVO.getSummary()) // 注意:creator 存的是用户编号,搜索词不是编号(是昵称)时不能直接 like, // 否则「赵磊」这种昵称永远匹配不上;Service 已经把搜索词解析成编号集合 .inIfPresent(FinVoucherDO::getCreator, creatorIds) .eqIfPresent(FinVoucherDO::getStatus, reqVO.getStatus()) .betweenIfPresent(FinVoucherDO::getVoucherDate, reqVO.getVoucherDate()) .orderByDesc(FinVoucherDO::getVoucherDate) .orderByDesc(FinVoucherDO::getId)); } default FinVoucherDO selectByVoucherNo(String voucherNo) { return selectOne(FinVoucherDO::getVoucherNo, voucherNo); } default List selectListByIds(Collection ids) { return selectList(new LambdaQueryWrapperX() .in(FinVoucherDO::getId, ids)); } default Long selectCountByStatus(Integer status) { return selectCount(FinVoucherDO::getStatus, status); } default List selectListByDateBetween(LocalDate startDate, LocalDate endDate) { return selectList(new LambdaQueryWrapperX() .geIfPresent(FinVoucherDO::getVoucherDate, startDate) .leIfPresent(FinVoucherDO::getVoucherDate, endDate)); } }