瀏覽代碼

fix(order): 修正订单商品金额和积分抵扣计算逻辑

- 修改商品总额计算方式,改为使用当前商品的小计金额
- 积分抵扣金额显示为负数,新增四舍五入保留4位小数处理
- 商品明细列表中的商品总额使用当前商品小计金额展示
- 明细积分抵扣金额按比例分摊后进行四舍五入处理,保持显示精度一致
SheepHy 2 天之前
父節點
當前提交
fc5b3638b0
共有 1 個文件被更改,包括 9 次插入9 次删除
  1. 9 9
      yami-shop-service/src/main/java/com/yami/shop/service/impl/OrderServiceImpl.java

+ 9 - 9
yami-shop-service/src/main/java/com/yami/shop/service/impl/OrderServiceImpl.java

@@ -2122,9 +2122,9 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
                     // 商品总数量(每行的商品数量)
                     totalProductCount += item.getProdCount() != null ? item.getProdCount() : 0;
                     
-                    // 商品总额(每行的商品总额是订单总额,需要按商品数量比例分摊
-                    if (order.getTotal() != null && order.getProductNums() > 0) {
-                        totalAmount += Arith.div(order.getTotal(), order.getProductNums()) * item.getProdCount();
+                    // 商品总额(每行单独计算,使用当前商品的小计金额
+                    if (item.getProductTotalAmount() != null) {
+                        totalAmount += item.getProductTotalAmount();
                     }
                     
                     // 运费(按商品数量比例分摊)
@@ -2160,8 +2160,8 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             // 运费(索引15)
             ExportUtils.createCell(sheet, summaryRow, 15, 0, 2, totalFreight, numberStyle);
 
-            // 积分抵扣(索引16,显示为负数)
-            ExportUtils.createCell(sheet, summaryRow, 16, 0, 2, "-" + totalOffsetPoints, numberStyle);
+            // 积分抵扣(索引16,显示为负数,四舍五入保留后4位
+            ExportUtils.createCell(sheet, summaryRow, 16, 0, 2, "-" + Arith.round(totalOffsetPoints, 4), numberStyle);
 
             // 实付金额(索引17)
             ExportUtils.createCell(sheet, summaryRow, 17, 0, 2, totalActualAmount, numberStyle);
@@ -2256,17 +2256,17 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             // 商品总数量(使用当前商品数量)
             ExportUtils.createCell(sheet, row, 13, 0, rowNum, item.getProdCount(), dataStyle);
 
-            // 商品总额(元)
-            ExportUtils.createCell(sheet, row, 14, 0, rowNum, order.getTotal(), numberStyle);
+            // 商品总额(元) - 每行单独计算,使用当前商品的小计金额
+            ExportUtils.createCell(sheet, row, 14, 0, rowNum, item.getProductTotalAmount(), numberStyle);
 
             // 运费(元) - 按商品数量比例分摊
             double freightPerItem = order.getProductNums() > 0 ? Arith.div(order.getFreightAmount(), order.getProductNums()) * item.getProdCount() : 0;
             ExportUtils.createCell(sheet, row, 15, 0, rowNum, freightPerItem, numberStyle);
 
-            // 积分抵扣(元) - 按商品数量比例分摊,显示为负数
+            // 积分抵扣(元) - 按商品数量比例分摊,显示为负数,四舍五入保留后4位
             double offsetPointsPerItem = (order.getOffsetPoints() != null && order.getProductNums() > 0) 
                 ? Arith.div(Arith.div(Double.valueOf(order.getOffsetPoints()), 100), order.getProductNums()) * item.getProdCount() : 0;
-            ExportUtils.createCell(sheet, row, 16, 0, rowNum, "-" + offsetPointsPerItem, numberStyle);
+            ExportUtils.createCell(sheet, row, 16, 0, rowNum, "-" + Arith.round(offsetPointsPerItem, 4), numberStyle);
 
             // 实付金额 - 按商品数量比例分摊
             double actualTotalPerItem = order.getProductNums() > 0 ? Arith.div(order.getActualTotal(), order.getProductNums()) * item.getProdCount() : 0;