package cn.iocoder.yudao.module.promotion.dal.mysql.bargain;
|
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
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.promotion.controller.admin.bargain.vo.activity.BargainActivityPageReqVO;
|
import cn.iocoder.yudao.module.promotion.dal.dataobject.bargain.BargainActivityDO;
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
import org.apache.ibatis.annotations.Mapper;
|
|
import java.time.LocalDateTime;
|
import java.util.List;
|
|
/**
|
* 砍价活动 Mapper
|
*
|
* @author HUIHUI
|
*/
|
@Mapper
|
public interface BargainActivityMapper extends BaseMapperX<BargainActivityDO> {
|
|
default PageResult<BargainActivityDO> selectPage(BargainActivityPageReqVO reqVO) {
|
return selectPage(reqVO, new LambdaQueryWrapperX<BargainActivityDO>()
|
.likeIfPresent(BargainActivityDO::getName, reqVO.getName())
|
.eqIfPresent(BargainActivityDO::getStatus, reqVO.getStatus())
|
.orderByDesc(BargainActivityDO::getId));
|
}
|
|
default List<BargainActivityDO> selectListByStatus(Integer status) {
|
return selectList(BargainActivityDO::getStatus, status);
|
}
|
|
/**
|
* 更新活动库存
|
*
|
* @param id 活动编号
|
* @param count 扣减的库存数量
|
* @return 影响的行数
|
*/
|
default int updateStock(Long id, int count) {
|
// 情况一:增加库存
|
if (count > 0) {
|
return update(null, new LambdaUpdateWrapper<BargainActivityDO>()
|
.eq(BargainActivityDO::getId, id)
|
.setSql("stock = stock + " + count));
|
}
|
// 情况二:扣减库存
|
count = -count; // 取正
|
return update(null, new LambdaUpdateWrapper<BargainActivityDO>()
|
.eq(BargainActivityDO::getId, id)
|
.ge(BargainActivityDO::getStock, count)
|
.setSql("stock = stock - " + count));
|
}
|
|
/**
|
* 查询处在 now 日期时间且是 status 状态的活动分页
|
*
|
* @param pageReqVO 分页参数
|
* @param status 状态
|
* @param now 当前日期时间
|
* @return 活动分页
|
*/
|
default PageResult<BargainActivityDO> selectPage(PageParam pageReqVO, Integer status, LocalDateTime now) {
|
return selectPage(pageReqVO, new LambdaQueryWrapperX<BargainActivityDO>()
|
.eq(BargainActivityDO::getStatus, status)
|
.le(BargainActivityDO::getStartTime, now)
|
.ge(BargainActivityDO::getEndTime, now));
|
}
|
|
/**
|
* 查询处在 now 日期时间且是 status 状态的活动分页
|
*
|
* @param status 状态
|
* @param now 当前日期时间
|
* @return 活动分页
|
*/
|
default List<BargainActivityDO> selectList(Integer count, Integer status, LocalDateTime now) {
|
return selectList(new LambdaQueryWrapperX<BargainActivityDO>()
|
.eq(BargainActivityDO::getStatus, status)
|
.le(BargainActivityDO::getStartTime, now)
|
.ge(BargainActivityDO::getEndTime, now)
|
.last("LIMIT " + count));
|
}
|
|
default BargainActivityDO selectBySpuIdAndStatusAndNow(Long spuId, Integer status) {
|
LocalDateTime now = LocalDateTime.now();
|
return selectOne(new LambdaQueryWrapperX<BargainActivityDO>()
|
.eq(BargainActivityDO::getSpuId, spuId)
|
.eq(BargainActivityDO::getStatus, status)
|
.lt(BargainActivityDO::getStartTime, now)
|
.gt(BargainActivityDO::getEndTime, now)); // 开始时间 < now < 结束时间,也就是说获取指定时间段的活动
|
}
|
|
}
|