From f249c277d066e151a84b766a6b82c3bbdbe1326b Mon Sep 17 00:00:00 2001
From: 陶杰 <1378534974@qq.com>
Date: 星期二, 03 九月 2024 13:24:01 +0800
Subject: [PATCH] 1.优惠券-所有修改方法dto自传id 2.优惠券-积分-批量接口改成post方法 3.优惠券-定时任务-会员优惠券每月一号凌晨未使用自动过期 4.优惠券-优惠券下单接口

---
 src/main/java/com/mzl/flower/service/coupon/CouponRecordService.java           |   26 ++++++++
 /dev/null                                                                      |   15 -----
 src/main/java/com/mzl/flower/web/v2/coupon/CouponRecordController.java         |    4 +
 src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateController.java       |    4 +
 src/main/java/com/mzl/flower/schedule/ScheduleService.java                     |    7 ++
 src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java  |   59 +++++++++++++++++++
 src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateActivyController.java |    4 +
 src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateVipController.java    |    3 
 src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateAppController.java    |   29 ++++++++-
 src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplatePointController.java  |   15 ++--
 src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateUserController.java   |    9 --
 11 files changed, 139 insertions(+), 36 deletions(-)

diff --git a/src/main/java/com/mzl/flower/schedule/ScheduleService.java b/src/main/java/com/mzl/flower/schedule/ScheduleService.java
index 2a0c3f6..75f9e07 100644
--- a/src/main/java/com/mzl/flower/schedule/ScheduleService.java
+++ b/src/main/java/com/mzl/flower/schedule/ScheduleService.java
@@ -197,4 +197,11 @@
         log.info("会员优惠券结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
     }
 
+    @Scheduled(cron = "0 30 0 1 * ?")
+    public void expiredVipCouponRecordList() {
+        log.info("会员优惠券过期开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
+        couponRecordService.expiredCouponRecordByListCurMonth();
+        log.info("会员优惠券过期结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
+    }
+
 }
diff --git a/src/main/java/com/mzl/flower/service/coupon/CouponRecordService.java b/src/main/java/com/mzl/flower/service/coupon/CouponRecordService.java
index bc3a84e..accb4a5 100644
--- a/src/main/java/com/mzl/flower/service/coupon/CouponRecordService.java
+++ b/src/main/java/com/mzl/flower/service/coupon/CouponRecordService.java
@@ -75,5 +75,31 @@
 
     boolean checkCurMonVipCouponExists(String couponId, Long customId, LocalDateTime startDateTime,LocalDateTime endDateTime);
 
+    /**
+     * 优惠券使用
+     * @param couponId
+     * @param orderId
+     * @return
+     */
+    boolean useCoupon(String couponId,String orderId);
+
+    /**
+     * 优惠券退单
+     * @param couponId
+     * @param orderId
+     * @return
+     */
+    boolean cancelCouponUsage(String couponId,String orderId);
+
+    /**
+     * 根据订单号查找优惠券信息
+     * @param orderId
+     * @return
+     */
+    List<CouponRecordDO> getCouponListByOrderId(String orderId) ;
+
+
+    CouponRecordDO getCouponByOrderId(String orderId) ;
+
 
 }
