From 3a6c70ccfece562accad0a3e3ae67745815d73a7 Mon Sep 17 00:00:00 2001
From: Cui Zhi Feng <cuizf@fengyuntec.com>
Date: 星期三, 18 九月 2024 19:17:45 +0800
Subject: [PATCH] 结算订单号

---
 src/main/java/com/mzl/flower/service/payment/OrderService.java |   26 ++++++++++++++++++--------
 1 files changed, 18 insertions(+), 8 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 8994dcc..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){
@@ -802,10 +812,9 @@
                 orderIds.add(o.getId());
             }
 
-            List<OrderItem> itemList = orderItemMapper.selectList(
-                    new QueryWrapper<OrderItem>().in("order_id", orderIds));
+            List<OrderItemListDTO> itemList = orderItemMapper.getOrderItems(orderIds);
             Map<String, List<OrderItemListDTO>> map = new HashMap<>();
-            for (OrderItem oi : itemList) {
+            for (OrderItemListDTO oi : itemList) {
                 String orderId = oi.getOrderId();
                 List<OrderItemListDTO> ll = map.computeIfAbsent(orderId, k -> new ArrayList<>());
                 OrderItemListDTO d = new OrderItemListDTO();
@@ -929,8 +938,9 @@
                 if(llc == null){
                     llc = new OrderCheckLocationListDTO();
                     BeanUtils.copyProperties(c, llc);
-                    rMap.put(locationId, llc);
+                    llc.setTotalAmount(new BigDecimal(0));
 
+                    rMap.put(locationId, llc);
                     result.add(llc);
                 }
 

--
Gitblit v1.9.3