فهرست منبع

feat: 完成了策略模式

DingXiaoYu 2 سال پیش
والد
کامیت
0d58de4d78

+ 1 - 1
src/main/java/com/seecoder/BlueWhale/controller/CouponController.java

@@ -8,7 +8,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
 
 
 import java.util.List;
 import java.util.List;
-import org.springframework.web.bind.annotation.GetMapping;
+
 
 
 
 
 @RestController
 @RestController

+ 8 - 10
src/main/java/com/seecoder/BlueWhale/serviceImpl/CouponServiceImpl.java

@@ -87,6 +87,14 @@ public class CouponServiceImpl implements CouponService {
         return true;
         return true;
     }
     }
 
 
+    @Override
+    public List<CouponVO> getCoupons() {
+        User user=securityUtil.getCurrentUser();
+        return couponRepository.findByUserId(user.getId()).stream()
+                .map(x->wrapWithGroupId(x.toVO()))
+                .collect(Collectors.toList());
+    }
+
     private CouponVO wrapWithGroupId(CouponVO couponVO){
     private CouponVO wrapWithGroupId(CouponVO couponVO){
         CouponGroup couponGroup=couponGroupRepository.findById(couponVO.getGroupId()).get();
         CouponGroup couponGroup=couponGroupRepository.findById(couponVO.getGroupId()).get();
         couponVO.setSatisfaction(couponGroup.getSatisfaction());
         couponVO.setSatisfaction(couponGroup.getSatisfaction());
@@ -96,14 +104,4 @@ public class CouponServiceImpl implements CouponService {
         return couponVO;
         return couponVO;
     }
     }
 
 
-    @Override
-    public List<CouponVO> getCoupons() {
-        User user=securityUtil.getCurrentUser();
-        List<CouponVO> coupons = couponRepository.findByUserId(user.getId()).stream()
-                .map(Coupon::toVO)
-                .map(this::wrapWithGroupId)
-                .collect(Collectors.toList());
-        return coupons;
-    }
-
 }
 }

+ 24 - 49
src/main/java/com/seecoder/BlueWhale/serviceImpl/OrderServiceImpl.java

@@ -1,27 +1,19 @@
 package com.seecoder.BlueWhale.serviceImpl;
 package com.seecoder.BlueWhale.serviceImpl;
 
 
-import java.util.Date;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Service;
-
 import com.seecoder.BlueWhale.enums.OrderStatusEnum;
 import com.seecoder.BlueWhale.enums.OrderStatusEnum;
 import com.seecoder.BlueWhale.exception.BlueWhaleException;
 import com.seecoder.BlueWhale.exception.BlueWhaleException;
-import com.seecoder.BlueWhale.po.Coupon;
-import com.seecoder.BlueWhale.po.CouponGroup;
-import com.seecoder.BlueWhale.po.Order;
-import com.seecoder.BlueWhale.po.Product;
-import com.seecoder.BlueWhale.po.Store;
-import com.seecoder.BlueWhale.repository.CouponGroupRepository;
-import com.seecoder.BlueWhale.repository.CouponRepository;
-import com.seecoder.BlueWhale.repository.OrderRepository;
-import com.seecoder.BlueWhale.repository.ProductRepository;
-import com.seecoder.BlueWhale.repository.StoreRepository;
+import com.seecoder.BlueWhale.po.*;
+import com.seecoder.BlueWhale.repository.*;
 import com.seecoder.BlueWhale.service.OrderService;
 import com.seecoder.BlueWhale.service.OrderService;