diff --git a/src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java b/src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java
index 71f0bc9..18e029a 100644
--- a/src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java
+++ b/src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java
@@ -249,6 +249,7 @@
     public boolean grantVipCouponRecordList() {
 
         try{
+
             LocalDateTime now = LocalDateTime.now();
             LocalDateTime firstDayStart = now.with(TemporalAdjusters.firstDayOfMonth()).withHour(0).withMinute(0).withSecond(0).withNano(0);
             LocalDateTime lastDayEnd = now.with(TemporalAdjusters.lastDayOfMonth()).withHour(23).withMinute(59).withSecond(59).withNano(0);
@@ -424,4 +425,62 @@
         return  baseMapper.selectCount(queryWrapper)>0;
 
     }
+
+    @Transactional
+    @Override
+    public boolean useCoupon(String couponId, String orderId) {
+        // 优惠券为空
+        if(StringUtils.isBlank(couponId)){
+            throw new IllegalArgumentException("无效的优惠券");
+        }
+        // 验证优惠券存在且有效
+        final CouponRecordDO couponRecordDO = baseMapper.selectById(couponId);
+        if(null==couponRecordDO || StringUtils.isBlank(couponRecordDO.getOrderId()) ){
+            throw new IllegalArgumentException("无效的优惠券");
+        }
+        if(couponRecordDO.getStatus().equals(CouponUsedStatusEnum.USED.getType())){
+            throw new IllegalArgumentException("优惠券已经被使用");
+        }
+        if(couponRecordDO.getStatus().equals(CouponUsedStatusEnum.EXPIRED.getType()) || LocalDateTime.now().isAfter(couponRecordDO.getEffectiveEnd())){
+            throw new IllegalArgumentException("优惠券已过期");
+        }
+        if(StringUtils.isBlank(orderId)){
+            throw new IllegalArgumentException("订单id不能为空");
+        }
+
+        // 优惠券使用操作
+        couponRecordDO.setStatus(CouponUsedStatusEnum.USED.getType());
+        couponRecordDO.setUsedTime(LocalDateTime.now());
+        couponRecordDO.setOrderId(orderId);
+
+        return baseMapper.updateById(couponRecordDO)>0;
+    }
+
+    @Transactional
+    @Override
+    public boolean cancelCouponUsage(String couponId, String orderId) {
+        // 查询订单使用的优惠券
+        final CouponRecordDO couponRecordDO = getCouponByOrderId(orderId);
+        // TODO
+
+        return false;
+    }
+
+    @Override
+    public List<CouponRecordDO> getCouponListByOrderId(String orderId) {
+        QueryWrapper<CouponRecordDO> queryWrapper=new QueryWrapper<>();
+        queryWrapper.lambda().eq(CouponRecordDO::getDeleted,TrueOrFalseEnum.FALSE.isFlag())
+                .eq(CouponRecordDO::getOrderId,orderId);
+
+        return baseMapper.selectList(queryWrapper);
+    }
+
+    @Override
+    public CouponRecordDO getCouponByOrderId(String orderId) {
+        final List<CouponRecordDO> couponRecordDOList = getCouponListByOrderId(orderId);
+        if(CollectionUtils.isNotEmpty(couponRecordDOList)){
+            return couponRecordDOList.get(0);
+        }
+        return null;
+    }
 }
diff --git a/src/main/java/com/mzl/flower/web/v2/coupon/CouponRecordController.java b/src/main/java/com/mzl/flower/web/v2/coupon/CouponRecordController.java
index 9cd7758..e7cdb4f 100644
--- a/src/main/java/com/mzl/flower/web/v2/coupon/CouponRecordController.java
+++ b/src/main/java/com/mzl/flower/web/v2/coupon/CouponRecordController.java
@@ -66,7 +66,9 @@
 
     @PutMapping("/{id}")
     @ApiOperation(value = "修改", notes = "修改")
