Browse Source

优惠券金额计算

刘俊驰 4 months ago
parent
commit
3f116055d1

+ 2 - 2
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/PaymentDivMemberRecordServiceImpl.java

@@ -959,13 +959,13 @@ public class PaymentDivMemberRecordServiceImpl extends ServiceImpl<PaymentDivMem
         List<UserAccountRecordDto> userAccountRecordDtos = new ArrayList<>();
         List<PlatformCashAccountRecord> platformCashAccountRecords = new ArrayList<>();
         UserAccountRecordDto dto = new UserAccountRecordDto(userPaymentOrder.getMerchId(), PostStatusEnum.WAIT, amount,
-                InOrOutEnum.IN, AccountBizTypeEnum.valueOf(userPaymentOrder.getOrderType().getCode()), bizId, userPaymentOrder.getGoodName(), userPaymentOrder.getOrderNo(),
+                InOrOutEnum.IN, AccountBizTypeEnum.valueOf(userPaymentOrder.getGoodType().getCode()), bizId, userPaymentOrder.getGoodName(), userPaymentOrder.getOrderNo(),
                 userPaymentOrder.getUserId(), accountPeriodTime);
         userAccountRecordDtos.add(dto);
 
         // 插入平台账户 支出
         PlatformCashAccountRecord platformCashAccountRecord = new PlatformCashAccountRecord(userPaymentOrder.getUserId(), amount,
-                InOrOutEnum.OUT, PostStatusEnum.WAIT, AccountBizTypeEnum.valueOf(userPaymentOrder.getOrderType().getCode()), bizId,
+                InOrOutEnum.OUT, PostStatusEnum.WAIT, AccountBizTypeEnum.valueOf(userPaymentOrder.getGoodType().getCode()), bizId,
                 userPaymentOrder.getOrderNo(), accountPeriodTime);
         platformCashAccountRecords.add(platformCashAccountRecord);
 

+ 14 - 5
cooleshow-user/user-biz/src/main/java/com/yonge/cooleshow/biz/dal/service/impl/UserPaymentCoreServiceImpl.java

@@ -844,6 +844,9 @@ DISCOUNT("畅学卡")
             throw new BizException("优惠券不可用");
         }
 
+        // 总金额扣除优惠金额
+        amount = amount.subtract(BigDecimal.valueOf(couponInfo.getDiscountPrice()));
+
         // 根据商品金额比例分摊优惠金额
         // 剩余金额
         BigDecimal remainAmount = BigDecimal.valueOf(couponInfo.getDiscountPrice());
@@ -851,18 +854,24 @@ DISCOUNT("畅学卡")
             UserPaymentOrderWrapper.OrderGoodsInfo goodsInfo = goodsInfos.get(entry.getKey());
             UserOrderDetail userOrderDetail = goodsInfo.getUserOrderDetail();
             BigDecimal actualPrice = entry.getValue();
-            BigDecimal couponAmount = BigDecimal.valueOf(couponInfo.getDiscountPrice())
-                    .multiply(userOrderDetail.getActualPrice()).divide(amount, 2, RoundingMode.HALF_DOWN);
+            BigDecimal couponAmount;
+
+            if (amount.compareTo(BigDecimal.ZERO) >0) {
+                couponAmount = BigDecimal.valueOf(couponInfo.getDiscountPrice())
+                        .multiply(userOrderDetail.getActualPrice()).divide(amount, 2, RoundingMode.HALF_DOWN);
+            } else {
+                couponAmount = userOrderDetail.getActualPrice();
+            }
             remainAmount = remainAmount.subtract(couponAmount);
             userOrderDetail.setCouponAmount(couponAmount.add(userOrderDetail.getCouponAmount()));
 
             userOrderDetail.setDiscountJson(userOrderService.discountJson(EDiscountType.COUPON,
                     couponAmount,userOrderDetail.getDiscountJson()));
-            userOrderDetail.setActualPrice(actualPrice.subtract(couponAmount).setScale(2, RoundingMode.HALF_UP));
+            userOrderDetail.setActualPrice(actualPrice.subtract(couponAmount));
         }
-        if (remainAmount.compareTo(BigDecimal.ZERO) > 0) {
+        if (remainAmount.compareTo(BigDecimal.ZERO) > 0&& amount.compareTo(BigDecimal.ZERO) >0) {
             UserOrderDetail userOrderDetail = goodsInfos.get(0).getUserOrderDetail();
-            userOrderDetail.setActualPrice(userOrderDetail.getActualPrice().add(remainAmount));
+            userOrderDetail.setActualPrice(userOrderDetail.getActualPrice().subtract(remainAmount));
 
             userOrderDetail.setDiscountJson(userOrderService.discountJson(EDiscountType.COUPON,
                     remainAmount,userOrderDetail.getDiscountJson()));