Explorar el Código

refactor(marketing): 优化营销活动计算逻辑

- 修改满减券计算方式,使用向上取整
- 优化特价和打折活动的优惠价格计算方法
-规范化优惠活动的消息展示格式
- 调整计算逻辑,确保结果的准确性和一致性
hechunping hace 3 semanas
padre
commit
7768e51511

+ 4 - 2
src/main/java/com/xynet/marketing/service/factory/coupon/merc/impl/base/MercCouponFactoryBase.java

@@ -22,6 +22,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
@@ -367,8 +368,9 @@ public class MercCouponFactoryBase extends ServiceImpl<MercCouponMapper, MercCou
                     BigDecimal zje = new BigDecimal(type1Amount);
                     //总优惠
                     BigDecimal zyh = new BigDecimal(priceOnsaleType1);
-                    Integer priceOnsale = promotionPriceOnsale.multiply(num).multiply(zyh).divide(zje, 0, BigDecimal.ROUND_HALF_UP).intValue();
-                    BigDecimal subtract = promotionPriceOnsale.subtract(new BigDecimal(priceOnsale));
+                    //计算公式:(单价*数量*总优惠)/总金额
+                    Integer priceOnsale = promotionPriceOnsale.multiply(num).multiply(zyh).divide(zje).setScale(0, RoundingMode.CEILING).intValue();
+                    BigDecimal subtract = promotionPriceOnsale.subtract(new BigDecimal(priceOnsale)).divide(new BigDecimal(100)).multiply(new BigDecimal(goods.getInt("num")));
                     goods.set("priceOnsale", priceOnsale);
                     goods.set("msg", goods.getString("msg") + "满减券减:" + subtract + "元;");
                 }

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

@@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
@@ -157,7 +158,7 @@ public class PromotionFactoryBase extends ServiceImpl<PromotionMapper, Promotion
                         //优惠价格
                         goods.set("priceOnsale", promotionGoods.get("priceOnsale"));
                         goods.set("promotion", promotion);
-                        goods.set("msg", goods.getString("msg") + "特价");
+                        goods.set("msg", goods.getString("msg") + "促销活动:特价;");
                         //优惠活动
                         List<Object> promotionList1 = goods.getList("promotionList");
                         promotionList1.add(promotion);
@@ -196,10 +197,12 @@ public class PromotionFactoryBase extends ServiceImpl<PromotionMapper, Promotion
                             JSONObject priceJson = JSONUtil.parseObj(promotion.getPrice());
                             //设置优惠信息
                             BigDecimal scalar = new BigDecimal(priceJson.getStr("scalar"));
-                            //优惠价格
-                            goods.set("priceOnsale", scalar.multiply(new BigDecimal(goods.getInt("price"))).intValue());
+                            //优惠价格 向上取整
+                            int price = scalar.multiply(new BigDecimal(goods.getInt("price"))).setScale(0, RoundingMode.CEILING).intValue();
+                            goods.set("priceOnsale", price);
+
                             goods.set("promotionType2", true);
-                            goods.set("msg", priceJson.getStr("scalar").replace("0.", "") + "折;");
+                            goods.set("msg", "促销活动:" + priceJson.getStr("scalar").replace("0.", "") + "折;");
                         }
                         if (Objects.equals(promotion.getType(), PromotionTypeEnum.T_1.getCode())) {
                             goods.set("promotionType3", true);