From 76310c8da2f8b562fc01b8513ca5c3eb76fda4cc Mon Sep 17 00:00:00 2001 From: Cui Zhi Feng <7426394+wuxixiaocui@user.noreply.gitee.com> Date: 星期六, 14 九月 2024 13:49:57 +0800 Subject: [PATCH] 订单商品 优惠券退款精度调整 --- src/main/java/com/mzl/flower/service/payment/OrderService.java | 18 ++++++++++++++---- 1 files changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/mzl/flower/service/payment/OrderService.java b/src/main/java/com/mzl/flower/service/payment/OrderService.java index 2ef01ff..54dd68e 100644 --- a/src/main/java/com/mzl/flower/service/payment/OrderService.java +++ b/src/main/java/com/mzl/flower/service/payment/OrderService.java @@ -517,9 +517,15 @@ BigDecimal couponAmount = calculateCoupon(memberCouponAmount, t.getTotal() , flowerAmount, t.getNum(), t.getPrice(), isLastOne, usedCouponAmount); t.setCouponAmount(couponAmount);//每扎平摊的优惠券面值 - t.setRealPrice(t.getPrice().subtract(couponAmount));//退款时使用的真实成交价 + t.setRealPrice(t.getPrice().subtract(couponAmount));//退款时使用的真实成交单价 - usedCouponAmount = usedCouponAmount.add(couponAmount.multiply(BigDecimal.valueOf(t.getNum()))); + t.setCouponAmountTotal(couponAmount.multiply(BigDecimal.valueOf(t.getNum()))); + if(isLastOne){ + t.setCouponAmountTotal(memberCouponAmount.subtract(usedCouponAmount)); + } else { + usedCouponAmount = usedCouponAmount.add(t.getCouponAmountTotal()); + } + t.setRealTotal(t.getTotal().subtract(t.getCouponAmountTotal())); t.create(userId); orderItemMapper.insert(t); @@ -581,9 +587,13 @@ BigDecimal subCoupon = couponAmount.subtract(usedCouponAmount);//占有的优惠券面值 return subCoupon.divide(BigDecimal.valueOf(num), 2, RoundingMode.HALF_UP); } - BigDecimal radio = itemTotalAmount.divide(totalAmount, 2, RoundingMode.HALF_UP);//计算该商品总价在订单中的占比 + + /*BigDecimal radio = itemTotalAmount.divide(totalAmount, 2, RoundingMode.HALF_UP);//计算该商品总价在订单中的占比 BigDecimal subCoupon = couponAmount.multiply(radio);//占有的优惠券面值 - return subCoupon.divide(BigDecimal.valueOf(num), 2, RoundingMode.HALF_UP); + return subCoupon.divide(BigDecimal.valueOf(num), 2, RoundingMode.HALF_UP);*/ + + //不能分步计算,分步计算会有精度问题 + return couponAmount.multiply(itemTotalAmount).divide(totalAmount.multiply(BigDecimal.valueOf(num)), 2, RoundingMode.HALF_UP); } private CouponRecordDO useCouponRecord(String orderId, BigDecimal amount, String couponRecordId){ -- Gitblit v1.9.3