|
|
@@ -135,7 +135,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
public OrderDon submit(OrderPayRequest payRequest) throws Exception {
|
|
|
CouponUser couponUser = null;
|
|
|
if (StrUtil.isNotBlank(payRequest.getCouponExCode()) || payRequest.getCouponId() != null) {
|
|
|
- checkCouponStatus(payRequest.getSkuId(), payRequest.getCouponExCode(), payRequest.getCouponId(), payRequest.getUserId());
|
|
|
+ checkCouponStatus(payRequest.getSkuId(), payRequest.getCouponExCode(), payRequest.getCouponId(), payRequest.getUserId(), false);
|
|
|
//记录优惠卷使用状态
|
|
|
couponUser = couponStatusRecord(payRequest.getCouponExCode(), payRequest.getCouponId(), payRequest.getUserId());
|
|
|
}
|
|
|
@@ -457,9 +457,14 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public OrderDon renewal(OrderPayRequest payRequest) {
|
|
|
+ public OrderDon renewal(OrderPayRequest payRequest) throws Exception {
|
|
|
User user = userMapper.selectById(payRequest.getUserId());
|
|
|
-
|
|
|
+ CouponUser couponUser = null;
|
|
|
+ if (StrUtil.isNotBlank(payRequest.getCouponExCode()) || payRequest.getCouponId() != null) {
|
|
|
+ checkCouponStatus(payRequest.getSkuId(), payRequest.getCouponExCode(), payRequest.getCouponId(), payRequest.getUserId(), true);
|
|
|
+ //记录优惠卷使用状态
|
|
|
+ couponUser = couponStatusRecord(payRequest.getCouponExCode(), payRequest.getCouponId(), payRequest.getUserId());
|
|
|
+ }
|
|
|
Long relationId = payRequest.getRelationId();
|
|
|
if (relationId == null || relationId <= 0 || payRequest.getSkuId() == null || payRequest.getNum() == null) {
|
|
|
throw new BusinessRuntimeException("缺少必填参数");
|
|
|
@@ -504,6 +509,24 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
orderDon.setStatus(OrderDon.Status.noPayment);
|
|
|
orderDon.setUserId(user.getId());
|
|
|
orderDon.setGoodsId(goodsDon.getId());
|
|
|
+ orderDon.setRealMoney(payRequest.getDonMoney());
|
|
|
+ //存在优惠卷
|
|
|
+ if (couponUser != null) {
|
|
|
+ Long couponId = couponUser.getCouponId();
|
|
|
+ Coupon coupon = couponMapper.selectById(couponId);
|
|
|
+ BigDecimal couponMoney = null;
|
|
|
+ if (coupon.getType() == Coupon.Type.discount) {
|
|
|
+ BigDecimal discountMoney = payRequest.getDonMoney().multiply(coupon.getDiscount()).divide(BigDecimal.valueOf(100), 2, RoundingMode.DOWN);
|
|
|
+ orderDon.setMoney(discountMoney);
|
|
|
+ couponMoney = payRequest.getDonMoney().subtract(discountMoney);
|
|
|
+ } else if (coupon.getType() == Coupon.Type.reduce) {
|
|
|
+ BigDecimal subtractMoney = payRequest.getDonMoney().subtract(coupon.getReduceMoney());
|
|
|
+ orderDon.setMoney(subtractMoney);
|
|
|
+ couponMoney = payRequest.getDonMoney().subtract(subtractMoney);
|
|
|
+ }
|
|
|
+ orderDon.setCouponMoney(couponMoney);
|
|
|
+ orderDon.setCouponUserId(couponUser.getId());
|
|
|
+ }
|
|
|
this.saveOrUpdate(orderDon);
|
|
|
|
|
|
jobManager.addJob(EXPIRY_TIME, () -> {
|
|
|
@@ -987,7 +1010,7 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- public void checkCouponStatus(Long skuId, String couponExCode, Long couponId, Long userId) throws Exception {
|
|
|
+ public void checkCouponStatus(Long skuId, String couponExCode, Long couponId, Long userId, Boolean isRenew) throws Exception {
|
|
|
log.info("开始校验兑换码:{},优惠卷id:{}状态", couponExCode, couponId);
|
|
|
//实物还是虚物商品
|
|
|
GoodsDonSku goodsDonSku = goodsDonSkuMapper.selectById(skuId);
|
|
|
@@ -1001,7 +1024,10 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
throw BusinessRuntimeException.getInstance("该优惠码不存在");
|
|
|
}
|
|
|
checkCouponGoods(goodsDon, skuId, exists.getType(), exists.getGoodsSkuIds());
|
|
|
-
|
|
|
+ //检验是否续费可使用
|
|
|
+ if (isRenew && !exists.getIsRenew()) {
|
|
|
+ throw BusinessRuntimeException.getInstance("该优惠卷续费时不可使用");
|
|
|
+ }
|
|
|
} else if (couponId != null) {
|
|
|
CouponUserView couponUserView = beanSearcher.searchFirst(CouponUserView.class, MapUtils.builder()
|
|
|
.field(CouponUserView::getCouponId, couponId).op(Operator.Equal)
|
|
|
@@ -1022,6 +1048,10 @@ public class OrderDonServiceImpl extends ServiceImpl<OrderDonMapper, OrderDon> i
|
|
|
throw BusinessRuntimeException.getInstance("该优惠卷不可使用");
|
|
|
}
|
|
|
checkCouponGoods(goodsDon, skuId, couponUserView.getType(), couponUserView.getGoodsSkuIds());
|
|
|
+ //检验是否续费可使用
|
|
|
+ if (isRenew && !couponUserView.getIsRenew()) {
|
|
|
+ throw BusinessRuntimeException.getInstance("该优惠卷续费时不可使用");
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|