From f727a93931f801bbcd3b5eb0275169cf55a87d5e Mon Sep 17 00:00:00 2001
From: 陶杰 <1378534974@qq.com>
Date: 星期日, 22 九月 2024 22:40:56 +0800
Subject: [PATCH] 1.优惠券-使用条件-根据满减还是无门槛控制 2.商品限购-根据payment_time来控制

---
 src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplateUserDTO.java   |    2 
 src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplateVipDTO.java    |    2 
 src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplatePointDTO.java  |    2 
 src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java                       |    3 
 src/main/java/com/mzl/flower/service/payment/OrderService.java                     |   27 ++++++++
 src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplateActivyDTO.java |    2 
 src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateActivyController.java     |   19 +++++-
 src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateVipController.java        |   14 +++-
 src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplatePointController.java      |   14 +++-
 src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateUserController.java       |   36 +++++++-----
 src/main/resources/mapper/payment/OrderMapper.xml                                  |   10 +-
 11 files changed, 93 insertions(+), 38 deletions(-)

diff --git a/src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplateActivyDTO.java b/src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplateActivyDTO.java
index ce17931..6e2b34e 100644
--- a/src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplateActivyDTO.java
+++ b/src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplateActivyDTO.java
@@ -111,7 +111,7 @@
     @ApiModelProperty(value = "使用条件,满多少钱")
     @NotNull(message = "使用条件不能为空")
     @Max(value = 99999999,message = "使用条件不能超过99999999")
