Prechádzať zdrojové kódy

线上预定 商家端 分类删除效验修改

qinxuyang 3 týždňov pred
rodič
commit
45a8a567e5

+ 4 - 6
alien-entity/src/main/resources/mapper/UserReservationMapper.xml

@@ -181,7 +181,7 @@
 
     <!-- 查询分类下是否有符合条件的预订信息
          条件:订单状态为"待使用"(1)或"已完成"(2)
-         对于"已完成"状态的订单,结束时间需要在当前时间3小时内 -->
+         对于"已完成"状态的订单,要求 当前时间 < 结束时间 + 3小时 -->
     <select id="countReservationsByCategoryAndOrderStatus" resultType="java.lang.Long">
         SELECT COUNT(DISTINCT ur.id)
         FROM user_reservation ur
@@ -194,7 +194,7 @@
             -- 订单状态为"待使用"(1),直接符合条件
             uro.order_status = 1
             OR
-            -- 订单状态为"已完成"(2),需要检查结束时间在3小时内
+            -- 订单状态为"已完成"(2),需要检查 当前时间 小于 订单结束时间+ 3小时
             (
               uro.order_status = 2
               AND ur.end_time IS NOT NULL
@@ -204,8 +204,7 @@
                 (
                   LENGTH(TRIM(ur.end_time)) &gt; 5
                   AND STR_TO_DATE(TRIM(ur.end_time), '%Y-%m-%d %H:%i') IS NOT NULL
-                  AND STR_TO_DATE(TRIM(ur.end_time), '%Y-%m-%d %H:%i') &lt; NOW()
-                  AND STR_TO_DATE(TRIM(ur.end_time), '%Y-%m-%d %H:%i') &gt; DATE_SUB(NOW(), INTERVAL 3 HOUR)
+                  AND DATE_ADD(STR_TO_DATE(TRIM(ur.end_time), '%Y-%m-%d %H:%i'), INTERVAL 3 HOUR) &gt; NOW()
                 )
                 OR
                 -- 如果 end_time 是时间格式 (HH:mm),需要结合 reservation_date
@@ -213,8 +212,7 @@
                   LENGTH(TRIM(ur.end_time)) &lt;= 5
                   AND ur.reservation_date IS NOT NULL
                   AND STR_TO_DATE(CONCAT(DATE_FORMAT(ur.reservation_date, '%Y-%m-%d'), ' ', TRIM(ur.end_time)), '%Y-%m-%d %H:%i') IS NOT NULL
-                  AND STR_TO_DATE(CONCAT(DATE_FORMAT(ur.reservation_date, '%Y-%m-%d'), ' ', TRIM(ur.end_time)), '%Y-%m-%d %H:%i') &lt; NOW()
-                  AND STR_TO_DATE(CONCAT(DATE_FORMAT(ur.reservation_date, '%Y-%m-%d'), ' ', TRIM(ur.end_time)), '%Y-%m-%d %H:%i') &gt; DATE_SUB(NOW(), INTERVAL 3 HOUR)
+                  AND DATE_ADD(STR_TO_DATE(CONCAT(DATE_FORMAT(ur.reservation_date, '%Y-%m-%d'), ' ', TRIM(ur.end_time)), '%Y-%m-%d %H:%i'), INTERVAL 3 HOUR) &gt; NOW()
                 )
               )
             )

+ 11 - 11
alien-store/src/main/java/shop/alien/store/service/impl/StoreReservationServiceImpl.java

@@ -540,22 +540,22 @@ public class StoreReservationServiceImpl extends ServiceImpl<StoreReservationMap
             return true;
         }
 
-        // 判断订单状态:只有已取消(4)、已退款(7)、已完成(2)状态才能删除
+        // 判断订单状态:只有已取消(4)、已退款(7)、已完成(2)、已过期(3)状态才能删除
         Integer orderStatus = order.getOrderStatus();
         if (orderStatus == null) {
             throw new RuntimeException("订单状态异常,无法删除");
         }
 
-        // 定义可删除的订单状态:2:已完成, 4:已取消, 7:已退款
-        boolean canDelete = orderStatus == 2 || orderStatus == 4 || orderStatus == 7;
+        // 定义可删除的订单状态:2:已完成, 3:已过期, 4:已取消, 7:已退款
+        boolean canDelete = orderStatus == 2 || orderStatus == 3 || orderStatus == 4 || orderStatus == 7;
 
         if (!canDelete) {
             String statusText = getOrderStatusText(orderStatus);
-            throw new RuntimeException("订单状态为" + statusText + ",不允许删除。只有已取消、已退款、已完成状态的订单可以删除");
+            throw new RuntimeException("订单状态为" + statusText + ",不允许删除。只有已取消、已退款、已完成、已过期状态的订单可以删除");
         }
 
-        // 已完成订单:仅当当前时间 > 预约结束时间 + 3小时才允许删除
-        validateCompletedReservationDeleteTimeWindow(reservation, orderStatus);
+        // 已过期订单:仅当当前时间 > 预约结束时间 + 3小时才允许删除
+        validateExpiredReservationDeleteTimeWindow(reservation, orderStatus);
 
         // 删除订单记录(逻辑删除)
         boolean orderDeleteResult = userReservationOrderService.removeById(order.getId());
@@ -575,11 +575,11 @@ public class StoreReservationServiceImpl extends ServiceImpl<StoreReservationMap
     }
 
     /**
-     * 删除校验:已完成状态的预订,需满足“当前时间 > 结束时间 + 3小时”。
+     * 删除校验:已过期状态的预订,需满足“当前时间 > 结束时间 + 3小时”。
      */
-    private void validateCompletedReservationDeleteTimeWindow(UserReservation reservation, Integer orderStatus) {
-        // 仅校验已完成状态
-        if (orderStatus == null || orderStatus != 2) {
+    private void validateExpiredReservationDeleteTimeWindow(UserReservation reservation, Integer orderStatus) {
+        // 仅校验已过期状态
+        if (orderStatus == null || orderStatus != 3) {
             return;
         }
 
@@ -594,7 +594,7 @@ public class StoreReservationServiceImpl extends ServiceImpl<StoreReservationMap
         Date endPlusThreeHours = calendar.getTime();
 
         if (!new Date().after(endPlusThreeHours)) {
-            throw new RuntimeException("已完成订单需在结束3小时后才可删除");
+            throw new RuntimeException("已过期订单需在结束3小时后才可删除");
         }
     }