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

feat: 完成了查看优惠券等功能

Gudge-ZL пре 2 година
родитељ
комит
dd36831714

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

@@ -2,11 +2,14 @@ package com.seecoder.BlueWhale.controller;
 
 import com.seecoder.BlueWhale.service.CouponService;
 import com.seecoder.BlueWhale.vo.CouponGroupVO;
+import com.seecoder.BlueWhale.vo.CouponVO;
 import com.seecoder.BlueWhale.vo.ResultVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
+import org.springframework.web.bind.annotation.GetMapping;
+
 
 @RestController
 @RequestMapping("/api/coupons")
@@ -29,4 +32,10 @@ public class CouponController {
     public ResultVO<Boolean> receiveCoupon(Integer couponGroupId){
         return ResultVO.buildSuccess(couponService.receiveCoupon(couponGroupId));
     }
+
+    @GetMapping
+    public ResultVO<List<CouponVO>> getCoupons(){
+        return ResultVO.buildSuccess(couponService.getCoupons());
+    }
+    
 }

+ 7 - 0
src/main/java/com/seecoder/BlueWhale/exception/BlueWhaleException.java

@@ -53,4 +53,11 @@ public class BlueWhaleException extends RuntimeException{
     public static BlueWhaleException fullReductionCouponError(){
         return new BlueWhaleException("满减券设置错误!");
     }
+    public static BlueWhaleException couponNotAllowed(){
+        return new BlueWhaleException("该优惠券不支持使用!");
+    }
+
+    public static BlueWhaleException couponGroupNotEnough(){
+        return new BlueWhaleException("优惠券数量不足!");
+    }
 }

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

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

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

@@ -1,6 +1,7 @@
 package com.seecoder.BlueWhale.service;
 
 import com.seecoder.BlueWhale.vo.CouponGroupVO;
+import com.seecoder.BlueWhale.vo.CouponVO;
 
 import java.util.List;
 
@@ -11,4 +12,6 @@ public interface CouponService {
     List<CouponGroupVO> getCouponGroups();
 
     Boolean receiveCoupon(Integer couponGroupId);
+
+    List<CouponVO> getCoupons();
 }

+ 22 - 2
src/main/java/com/seecoder/BlueWhale/serviceImpl/CouponServiceImpl.java

@@ -72,9 +72,19 @@ public class CouponServiceImpl implements CouponService {
     public Boolean receiveCoupon(Integer couponGroupId) {
         CouponGroup couponGroup=couponGroupRepository.findById(couponGroupId).get();
         if (couponGroup.getRest()<=0){
-
+            throw BlueWhaleException.couponGroupNotEnough();
         }
-        return null;
+        
+        User user=securityUtil.getCurrentUser();
+        Coupon coupon = new Coupon();
+        coupon.setGroupId(couponGroupId);
+        coupon.setUserId(user.getId());
+        coupon.setUsed(false);
+        
+        couponGroup.setRest(couponGroup.getRest()-1);
+        couponGroupRepository.save(couponGroup);
+        couponRepository.save(coupon);
+        return true;
     }
 
     private CouponVO wrapWithGroupId(CouponVO couponVO){
@@ -86,4 +96,14 @@ public class CouponServiceImpl implements CouponService {
         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;
+    }
+
 }

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

@@ -9,9 +9,13 @@ import org.springframework.stereotype.Service;
 
 import com.seecoder.BlueWhale.enums.OrderStatusEnum;
 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;
@@ -34,6 +38,12 @@ public class OrderServiceImpl implements OrderService {
     @Autowired
     ProductRepository productRepository;
 
+    @Autowired
+    CouponRepository couponRepository;
+
+    @Autowired
+    CouponGroupRepository couponGroupRepository;
+
     @Override
     public OrderVO create(OrderVO orderVO) {
         Order order = orderVO.toPO();
@@ -65,11 +75,21 @@ public class OrderServiceImpl implements OrderService {
         if(order.getStatus() != OrderStatusEnum.UNPAID){
             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();
+        }
+        
         order.setStatus(OrderStatusEnum.UNSEND);
         //double price=productRepository.findById(order.getProductId()).get().getPrice();
         //order.setPaid(price*order.getAmount());
         order.setPaid(calculate(orderId,couponId));
         orderRepository.save(order);
+        coupon.setUsed(true);
+        couponRepository.save(coupon);
         return true;
     }
 
@@ -138,7 +158,31 @@ public class OrderServiceImpl implements OrderService {
 
     @Override
     public Double calculate(Integer orderId, Integer couponId) {
-        return 0.0;
+        Order order = orderRepository.findById(orderId).orElse(null);
+        if(order == null){
+            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;
+        }
+        throw BlueWhaleException.couponNotAllowed();
     }
 
     private OrderVO wrapWithProductId(OrderVO orderVO){