|  | @@ -113,19 +113,21 @@ public class SysCouponCodeServiceImpl extends BaseServiceImpl<Long, SysCouponCod
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          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) {
 | 
	
		
			
				|  |  |              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;
 | 
	
		
			
				|  |  |      }
 |