Explorar o código

feat: 完成了优惠券模块

DingXiaoYu %!s(int64=2) %!d(string=hai) anos
pai
achega
1f833ed572

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

@@ -37,5 +37,9 @@ public class CouponController {
     public ResultVO<List<CouponVO>> getCoupons(){
         return ResultVO.buildSuccess(couponService.getCoupons());
     }
-    
+
+    @GetMapping
+    public ResultVO<List<CouponVO>> getCouponsWithStoreId(@RequestParam("storeId")Integer storeId){
+        return ResultVO.buildSuccess(couponService.getCouponsWithStoreId(storeId));
+    }
 }

+ 4 - 0
src/main/java/com/seecoder/BlueWhale/repository/CouponRepository.java

@@ -7,4 +7,8 @@ import java.util.List;
 
 public interface CouponRepository extends JpaRepository<Coupon, Integer> {
     List<Coupon> findByUserId(Integer userId);
+
+    List<Coupon> findByUserIdAndUsed(Integer userId, Boolean used);
+
+
 }

+ 2 - 0
src/main/java/com/seecoder/BlueWhale/service/CouponService.java

@@ -14,4 +14,6 @@ public interface CouponService {
     Boolean receiveCoupon(Integer couponGroupId);
 
     List<CouponVO> getCoupons();
+
+    List<CouponVO> getCouponsWithStoreId(Integer storeId);
 }

+ 11 - 0
src/main/java/com/seecoder/BlueWhale/serviceImpl/CouponServiceImpl.java

@@ -95,6 +95,17 @@ public class CouponServiceImpl implements CouponService {
                 .collect(Collectors.toList());
     }
 
+    @Override
+    public List<CouponVO> getCouponsWithStoreId(Integer storeId) {
+        User user=securityUtil.getCurrentUser();
+        return couponRepository.findByUserIdAndUsed(user.getId(), false).stream()
+                .filter(x->{
+                    CouponGroup couponGroup=couponGroupRepository.findById(x.getGroupId()).get();
+                    return couponGroup.getStoreId()==0 || couponGroup.getStoreId().equals(storeId);
+                }).map(x->wrapWithGroupId(x.toVO()))
+                .collect(Collectors.toList());
+    }
+
     private CouponVO wrapWithGroupId(CouponVO couponVO){
         CouponGroup couponGroup=couponGroupRepository.findById(couponVO.getGroupId()).get();
         couponVO.setSatisfaction(couponGroup.getSatisfaction());

+ 6 - 1
src/main/java/com/seecoder/BlueWhale/serviceImpl/OrderServiceImpl.java

@@ -13,6 +13,7 @@ import org.springframework.stereotype.Service;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 @Service
@@ -60,6 +61,7 @@ public class OrderServiceImpl implements OrderService {
 
     @Override
     public Boolean pay(Integer orderId,Integer couponId) {
+        User user=securityUtil.getCurrentUser();
         Order order = orderRepository.findById(orderId).orElse(null);
         if(order == null){
             throw BlueWhaleException.orderNotExists();
@@ -69,7 +71,10 @@ public class OrderServiceImpl implements OrderService {
         }
         if (couponId!=0){
             Coupon coupon = couponRepository.findById(couponId).get();
-            if (coupon.getUsed()){
+            CouponGroup couponGroup=couponGroupRepository.findById(coupon.getGroupId()).get();
+            Product product=productRepository.findById(order.getProductId()).get();
+            if (coupon.getUsed() || !coupon.getUserId().equals(user.getId()) ||
+            couponGroup.getStoreId()>0 && !couponGroup.getStoreId().equals(product.getStoreId())){
                 throw BlueWhaleException.couponNotAllowed();
             }
             coupon.setUsed(true);

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

@@ -3,7 +3,7 @@ package com.seecoder.BlueWhale.serviceImpl.strategy;
 import com.seecoder.BlueWhale.enums.CouponTypeEnum;
 
 public class Context {
-    private Double price;
+    private final Double price;
 
     private CalculateStrategy calculateStrategy;
 

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

@@ -2,9 +2,9 @@ package com.seecoder.BlueWhale.serviceImpl.strategy;
 
 public class FillReductionCouponCalculateStrategy implements CalculateStrategy{
 
-    private Integer satisfaction;
+    private final Integer satisfaction;
 
-    private Integer minus;
+    private final Integer minus;
 
     public FillReductionCouponCalculateStrategy(Integer satisfaction, Integer minus) {
         this.satisfaction = satisfaction;
@@ -13,6 +13,6 @@ public class FillReductionCouponCalculateStrategy implements CalculateStrategy{
 
     @Override
     public Double calculate(Double price) {
-        return null;
+        return price>=satisfaction?price-minus:price;
     }
 }

+ 16 - 1
src/main/java/com/seecoder/BlueWhale/serviceImpl/strategy/SpecialCouponCalculateStrategy.java

@@ -1,8 +1,23 @@
 package com.seecoder.BlueWhale.serviceImpl.strategy;
 
+/**
+ * @Author: DingXiaoyu
+ * @Date: 22:35 2023/12/19
+ * “蓝鲸券”使用规则:
+ * 0-100元区间打九五折;
+ * 100-200元区间打九折;
+ * 200-300元区间打八五折;
+ * 300-400元区间打八折;
+ * 400-500元区间打七五折;
+ * 500元以上区间打七折。
+*/
 public class SpecialCouponCalculateStrategy implements CalculateStrategy{
+
+    static final double[] table={0,95,185,270,350,425};
+    static final double[] discount={0.95,0.9,0.85,0.8,0.75,0.7};
     @Override
     public Double calculate(Double price) {
-        return null;
+        int index=Math.min((int)(price/100),5);
+        return table[index]+(price-100*index)*discount[index];
     }
 }