-    public ResponseEntity<ReturnDataDTO>  update(@Validated @RequestBody CreateCouponRecordDTO dto) {
+    public ResponseEntity<ReturnDataDTO>  update(@PathVariable String id,@Validated @RequestBody CreateCouponRecordDTO dto) {
+
+        dto.setId(id);
 
         CouponRecordDO couponRecordDO= couponRecordService.getById(dto.getId());
         if(null==couponRecordDO){
diff --git a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateActivyController.java b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateActivyController.java
index b0d20bc..9b7109e 100644
--- a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateActivyController.java
+++ b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateActivyController.java
@@ -65,8 +65,10 @@
 
     @PutMapping("/{id}")
     @ApiOperation(value = "修改", notes = "修改")
-    public ResponseEntity<ReturnDataDTO> update(@Validated @RequestBody CreateCouponTemplateActivyDTO dto) {
+    public ResponseEntity<ReturnDataDTO> update(@PathVariable String id,@Validated @RequestBody CreateCouponTemplateActivyDTO dto) {
 
+        // 手动设置id值
+        dto.setId(id);
         // 信息验证
         valid(dto);
 
diff --git a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateAppController.java b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateAppController.java
index 5faa3c9..7658080 100644
--- a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateAppController.java
+++ b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateAppController.java
@@ -5,11 +5,14 @@
 import com.mzl.flower.base.BaseController;
 import com.mzl.flower.base.R;
 import com.mzl.flower.base.ReturnDataDTO;
+import com.mzl.flower.config.exception.ValidationException;
 import com.mzl.flower.config.security.SecurityUtils;
+import com.mzl.flower.dto.request.coupon.CreateCouponRecordDTO;
 import com.mzl.flower.dto.request.coupon.QueryActivityEffectCouponDTO;
 import com.mzl.flower.dto.request.coupon.QueryMineCouponRecordDTO;
 import com.mzl.flower.dto.response.coupon.CouponTemplateAppVO;
 import com.mzl.flower.dto.response.coupon.CouponTemplateVO;
+import com.mzl.flower.entity.coupon.CouponTemplateDO;
 import com.mzl.flower.enums.CouponCategoryEnum;
 import com.mzl.flower.enums.CouponGetTypeEnum;
 import com.mzl.flower.enums.CouponStatusEnum;
@@ -19,12 +22,11 @@
 import com.mzl.flower.utils.ConverterUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 
 /**
@@ -113,5 +115,26 @@
 
     }
 
+    @PostMapping("/receive")
+    @ApiOperation(value = "优惠券领取", notes = "优惠券领取")
+    public ResponseEntity<ReturnDataDTO> create(@Validated @RequestBody CreateCouponRecordDTO dto) {
+
+        final CouponTemplateDO couponTemplateDO = couponTemplateService.getById(dto.getCouponId());
+        if(null==couponTemplateDO){
+            throw new ValidationException("优惠券不存在");
+        }
+
+        if(StringUtils.isNotBlank(couponTemplateDO.getStatus()) && couponTemplateDO.getStatus().equals(CouponStatusEnum.INACTIVE.getStatus())){
+            throw new ValidationException("优惠券还未发布");
+        }
+        if(StringUtils.isNotBlank(couponTemplateDO.getStatus()) && couponTemplateDO.getStatus().equals(CouponStatusEnum.EXPIRED.getStatus())){
+            throw new ValidationException("优惠券已下架");
+        }
+
+
+        couponRecordService.createCouponRecord(dto);
+        return returnData(R.SUCCESS.getCode(), null);
+    }
+
 
 }
diff --git a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateController.java b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateController.java
index 2ab7890..aa89964 100644
--- a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateController.java
+++ b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateController.java
@@ -46,8 +46,10 @@
 
     @PutMapping("/{id}")
     @ApiOperation(value = "修改", notes = "修改")
-    public ResponseEntity<ReturnDataDTO>  update(@Validated @RequestBody CreateCouponTemplateDTO dto) {
+    public ResponseEntity<ReturnDataDTO>  update(@PathVariable String id,@Validated @RequestBody CreateCouponTemplateDTO dto) {
 
+        // 手动设置id值
+        dto.setId(id);
         CouponTemplateDO couponTemplateDO= couponTemplateService.getById(dto.getId());
         if(null==couponTemplateDO){
             throw new ValidationException("优惠券不存在");
diff --git a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateCustomerController.java b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateCustomerController.java
deleted file mode 100644
index 8e02b37..0000000
--- a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateCustomerController.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.mzl.flower.web.v2.coupon;
-
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
-* @author @TaoJie
-* @since 2024-08-24
-*/
-@RestController
-@RequestMapping("/v2/coupon-template-point-custom-re")
-public class CouponTemplateCustomerController {
-
-
-}
diff --git a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplatePointController.java b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplatePointController.java
index 4b51ad0..9817a86 100644
--- a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplatePointController.java
+++ b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplatePointController.java
@@ -65,8 +65,9 @@
 
     @PutMapping("/{id}")
     @ApiOperation(value = "修改", notes = "修改")
-    public ResponseEntity<ReturnDataDTO> update(@Validated @RequestBody CreateCouponTemplatePointDTO dto) {
+    public ResponseEntity<ReturnDataDTO> update(@PathVariable String id,@Validated @RequestBody CreateCouponTemplatePointDTO dto) {
         // 信息校验
+        dto.setId(id);
         valid(dto);
 
         CouponTemplateDO couponTemplateDO = couponTemplateService.getById(dto.getId());
@@ -153,9 +154,9 @@
         return returnData(R.SUCCESS.getCode(), null);
     }
 
-    @PutMapping("/batch/expire")
+    @PostMapping("/batch/expire")
     @ApiOperation(value = "批量下架", notes = "批量下架")
-    public ResponseEntity<ReturnDataDTO> expireBatch(BatchCouponTemplateDTO dto) {
+    public ResponseEntity<ReturnDataDTO> expireBatch(@RequestBody BatchCouponTemplateDTO dto) {
 
 
         couponTemplateService.expireBatchCouponTemplate(dto);
@@ -165,9 +166,9 @@
 
 
 
-    @PutMapping("/batch/active")
+    @PostMapping("/batch/active")
     @ApiOperation(value = "批量发布", notes = "批量发布")
-    public ResponseEntity<ReturnDataDTO> activeBatch(BatchCouponTemplateDTO dto) {
+    public ResponseEntity<ReturnDataDTO> activeBatch(@RequestBody BatchCouponTemplateDTO dto) {
 
         couponTemplateService.activeBatchCouponTemplate(dto);
 
@@ -175,9 +176,9 @@
     }
 
 
-    @DeleteMapping("/batch/del")
+    @PostMapping("/batch/del")
     @ApiOperation(value = "批量删除", notes = "批量删除")
-    public ResponseEntity<ReturnDataDTO> deleteBatch(BatchCouponTemplateDTO dto) {
+    public ResponseEntity<ReturnDataDTO> deleteBatch(@RequestBody BatchCouponTemplateDTO dto) {
 
         couponTemplateService.deleteBatchCouponTemplate(dto);
         return returnData(R.SUCCESS.getCode(), null);
diff --git a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateUserController.java b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateUserController.java
index a472602..5b9f19d 100644
--- a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateUserController.java
+++ b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateUserController.java
@@ -7,7 +7,6 @@
 import com.mzl.flower.base.ReturnDataDTO;
 import com.mzl.flower.config.exception.ValidationException;
 import com.mzl.flower.dto.request.coupon.CreateCouponTemplateBO;
-import com.mzl.flower.dto.request.coupon.CreateCouponTemplatePointDTO;
 import com.mzl.flower.dto.request.coupon.CreateCouponTemplateUserDTO;
 import com.mzl.flower.dto.request.coupon.QueryCouponDTO;
 import com.mzl.flower.dto.response.coupon.CouponTemplatePointVO;
@@ -29,11 +28,6 @@
 import org.springframework.web.bind.annotation.*;
 
 import java.math.BigDecimal;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
 
 
 /**
@@ -81,8 +75,9 @@
 
     @PutMapping("/{id}")
     @ApiOperation(value = "修改", notes = "修改")
-    public ResponseEntity<ReturnDataDTO> update(@Validated @RequestBody CreateCouponTemplateUserDTO dto) {
+    public ResponseEntity<ReturnDataDTO> update(@PathVariable String id,@Validated @RequestBody CreateCouponTemplateUserDTO dto) {
 
+        dto.setId(id);
 
         if (dto.getCouponDiscountType().equals(CouponTypeEnum.DISCOUNT.getType()) && dto.getMinOrderAmount().compareTo(dto.getCouponDiscountValue()) < 0) {
             throw new ValidationException("订单金额不能小于折扣金额");
diff --git a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateVipController.java b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateVipController.java
index 158a82b..be32580 100644
--- a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateVipController.java
+++ b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateVipController.java
@@ -63,8 +63,9 @@
 
     @PutMapping("/{id}")
     @ApiOperation(value = "修改", notes = "修改")
-    public ResponseEntity<ReturnDataDTO>  update(@Validated @RequestBody CreateCouponTemplateVipDTO dto) {
+    public ResponseEntity<ReturnDataDTO>  update(@PathVariable String id,@Validated @RequestBody CreateCouponTemplateVipDTO dto) {
 
+        dto.setId(id);
         // 信息验证
         valid(dto);
 

--
Gitblit v1.9.3