+import com.seecoder.BlueWhale.serviceImpl.strategy.Context;
 import com.seecoder.BlueWhale.util.SecurityUtil;
 import com.seecoder.BlueWhale.util.SecurityUtil;
 import com.seecoder.BlueWhale.vo.OrderVO;
 import com.seecoder.BlueWhale.vo.OrderVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
 
 
 @Service
 @Service
 public class OrderServiceImpl implements OrderService {
 public class OrderServiceImpl implements OrderService {
@@ -75,21 +67,16 @@ public class OrderServiceImpl implements OrderService {
         if(order.getStatus() != OrderStatusEnum.UNPAID){
         if(order.getStatus() != OrderStatusEnum.UNPAID){
             throw BlueWhaleException.orderStatusError();
             throw BlueWhaleException.orderStatusError();
         }
         }
-
-        Coupon coupon = couponRepository.findById(couponId).orElse(null);
-        CouponGroup couponGroup = couponGroupRepository.findById(coupon.getGroupId()).orElse(null);
-        Product product = productRepository.findById(order.getProductId()).orElse(null);
-        if(coupon == null || coupon.getUserId() != securityUtil.getCurrentUser().getId() || couponGroup == null || couponGroup.getStoreId() != product.getStoreId()){
-            throw BlueWhaleException.couponNotAllowed();
+        if (couponId!=0){
+            Coupon coupon = couponRepository.findById(couponId).get();
+            if (coupon.getUsed()){
+                throw BlueWhaleException.couponNotAllowed();
+            }
+            coupon.setUsed(true);
+            couponRepository.save(coupon);
         }
         }
-        
         order.setStatus(OrderStatusEnum.UNSEND);
         order.setStatus(OrderStatusEnum.UNSEND);
-        //double price=productRepository.findById(order.getProductId()).get().getPrice();
-        //order.setPaid(price*order.getAmount());
         order.setPaid(calculate(orderId,couponId));
         order.setPaid(calculate(orderId,couponId));
-        orderRepository.save(order);
-        coupon.setUsed(true);
-        couponRepository.save(coupon);
         return true;
         return true;
     }
     }
 
 
@@ -162,27 +149,15 @@ public class OrderServiceImpl implements OrderService {
         if(order == null){
         if(order == null){
             throw BlueWhaleException.orderNotExists();
             throw BlueWhaleException.orderNotExists();
         }
         }
-        
-        Coupon coupon = couponRepository.findById(couponId).orElse(null);
-        CouponGroup couponGroup = couponGroupRepository.findById(coupon.getGroupId()).orElse(null);
-        Product product = productRepository.findById(order.getProductId()).orElse(null);
-        if(coupon == null || coupon.getUserId() != securityUtil.getCurrentUser().getId() || couponGroup == null || couponGroup.getStoreId() != product.getStoreId()){
-            throw BlueWhaleException.couponNotAllowed();
-        }
-
-        Double originalPrice = product.getPrice()*order.getAmount();
-        if(couponGroup.getSatisfaction()>originalPrice){
-            throw BlueWhaleException.couponNotAllowed();
-        }
-
-        switch (couponGroup.getType()){
-            case FULL_REDUCTION:
-                return originalPrice - couponGroup.getMinus();
-            case SPECIAL:
-                // 待完善
-                return originalPrice;
+        Product product = productRepository.findById(order.getProductId()).get();
+        Double origin=order.getAmount()*product.getPrice();
+        if (couponId==0){
+            return origin;
         }
         }
-        throw BlueWhaleException.couponNotAllowed();
+        Coupon coupon = couponRepository.findById(couponId).get();
+        CouponGroup couponGroup = couponGroupRepository.findById(coupon.getGroupId()).get();
+        Context context=new Context(origin,couponGroup.getType(),couponGroup.getSatisfaction(),couponGroup.getMinus());
+        return context.calculate();
     }
     }
 
 
     private OrderVO wrapWithProductId(OrderVO orderVO){
     private OrderVO wrapWithProductId(OrderVO orderVO){

+ 5 - 0
src/main/java/com/seecoder/BlueWhale/serviceImpl/strategy/CalculateStrategy.java

@@ -0,0 +1,5 @@
+package com.seecoder.BlueWhale.serviceImpl.strategy;
+
+public interface CalculateStrategy {
+    Double calculate(Double price);
+}

+ 25 - 0
src/main/java/com/seecoder/BlueWhale/serviceImpl/strategy/Context.java

@@ -0,0 +1,25 @@
+package com.seecoder.BlueWhale.serviceImpl.strategy;
+
+import com.seecoder.BlueWhale.enums.CouponTypeEnum;
+
+public class Context {
+    private Double price;
+
+    private CalculateStrategy calculateStrategy;
+
+    public Context(Double price, CouponTypeEnum couponTypeEnum, Integer satisfaction, Integer minus) {
+        this.price = price;
+        switch (couponTypeEnum){
+            case FULL_REDUCTION:
+                calculateStrategy=new FillReductionCouponCalculateStrategy(satisfaction,minus);
+                break;
+            case SPECIAL:
+                calculateStrategy=new SpecialCouponCalculateStrategy();
+                break;
+        }
+    }
+
+    public Double calculate(){
+        return calculateStrategy.calculate(this.price);
+    }
+}

+ 18 - 0
src/main/java/com/seecoder/BlueWhale/serviceImpl/strategy/FillReductionCouponCalculateStrategy.java

@@ -0,0 +1,18 @@
+package com.seecoder.BlueWhale.serviceImpl.strategy;
+
+public class FillReductionCouponCalculateStrategy implements CalculateStrategy{
+
+    private Integer satisfaction;
+
+    private Integer minus;
+
+    public FillReductionCouponCalculateStrategy(Integer satisfaction, Integer minus) {
+        this.satisfaction = satisfaction;
+        this.minus = minus;
+    }
+
+    @Override
+    public Double calculate(Double price) {
+        return null;
+    }
+}

+ 8 - 0
src/main/java/com/seecoder/BlueWhale/serviceImpl/strategy/SpecialCouponCalculateStrategy.java

@@ -0,0 +1,8 @@
+package com.seecoder.BlueWhale.serviceImpl.strategy;
+
+public class SpecialCouponCalculateStrategy implements CalculateStrategy{
+    @Override
+    public Double calculate(Double price) {
+        return null;
+    }
+}