Ver código fonte

refactor(marketing): 重构促销活动工厂方法

- 修改 goodsListPrice 方法返回类型为 JMap<String, Object>
- 优化促销活动逻辑,增加商品促销信息和折扣信息
- 更新相关服务接口和实现类
hechunping 3 meses atrás
pai
commit
a23ff11986

+ 1 - 1
src/main/java/com/xynet/marketing/service/PromotionService.java

@@ -44,5 +44,5 @@ public interface PromotionService {
      */
     void updateEnableStatus(JMap<String, Object> param);
 
-    List<JMap<String, Object>> goodsListPrice(JMap<String, Object> param);
+    JMap<String, Object> goodsListPrice(JMap<String, Object> param);
 }

+ 1 - 3
src/main/java/com/xynet/marketing/service/factory/promotion/PromotionFactory.java

@@ -3,8 +3,6 @@ package com.xynet.marketing.service.factory.promotion;
 
 import com.xynet.marketing.utils.collections.map.JMap;
 
-import java.util.List;
-
 /**
  * 促销活动工厂-接口
  *
@@ -21,5 +19,5 @@ public interface PromotionFactory {
      */
     Integer saveOrUpdate(JMap<String, Object> param);
 
-    List<JMap<String, Object>> goodsListPrice(JMap<String, Object> param);
+    JMap<String, Object> goodsListPrice(JMap<String, Object> param);
 }

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

@@ -75,7 +75,7 @@ public class PromotionFactoryBase extends ServiceImpl<PromotionMapper, Promotion
     }
 
     @Override
-    public List<JMap<String, Object>> goodsListPrice(JMap<String, Object> param) {
+    public JMap<String, Object> goodsListPrice(JMap<String, Object> param) {
         List<JMap<String, Object>> goodsList = param.getListMap("goodsList");
         String deviceId = param.getString("deviceId");
         Integer mercId = param.getInt("mercId");
@@ -90,7 +90,9 @@ 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("msg", "");
         }
+        param.set("goodsList", goodsList);
         //查询可使用方案列表
         LambdaQueryWrapper<Promotion> lqw = new LambdaQueryWrapper<Promotion>()
                 .eq(Promotion::getMercId, mercId)
@@ -101,7 +103,7 @@ public class PromotionFactoryBase extends ServiceImpl<PromotionMapper, Promotion
                 .orderByDesc(Promotion::getWeight);
         List<Promotion> promotionList = list(lqw);
         if (!Emptys.check(promotionList)) {
-            return null;
+            return param;
         }
         //判断设备是否符合
         for (int i = 0; i < promotionList.size(); i++) {
@@ -119,7 +121,7 @@ public class PromotionFactoryBase extends ServiceImpl<PromotionMapper, Promotion
         }
         //重新判断活动是否为空
         if (!Emptys.check(promotionList)) {
-            return null;
+            return param;
         }
         //查询活动商品表
         List<Integer> promotionIdList = promotionList.stream().map(Promotion::getId).collect(Collectors.toList());
@@ -154,6 +156,8 @@ public class PromotionFactoryBase extends ServiceImpl<PromotionMapper, Promotion
                         goods.set("promotionType3", true);
                         //优惠价格
                         goods.set("priceOnsale", promotionGoods.get("priceOnsale"));
+                        goods.set("promotion", promotion);
+                        goods.set("msg", goods.getString("msg") + "特价");
                         //优惠活动
                         List<Object> promotionList1 = goods.getList("promotionList");
                         promotionList1.add(promotion);
@@ -193,9 +197,9 @@ public class PromotionFactoryBase extends ServiceImpl<PromotionMapper, Promotion
                             //设置优惠信息
                             BigDecimal scalar = new BigDecimal(priceJson.getStr("scalar"));
                             //优惠价格
-                            //TODO 处理计算精度问题
-                            goods.set("priceOnsale", goods.getInt("price") * scalar.doubleValue());
+                            goods.set("priceOnsale", scalar.multiply(new BigDecimal(goods.getInt("price"))).intValue());
                             goods.set("promotionType2", true);
+                            goods.set("msg", priceJson.getStr("scalar").replace("0.", "") + "折;");
                         }
                         if (Objects.equals(promotion.getType(), PromotionTypeEnum.T_1.getCode())) {
                             goods.set("promotionType3", true);
@@ -209,6 +213,8 @@ public class PromotionFactoryBase extends ServiceImpl<PromotionMapper, Promotion
                 }
             }
         }
-        return goodsList;
+        param.getListMap("goodsList");
+        param.put("goodsList", goodsList);
+        return param;
     }
 }

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

@@ -7,8 +7,6 @@ import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
-import java.util.List;
-
 /**
  * @author hechunping
  * @date 2025/1/22
@@ -26,7 +24,7 @@ public class PromotionFactoryV2 implements PromotionFactory {
     }
 
     @Override
-    public List<JMap<String, Object>> goodsListPrice(JMap<String, Object> param) {
+    public JMap<String, Object> goodsListPrice(JMap<String, Object> param) {
         return promotionFactoryBase.goodsListPrice(param);
     }
 }

+ 1 - 1
src/main/java/com/xynet/marketing/service/impl/PromotionServiceImpl.java

@@ -97,7 +97,7 @@ public class PromotionServiceImpl extends ServiceImpl<PromotionMapper, Promotion
     }
 
     @Override
-    public List<JMap<String, Object>> goodsListPrice(JMap<String, Object> param) {
+    public JMap<String, Object> goodsListPrice(JMap<String, Object> param) {
         PromotionFactory promotionFactory = FactoryUtils.getService(PromotionFactory.class, "promotion_base");
         return promotionFactory.goodsListPrice(param);
     }