Преглед изворни кода

refactor(marketing): 重构计算逻辑

- 修改 EnquiryServiceImpl 中的金额计算方式,使用 goods.getInt("amount") 替代计算- 在 PromotionFactoryBase 中添加 goods 的 amount 属性,并在计算优惠后更新 amount
- 调整满减活动中的价格计算逻辑,确保计算结果更准确
hechunping пре 3 месеци
родитељ
комит
872b40bd4c

+ 3 - 1
src/main/java/com/xynet/marketing/service/factory/promotion/impl/base/PromotionFactoryBase.java

@@ -92,6 +92,7 @@ public class PromotionFactoryBase extends ServiceImpl<PromotionMapper, Promotion
             goods.set("havePromotion", false);
             goods.set("promotionList", new ArrayList<Promotion>());
             goods.set("priceOnsale", goods.get("price"));
+            goods.set("amount", goods.getInt("price") * goods.getInt("num"));
             goods.set("msg", "");
         }
         param.set("goodsList", goodsList);
@@ -263,8 +264,9 @@ public class PromotionFactoryBase extends ServiceImpl<PromotionMapper, Promotion
                         //计算公式:(单价*数量/总金额*总优惠)
                         Integer goodsYh = promotionPriceOnsale.multiply(num).divide(zje, 2, BigDecimal.ROUND_HALF_UP).multiply(zyh).setScale(0, RoundingMode.CEILING).intValue();
 
-                        Integer priceOnsale = promotionPriceOnsale.multiply(num).subtract(new BigDecimal(goodsYh)).intValue();
+                        Integer priceOnsale = promotionPriceOnsale.subtract(new BigDecimal(goodsYh).divide(num, 2, BigDecimal.ROUND_HALF_UP)).intValue();
                         goods.set("priceOnsale", priceOnsale);
+                        goods.set("amount", goods.getInt("amount") - goodsYh);
                         goods.set("msg", goods.getString("msg") + "满减活动减:" + (goodsYh * 0.01) + "元;");
                     }
                 }

+ 2 - 2
src/main/java/com/xynet/marketing/service/impl/EnquiryServiceImpl.java

@@ -49,11 +49,11 @@ public class EnquiryServiceImpl implements EnquiryService {
                     .set("priceOnsale", goods.get("priceOnsale"))
                     .set("num", goods.get("num"))
                     .set("msg", goods.get("msg"))
-                    .set("amount", goods.getInt("priceOnsale") * goods.getInt("num"))
+                    .set("amount", goods.getInt("amount"))
             ;
             resultGoodsList.add(resultGoods);
             orderOldAmount += goods.getInt("price") * goods.getInt("num");
-            orderAmount += goods.getInt("priceOnsale") * goods.getInt("num");
+            orderAmount += goods.getInt("amount");
         }
         //订单原价
         result.put("orderOldAmount", orderOldAmount);