-    @DecimalMin(value = "0.01", inclusive = true,message = "使用条件大于0")
+//    @DecimalMin(value = "0.01", inclusive = true,message = "使用条件大于0")
     private BigDecimal minOrderAmount;
 
     /**
diff --git a/src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplatePointDTO.java b/src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplatePointDTO.java
index a43f004..4c42fa6 100644
--- a/src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplatePointDTO.java
+++ b/src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplatePointDTO.java
@@ -61,7 +61,7 @@
     @ApiModelProperty(value = "使用条件")
     @NotNull(message = "使用条件不能为空")
     @Max(value = 99999999,message = "使用条件不能超过99999999")
-    @DecimalMin(value = "0.01", inclusive = true,message = "使用条件大于0")
+//    @DecimalMin(value = "0.01", inclusive = true,message = "使用条件大于0")
     private BigDecimal minOrderAmount;
 
     /**
diff --git a/src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplateUserDTO.java b/src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplateUserDTO.java
index 2bbdf17..bee84cf 100644
--- a/src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplateUserDTO.java
+++ b/src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplateUserDTO.java
@@ -59,7 +59,7 @@
     @ApiModelProperty(value = "使用条件")
     @NotNull(message = "使用条件不能为空")
     @Max(value = 99999999,message = "使用条件不能超过99999999")
-    @DecimalMin(value = "0.01", inclusive = true,message = "使用条件大于0")
+//    @DecimalMin(value = "0.01", inclusive = true,message = "使用条件大于0")
     private BigDecimal minOrderAmount;
 
     /**
diff --git a/src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplateVipDTO.java b/src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplateVipDTO.java
index 37bfa1d..96a9138 100644
--- a/src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplateVipDTO.java
+++ b/src/main/java/com/mzl/flower/dto/request/coupon/CreateCouponTemplateVipDTO.java
@@ -53,7 +53,7 @@
     @ApiModelProperty(value = "使用条件")
     @NotNull(message = "使用条件不能为空")
     @Max(value = 99999999,message = "使用条件不能超过99999999")
-    @DecimalMin(value = "0.01", inclusive = true,message = "使用条件大于0")
+//    @DecimalMin(value = "0.01", inclusive = true,message = "使用条件大于0")
     private BigDecimal minOrderAmount;
 
 
diff --git a/src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java b/src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java
index a893c08..6dd5dc4 100644
--- a/src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java
+++ b/src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java
@@ -50,5 +50,6 @@
             "LEFT JOIN t_customer_info c ON t1.create_by = c.user_id ")
     List<Order> getOrderInfoByReceiveTime();
 
-    Integer getFlowerCompleteNumToday(@Param("userId") String userId,@Param("flowerId") Long flowerId);
+    int getFlowerCompleteNumWithinTimeRange(@Param("userId") String userId ,@Param("flowerId") Long flowerId,
+                                            @Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime);
 }
diff --git a/src/main/java/com/mzl/flower/service/payment/OrderService.java b/src/main/java/com/mzl/flower/service/payment/OrderService.java
index 68f2395..770572e 100644
--- a/src/main/java/com/mzl/flower/service/payment/OrderService.java
+++ b/src/main/java/com/mzl/flower/service/payment/OrderService.java
@@ -65,6 +65,7 @@
 import java.math.RoundingMode;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -1575,7 +1576,31 @@
     }
 
     public Integer getFlowerCompleteNumToday(String userId,Long flowerId){
-        Integer completeNum= orderMapper.getFlowerCompleteNumToday(userId,flowerId);
+
+        int completeNum = 0;
+        // 获取当前时间
+        LocalDateTime now = LocalDateTime.now();
+        // 构造今天的17:00
+        LocalDateTime todayAtFivePM = LocalDateTime.of(LocalDate.now(), LocalTime.of(17, 0));
+        // 定义时间区间的开始和结束时间
+        LocalDateTime startTime;
+        LocalDateTime endTime;
+
+        if (now.isAfter(todayAtFivePM)) {
+            // 当前时间大于今天的17:00,取今天17:00到明天17:00的区间
+            startTime = todayAtFivePM;
+            endTime = todayAtFivePM.plusDays(1);  // 明天的17:00
+        } else {
+            // 当前时间小于今天的17:00,取昨天17:00到今天17:00的区间
+            startTime = todayAtFivePM.minusDays(1);  // 昨天的17:00
+            endTime = todayAtFivePM;  // 今天的17:00
+        }
+
+        // 调用Mapper方法,传递开始时间和结束时间
+        completeNum = orderMapper.getFlowerCompleteNumWithinTimeRange(userId, flowerId, startTime, endTime);
+
         return completeNum;
+
+
     }
 }
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 d1282d6..08026a8 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
@@ -177,11 +177,22 @@
 
     private void valid(CreateCouponTemplateActivyDTO dto){
 
-        if (StringUtils.isNotBlank(dto.getCouponDiscountType())
-                && dto.getCouponDiscountType().equals(CouponTypeEnum.DISCOUNT.getType())
-                && dto.getMinOrderAmount().compareTo(dto.getCouponDiscountValue()) < 0) {
-            throw new ValidationException("优惠券使用条件不能小于面值金额");
+//        if (StringUtils.isNotBlank(dto.getCouponDiscountType())
+//                && dto.getCouponDiscountType().equals(CouponTypeEnum.DISCOUNT.getType())
+//                && dto.getMinOrderAmount().compareTo(dto.getCouponDiscountValue()) < 0) {
+//            throw new ValidationException("优惠券使用条件不能小于面值金额");
+//        }
+        if (StringUtils.isNotBlank(dto.getCouponDiscountType()) && dto.getCouponDiscountType().equals(CouponTypeEnum.DISCOUNT.getType())) {
+
+            if(dto.getMinOrderAmount().compareTo(BigDecimal.ZERO)<=0){
+                throw new ValidationException("优惠券使用条件不能小于0");
+            }
+            if(dto.getMinOrderAmount().compareTo(dto.getCouponDiscountValue()) < 0){
+                throw new ValidationException("优惠券使用条件不能小于面值金额");
+            }
+
         }
+
         if (StringUtils.isNotBlank(dto.getCouponDiscountType())
                 && dto.getCouponDiscountType().equals(CouponTypeEnum.DISCOUNT.getType())
                 && dto.getCouponDiscountValue().compareTo(BigDecimal.ZERO) <= 0) {
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 2f05ceb..b9dddbe 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
@@ -216,11 +216,17 @@
 
     private void valid(CreateCouponTemplatePointDTO dto){
 
-        if (StringUtils.isNotBlank(dto.getCouponDiscountType())
-                && dto.getCouponDiscountType().equals(CouponTypeEnum.DISCOUNT.getType())
-                && dto.getMinOrderAmount().compareTo(dto.getCouponDiscountValue()) < 0) {
-            throw new ValidationException("优惠券使用条件不能小于面值金额");
+        if (StringUtils.isNotBlank(dto.getCouponDiscountType()) && dto.getCouponDiscountType().equals(CouponTypeEnum.DISCOUNT.getType())) {
+
+            if(dto.getMinOrderAmount().compareTo(BigDecimal.ZERO)<=0){
+                throw new ValidationException("优惠券使用条件不能小于0");
+            }
+            if(dto.getMinOrderAmount().compareTo(dto.getCouponDiscountValue()) < 0){
+                throw new ValidationException("优惠券使用条件不能小于面值金额");
+            }
+
         }
+
         if (StringUtils.isNotBlank(dto.getCouponDiscountType())
                 && dto.getCouponDiscountType().equals(CouponTypeEnum.DISCOUNT.getType())
                 && dto.getCouponDiscountValue().compareTo(BigDecimal.ZERO) <= 0) {
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 d8be3ea..344ce2f 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
@@ -6,6 +6,7 @@
 import com.mzl.flower.base.R;
 import com.mzl.flower.base.ReturnDataDTO;
 import com.mzl.flower.config.exception.ValidationException;
+import com.mzl.flower.dto.request.coupon.CreateCouponTemplateActivyDTO;
 import com.mzl.flower.dto.request.coupon.CreateCouponTemplateBO;
 import com.mzl.flower.dto.request.coupon.CreateCouponTemplateUserDTO;
 import com.mzl.flower.dto.request.coupon.QueryCouponDTO;
@@ -45,14 +46,8 @@
     @ApiOperation(value = "新增", notes = "新增")
     public ResponseEntity<ReturnDataDTO> create(@Validated @RequestBody CreateCouponTemplateUserDTO dto) {
 
-        if (dto.getCouponDiscountType().equals(CouponTypeEnum.DISCOUNT.getType()) && dto.getMinOrderAmount().compareTo(dto.getCouponDiscountValue()) < 0) {
-            throw new ValidationException("优惠券使用条件不能小于面值金额");
-        }
 
-        if (dto.getCouponDiscountType().equals(CouponTypeEnum.ZERO.getType()) && dto.getMinOrderAmount().compareTo(BigDecimal.ZERO) != 0) {
-            throw new ValidationException("无门槛的订单金额必须为0");
-        }
-
+        valid(dto);
 
         CreateCouponTemplateBO couponTemplateBO = new CreateCouponTemplateBO();
         BeanUtils.copyProperties(dto, couponTemplateBO);
@@ -77,14 +72,7 @@
 
         dto.setId(id);
 
-        if (dto.getCouponDiscountType().equals(CouponTypeEnum.DISCOUNT.getType()) && dto.getMinOrderAmount().compareTo(dto.getCouponDiscountValue()) < 0) {
-            throw new ValidationException("优惠券使用条件不能小于面值金额");
-        }
-
-        if (dto.getCouponDiscountType().equals(CouponTypeEnum.ZERO.getType()) && dto.getMinOrderAmount().compareTo(BigDecimal.ZERO) != 0) {
-            throw new ValidationException("无门槛的订单金额必须为0");
-        }
-
+        valid(dto);
 
         CouponTemplateDO couponTemplateDO = couponTemplateService.getById(dto.getId());
         if (null == couponTemplateDO) {
@@ -187,4 +175,22 @@
     }
 
 
+    private void valid(CreateCouponTemplateUserDTO dto){
+        if (StringUtils.isNotBlank(dto.getCouponDiscountType()) && dto.getCouponDiscountType().equals(CouponTypeEnum.DISCOUNT.getType())) {
+
+            if(dto.getMinOrderAmount().compareTo(BigDecimal.ZERO)<=0){
+                throw new ValidationException("优惠券使用条件不能小于0");
+            }
+            if(dto.getMinOrderAmount().compareTo(dto.getCouponDiscountValue()) < 0){
+                throw new ValidationException("优惠券使用条件不能小于面值金额");
+            }
+
+        }
+
+        if (dto.getCouponDiscountType().equals(CouponTypeEnum.ZERO.getType()) && dto.getMinOrderAmount().compareTo(BigDecimal.ZERO) != 0) {
+            throw new ValidationException("无门槛的订单金额必须为0");
+        }
+    }
+
+
 }
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 ba54ed5..1af24f4 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
@@ -162,11 +162,17 @@
             throw new ValidationException("会员等级不存在");
         }
 
-        if (StringUtils.isNotBlank(dto.getCouponDiscountType())
-                && dto.getCouponDiscountType().equals(CouponTypeEnum.DISCOUNT.getType())
-                && dto.getMinOrderAmount().compareTo(dto.getCouponDiscountValue()) < 0) {
-            throw new ValidationException("优惠券使用条件不能小于面值金额");
+        if (StringUtils.isNotBlank(dto.getCouponDiscountType()) && dto.getCouponDiscountType().equals(CouponTypeEnum.DISCOUNT.getType())) {
+
+            if(dto.getMinOrderAmount().compareTo(BigDecimal.ZERO)<=0){
+                throw new ValidationException("优惠券使用条件不能小于0");
+            }
+            if(dto.getMinOrderAmount().compareTo(dto.getCouponDiscountValue()) < 0){
+                throw new ValidationException("优惠券使用条件不能小于面值金额");
+            }
+
         }
+
         if (StringUtils.isNotBlank(dto.getCouponDiscountType())
                 && dto.getCouponDiscountType().equals(CouponTypeEnum.DISCOUNT.getType())
                 && dto.getCouponDiscountValue().compareTo(BigDecimal.ZERO) <= 0) {
diff --git a/src/main/resources/mapper/payment/OrderMapper.xml b/src/main/resources/mapper/payment/OrderMapper.xml
index 8d5e6e0..18894dc 100644
--- a/src/main/resources/mapper/payment/OrderMapper.xml
+++ b/src/main/resources/mapper/payment/OrderMapper.xml
@@ -261,15 +261,15 @@
         join t_order_point_goods opg on opg.goods_record_id = gr.id
         where opg.order_id = #{orderId}
     </select>
-    <select id="getFlowerCompleteNumToday" resultType="java.lang.Integer">
+    <select id="getFlowerCompleteNumWithinTimeRange" resultType="java.lang.Integer">
         select IFNULL(sum(oi.num),0) as complete_num
         from t_order o
         left join t_order_item oi
         on o.id=oi.order_id
         where o.DELETEd=0 and oi.DELETEd=0
-        and o.status_backend not in ('PENDING','CANCEL','REFUND')
-        and o.create_by=#{userId}
-        AND oi.flower_id=#{flowerId}
-        AND o.complete_time BETWEEN  DATE_SUB(CURDATE(), INTERVAL 1 DAY) + INTERVAL 17 HOUR  AND CURDATE() + INTERVAL 17 HOUR
+          and o.status_backend not in ('PENDING','CANCEL','REFUND')
+          and o.create_by=#{userId}
+          AND oi.flower_id=#{flowerId}
+          AND o.payment_time BETWEEN  #{startTime}  AND #{endTime}
     </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.3