|
@@ -113,19 +113,21 @@ public class SysCouponCodeServiceImpl extends BaseServiceImpl<Long, SysCouponCod
|
|
|
|
|
|
Date now = new Date();
|
|
Date now = new Date();
|
|
//如果优惠券不存在,或者已停用,或者不在领取有效期内,或者已消耗完,则此优惠券无效
|
|
//如果优惠券不存在,或者已停用,或者不在领取有效期内,或者已消耗完,则此优惠券无效
|
|
- boolean invalid = Objects.isNull(sysCoupon) || 0 == sysCoupon.getStatus() || now.compareTo(sysCoupon.getStartDate()) < 0 || now.compareTo(sysCoupon.getEndDate()) > 0;
|
|
|
|
- invalid = invalid || sysCoupon.getStockCount() != -1 && sysCoupon.getConsumeNum() >= sysCoupon.getStockCount() && (sysCoupon.getStockCount() - sysCoupon.getConsumeNum() < exchangeNum);
|
|
|
|
- if (invalid) {
|
|
|
|
- throw new BizException("无效优惠券");
|
|
|
|
- }
|
|
|
|
|
|
+ Optional<SysCoupon> optional = Optional.ofNullable(sysCoupon);
|
|
|
|
+ optional.orElseThrow(() -> new BizException("未查询到优惠券信息!"));
|
|
|
|
+ optional.filter(c -> 1 == c.getStatus()).orElseThrow(() -> new BizException("优惠券已被停用,请刷新!"));
|
|
|
|
+ optional.filter(c -> now.compareTo(c.getStartDate()) > -1).orElseThrow(() -> new BizException("未到领取时间!"));
|
|
|
|
+ optional.filter(c -> now.compareTo(c.getEndDate()) < 0).orElseThrow(() -> new BizException("优惠券已过期!"));
|
|
|
|
+ optional.filter(c -> c.getStockCount() == -1
|
|
|
|
+ || (c.getStockCount() > -1 && c.getStockCount() >= c.getConsumeNum() + exchangeNum))
|
|
|
|
+ .orElseThrow(() -> new BizException("优惠券库存不足!"));
|
|
//校验兑换的最大次数
|
|
//校验兑换的最大次数
|
|
if (sysCoupon.getLimitExchangeNum() != -1) {
|
|
if (sysCoupon.getLimitExchangeNum() != -1) {
|
|
int userUserNum = sysCouponCodeDao.countWithUserAndCoupon(userId, couponId);
|
|
int userUserNum = sysCouponCodeDao.countWithUserAndCoupon(userId, couponId);
|
|
- invalid = (userUserNum + exchangeNum) > sysCoupon.getLimitExchangeNum();
|
|
|
|
- }
|
|
|
|
- //如果用户使用数量超过优惠券限制则领取无效
|
|
|
|
- if (invalid) {
|
|
|
|
- throw new BizException("当前优惠券最多可领取{}次", sysCoupon.getLimitExchangeNum());
|
|
|
|
|
|
+ //如果用户使用数量超过优惠券限制则领取无效
|
|
|
|
+ if (userUserNum + exchangeNum > sysCoupon.getLimitExchangeNum()) {
|
|
|
|
+ throw new BizException("当前优惠券最多可领取{}次", sysCoupon.getLimitExchangeNum());
|
|
|
|
+ }
|
|
}
|
|
}
|
|
return sysCoupon;
|
|
return sysCoupon;
|
|
}
|
|
}
|