package cn.iocoder.yudao.module.mes.dal.mysql.wm.productsales;
|
|
import cn.hutool.core.collection.CollUtil;
|
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.mes.controller.admin.wm.productsales.vo.MesWmProductSalesPageReqVO;
|
import cn.iocoder.yudao.module.mes.dal.dataobject.wm.productsales.MesWmProductSalesDO;
|
import org.apache.ibatis.annotations.Mapper;
|
|
import java.util.List;
|
|
/**
|
* MES 销售出库单 Mapper
|
*
|
* @author 超级管理员
|
*/
|
@Mapper
|
public interface MesWmProductSalesMapper extends BaseMapperX<MesWmProductSalesDO> {
|
|
default MesWmProductSalesDO selectByIdForUpdate(Long id) {
|
return selectOne(new LambdaQueryWrapperX<MesWmProductSalesDO>().eq(MesWmProductSalesDO::getId, id).last("FOR UPDATE"));
|
}
|
|
default PageResult<MesWmProductSalesDO> selectPage(MesWmProductSalesPageReqVO reqVO) {
|
return selectPage(reqVO, new LambdaQueryWrapperX<MesWmProductSalesDO>()
|
.likeIfPresent(MesWmProductSalesDO::getCode, reqVO.getCode())
|
.likeIfPresent(MesWmProductSalesDO::getName, reqVO.getName())
|
.eqIfPresent(MesWmProductSalesDO::getClientId, reqVO.getClientId())
|
.eqIfPresent(MesWmProductSalesDO::getStatus, reqVO.getStatus())
|
.betweenIfPresent(MesWmProductSalesDO::getSalesDate, reqVO.getShipmentDate())
|
.betweenIfPresent(MesWmProductSalesDO::getOutboundTime, reqVO.getOutboundTime())
|
.orderByDesc(MesWmProductSalesDO::getId));
|
}
|
|
/**
|
* 分页查询(带客户权限过滤)
|
*/
|
default PageResult<MesWmProductSalesDO> selectPage(MesWmProductSalesPageReqVO reqVO, List<Long> permittedClientIds) {
|
LambdaQueryWrapperX<MesWmProductSalesDO> wrapper = new LambdaQueryWrapperX<MesWmProductSalesDO>()
|
.likeIfPresent(MesWmProductSalesDO::getCode, reqVO.getCode())
|
.likeIfPresent(MesWmProductSalesDO::getName, reqVO.getName())
|
.eqIfPresent(MesWmProductSalesDO::getClientId, reqVO.getClientId())
|
.eqIfPresent(MesWmProductSalesDO::getStatus, reqVO.getStatus())
|
.betweenIfPresent(MesWmProductSalesDO::getSalesDate, reqVO.getShipmentDate())
|
.betweenIfPresent(MesWmProductSalesDO::getOutboundTime, reqVO.getOutboundTime())
|
.orderByDesc(MesWmProductSalesDO::getId);
|
if (permittedClientIds != null) {
|
if (CollUtil.isEmpty(permittedClientIds)) {
|
return PageResult.empty();
|
}
|
wrapper.in(MesWmProductSalesDO::getClientId, permittedClientIds);
|
}
|
return selectPage(reqVO, wrapper);
|
}
|
|
/**
|
* 分页查询可退销售出库单:仅已完成状态,且存在「出库数量 > 已退数量」的行
|
*/
|
default PageResult<MesWmProductSalesDO> selectReturnablePage(MesWmProductSalesPageReqVO reqVO,
|
Integer finishedStatus, Integer canceledStatus,
|
List<Long> permittedClientIds) {
|
LambdaQueryWrapperX<MesWmProductSalesDO> wrapper = new LambdaQueryWrapperX<MesWmProductSalesDO>()
|
.likeIfPresent(MesWmProductSalesDO::getCode, reqVO.getCode())
|
.likeIfPresent(MesWmProductSalesDO::getName, reqVO.getName())
|
.eqIfPresent(MesWmProductSalesDO::getClientId, reqVO.getClientId())
|
.eq(MesWmProductSalesDO::getStatus, finishedStatus)
|
.betweenIfPresent(MesWmProductSalesDO::getSalesDate, reqVO.getShipmentDate())
|
.betweenIfPresent(MesWmProductSalesDO::getOutboundTime, reqVO.getOutboundTime());
|
if (permittedClientIds != null) {
|
if (CollUtil.isEmpty(permittedClientIds)) {
|
return PageResult.empty();
|
}
|
wrapper.in(MesWmProductSalesDO::getClientId, permittedClientIds);
|
}
|
wrapper.apply("EXISTS (SELECT 1 FROM mes_wm_product_sales_line psl " +
|
"WHERE psl.deleted = 0 AND psl.sales_id = mes_wm_product_sales.id AND psl.quantity > " +
|
"(SELECT IFNULL(SUM(rl.quantity), 0) FROM mes_wm_return_sales_line rl " +
|
"INNER JOIN mes_wm_return_sales rs ON rs.id = rl.return_id AND rs.deleted = 0 " +
|
"WHERE rl.deleted = 0 AND rl.product_sales_line_id = psl.id AND rs.status != {0}))",
|
canceledStatus);
|
wrapper.orderByDesc(MesWmProductSalesDO::getId);
|
return selectPage(reqVO, wrapper);
|
}
|
|
default MesWmProductSalesDO selectByCode(String code) {
|
return selectOne(MesWmProductSalesDO::getCode, code);
|
}
|
|
default MesWmProductSalesDO selectByNoticeId(Long noticeId) {
|
return selectOne(MesWmProductSalesDO::getNoticeId, noticeId);
|
}
|
|
default List<MesWmProductSalesDO> selectListByClientId(Long clientId) {
|
return selectList(MesWmProductSalesDO::getClientId, clientId);
|
}
|
|
}
|