Bladeren bron

feat: 写了一些关于优惠券的逻辑

DingXiaoYu 2 jaren geleden
bovenliggende
commit
e7a95ae277

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

@@ -0,0 +1,32 @@
+package com.seecoder.BlueWhale.controller;
+
+import com.seecoder.BlueWhale.service.CouponService;
+import com.seecoder.BlueWhale.vo.CouponGroupVO;
+import com.seecoder.BlueWhale.vo.ResultVO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/coupons")
+public class CouponController {
+
+    @Autowired
+    CouponService couponService;
+
+    @PostMapping
+    public ResultVO<Boolean> createCouponGroup(@RequestBody CouponGroupVO couponGroupVO){
+        return ResultVO.buildSuccess(couponService.createCouponGroup(couponGroupVO));
+    }
+
+    @GetMapping("/group")
+    public ResultVO<List<CouponGroupVO>> getCouponGroups(){
+        return ResultVO.buildSuccess(couponService.getCouponGroups());
+    }
+
+    @PostMapping("/receive")
+    public ResultVO<Boolean> receiveCoupon(Integer couponGroupId){
+        return ResultVO.buildSuccess(couponService.receiveCoupon(couponGroupId));
+    }
+}

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

@@ -49,4 +49,8 @@ public class BlueWhaleException extends RuntimeException{
     public static BlueWhaleException stockNotEnough(){
         return new BlueWhaleException("库存不足!");
     }
+
+    public static BlueWhaleException fullReductionCouponError(){
+        return new BlueWhaleException("满减券设置错误!");
+    }
 }

+ 7 - 0
src/main/java/com/seecoder/BlueWhale/repository/CouponGroupRepository.java

@@ -3,5 +3,12 @@ package com.seecoder.BlueWhale.repository;
 import com.seecoder.BlueWhale.po.CouponGroup;
 import org.springframework.data.jpa.repository.JpaRepository;
 
+import java.util.List;
+
 public interface CouponGroupRepository extends JpaRepository<CouponGroup, Integer> {
+    List<CouponGroup> findByStoreId(Integer storeId);
+
+    List<CouponGroup> findByRestGreaterThan(Integer rest);
+
+
 }

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

@@ -3,5 +3,9 @@ package com.seecoder.BlueWhale.repository;
 import com.seecoder.BlueWhale.po.Coupon;
 import org.springframework.data.jpa.repository.JpaRepository;
 
+import java.util.List;
+
 public interface CouponRepository extends JpaRepository<Coupon, Integer> {
+    List<Coupon> findByUserId(Integer userId);
+
 }

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

@@ -1,5 +1,14 @@
 package com.seecoder.BlueWhale.service;
 
+import com.seecoder.BlueWhale.vo.CouponGroupVO;
+
+import java.util.List;
+
 public interface CouponService {
 
+    Boolean createCouponGroup(CouponGroupVO couponGroupVO);
+
+    List<CouponGroupVO> getCouponGroups();
+
+    Boolean receiveCoupon(Integer couponGroupId);
 }

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

@@ -1,18 +1,82 @@
 package com.seecoder.BlueWhale.serviceImpl;
 
+import com.seecoder.BlueWhale.enums.CouponTypeEnum;
+import com.seecoder.BlueWhale.exception.BlueWhaleException;
+import com.seecoder.BlueWhale.po.Coupon;
 import com.seecoder.BlueWhale.po.CouponGroup;
+import com.seecoder.BlueWhale.po.User;
 import com.seecoder.BlueWhale.repository.CouponGroupRepository;
+import com.seecoder.BlueWhale.repository.CouponRepository;
 import com.seecoder.BlueWhale.service.CouponService;
+import com.seecoder.BlueWhale.util.SecurityUtil;
+import com.seecoder.BlueWhale.vo.CouponGroupVO;
 import com.seecoder.BlueWhale.vo.CouponVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
 @Service
 public class CouponServiceImpl implements CouponService {
 
     @Autowired
     CouponGroupRepository couponGroupRepository;
 
+    @Autowired
+    CouponRepository couponRepository;
+
+    @Autowired
+    SecurityUtil securityUtil;
+
+    @Override
+    public Boolean createCouponGroup(CouponGroupVO couponGroupVO) {
+        if (couponGroupVO.getType()== CouponTypeEnum.FULL_REDUCTION){
+            if (couponGroupVO.getSatisfaction()==null || couponGroupVO.getMinus()==null ||
+            couponGroupVO.getSatisfaction()<couponGroupVO.getMinus()){
+                throw BlueWhaleException.fullReductionCouponError();
+            }
+        }
+        CouponGroup couponGroup=couponGroupVO.toPO();
+        couponGroupRepository.save(couponGroup);
+        return true;
+    }
+
+    @Override
+    public List<CouponGroupVO> getCouponGroups() {
+        User user=securityUtil.getCurrentUser();
+        switch (user.getRole()){
+            case CUSTOMER:
+                List<CouponGroup> couponGroups=couponGroupRepository.findByRestGreaterThan(0);
+                List<Coupon> coupons=couponRepository.findByUserId(user.getId());
+                Set<Integer> received=coupons.stream()
+                        .map(Coupon::getGroupId)
+                        .collect(Collectors.toSet());
+                return couponGroups.stream()
+                        .filter(x->!received.contains(x.getId()))
+                        .map(CouponGroup::toVO)
+                        .collect(Collectors.toList());
+            case STAFF:
+                return couponGroupRepository.findByStoreId(user.getStoreId()).stream()
+                        .map(CouponGroup::toVO).collect(Collectors.toList());
+            case MANAGER:
+            case CEO:
+                return couponGroupRepository.findAll().stream()
+                        .map(CouponGroup::toVO).collect(Collectors.toList());
+        }
+        return null;
+    }
+
+    @Override
+    public Boolean receiveCoupon(Integer couponGroupId) {
+        CouponGroup couponGroup=couponGroupRepository.findById(couponGroupId).get();
+        if (couponGroup.getRest()<=0){
+
+        }
+        return null;
+    }
+
     private CouponVO wrapWithGroupId(CouponVO couponVO){
         CouponGroup couponGroup=couponGroupRepository.findById(couponVO.getGroupId()).get();
         couponVO.setSatisfaction(couponGroup.getSatisfaction());
@@ -21,4 +85,5 @@ public class CouponServiceImpl implements CouponService {
         couponVO.setStoreId(couponGroup.getStoreId());
         return couponVO;
     }
+
 }