|
@@ -17,6 +17,7 @@ import com.ym.mec.common.service.IdGeneratorService;
|
|
import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
import com.ym.mec.common.service.impl.BaseServiceImpl;
|
|
import com.ym.mec.util.collection.MapUtil;
|
|
import com.ym.mec.util.collection.MapUtil;
|
|
import com.ym.mec.util.date.DateUtil;
|
|
import com.ym.mec.util.date.DateUtil;
|
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.transaction.annotation.Isolation;
|
|
import org.springframework.transaction.annotation.Isolation;
|
|
@@ -47,13 +48,17 @@ public class SysCouponCodeServiceImpl extends BaseServiceImpl<Long, SysCouponCod
|
|
@Override
|
|
@Override
|
|
@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
|
|
@Transactional(rollbackFor = Exception.class, isolation = Isolation.READ_COMMITTED)
|
|
public boolean exchangeCoupon(Integer userId, Integer couponId, Long paymentOrderId, Integer exchangeNum) {
|
|
public boolean exchangeCoupon(Integer userId, Integer couponId, Long paymentOrderId, Integer exchangeNum) {
|
|
- if(Objects.isNull(userId)||Objects.isNull(couponId)||Objects.isNull(paymentOrderId)){
|
|
|
|
|
|
+ if(Objects.isNull(userId)||Objects.isNull(couponId)||Objects.isNull(paymentOrderId)||Objects.isNull(exchangeNum)){
|
|
throw new BizException("领取失败");
|
|
throw new BizException("领取失败");
|
|
}
|
|
}
|
|
|
|
+ if(exchangeNum<=0){
|
|
|
|
+ return true;
|
|
|
|
+ }
|
|
SysCoupon sysCoupon = sysCouponDao.lockCoupon(couponId);
|
|
SysCoupon sysCoupon = sysCouponDao.lockCoupon(couponId);
|
|
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||(sysCoupon.getStockCount()!=-1&&sysCoupon.getConsumeNum()>=sysCoupon.getStockCount());
|
|
|
|
|
|
+ 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){
|
|
if(invalid){
|
|
throw new BizException("无效优惠券");
|
|
throw new BizException("无效优惠券");
|
|
}
|
|
}
|
|
@@ -63,7 +68,7 @@ public class SysCouponCodeServiceImpl extends BaseServiceImpl<Long, SysCouponCod
|
|
}
|
|
}
|
|
if(sysCoupon.getLimitExchangeNum()!=-1){
|
|
if(sysCoupon.getLimitExchangeNum()!=-1){
|
|
int userUserNum = sysCouponCodeDao.countWithUserAndCoupon(userId, couponId);
|
|
int userUserNum = sysCouponCodeDao.countWithUserAndCoupon(userId, couponId);
|
|
- invalid = userUserNum>=sysCoupon.getLimitExchangeNum();
|
|
|
|
|
|
+ invalid = (userUserNum + exchangeNum)>sysCoupon.getLimitExchangeNum();
|
|
}
|
|
}
|
|
//如果用户使用数量超过优惠券限制则领取无效
|
|
//如果用户使用数量超过优惠券限制则领取无效
|
|
if(invalid){
|
|
if(invalid){
|
|
@@ -73,7 +78,6 @@ public class SysCouponCodeServiceImpl extends BaseServiceImpl<Long, SysCouponCod
|
|
sysCouponCode.setUserId(userId);
|
|
sysCouponCode.setUserId(userId);
|
|
sysCouponCode.setCouponId(couponId);
|
|
sysCouponCode.setCouponId(couponId);
|
|
sysCouponCode.setPaymentOrderId(paymentOrderId);
|
|
sysCouponCode.setPaymentOrderId(paymentOrderId);
|
|
- sysCouponCode.setCode(String.valueOf(idGeneratorService.generatorId("coupon")));
|
|
|
|
sysCouponCode.setUsageStatus(0);
|
|
sysCouponCode.setUsageStatus(0);
|
|
switch (sysCoupon.getEffectiveType()){
|
|
switch (sysCoupon.getEffectiveType()){
|
|
case DAYS:
|
|
case DAYS:
|
|
@@ -87,7 +91,14 @@ public class SysCouponCodeServiceImpl extends BaseServiceImpl<Long, SysCouponCod
|
|
default:
|
|
default:
|
|
throw new BizException("无效优惠券", sysCoupon.getLimitExchangeNum());
|
|
throw new BizException("无效优惠券", sysCoupon.getLimitExchangeNum());
|
|
}
|
|
}
|
|
- sysCouponCodeDao.insert(sysCouponCode);
|
|
|
|
|
|
+ List<SysCouponCode> couponCodes = new ArrayList<>();
|
|
|
|
+ for (int i = 0; i < exchangeNum; i++) {
|
|
|
|
+ SysCouponCode couponCode = new SysCouponCode();
|
|
|
|
+ BeanUtils.copyProperties(sysCouponCode, couponCode);
|
|
|
|
+ couponCode.setCode(String.valueOf(idGeneratorService.generatorId("coupon")));
|
|
|
|
+ couponCodes.add(couponCode);
|
|
|
|
+ }
|
|
|
|
+ sysCouponCodeDao.batchInsert(couponCodes);
|
|
sysCoupon.setConsumeNum(new AtomicInteger(sysCoupon.getConsumeNum()).incrementAndGet());
|
|
sysCoupon.setConsumeNum(new AtomicInteger(sysCoupon.getConsumeNum()).incrementAndGet());
|
|
if(sysCoupon.getWarningStatus()==0&&sysCoupon.getStockCount()!=-1&&sysCoupon.getStockCount()-sysCoupon.getConsumeNum()<sysCoupon.getWarningStockNum()){
|
|
if(sysCoupon.getWarningStatus()==0&&sysCoupon.getStockCount()!=-1&&sysCoupon.getStockCount()-sysCoupon.getConsumeNum()<sysCoupon.getWarningStockNum()){
|
|
sysCouponService.stockWarning(sysCoupon.getId(), sysCoupon.getName());
|
|
sysCouponService.stockWarning(sysCoupon.getId(), sysCoupon.getName());
|