Prechádzať zdrojové kódy

商家端 分类管理 查询分类下是否有预约信息

qinxuyang 2 týždňov pred
rodič
commit
33087b9b92

+ 3 - 4
alien-entity/src/main/java/shop/alien/mapper/UserReservationMapper.java

@@ -53,11 +53,10 @@ public interface UserReservationMapper extends BaseMapper<UserReservation> {
     List<Integer> listReservationIdsForTimeoutMark();
 
     /**
-     * 查询分类下是否有符合条件的预订信息
-     * 条件:订单状态为"待使用"(1)或"已完成"(2)
-     * 对于"已完成"状态的订单,结束时间需要在当前时间3小时内
+     * 查询分类下是否有符合条件的预订信息(仅 user_reservation,不查订单表;规则同桌位 hasReservation)
+     * 待确认(0)、已确认(1) 视为有预订;已到店(2) 仅当当前时间不超过「预约结束时间 + 3 小时」时视为有预订(无结束时间则视为有预订)
      *
-     * @param categoryId 分类ID
+     * @param categoryId 分类ID(ur.category_id)
      * @param storeId    门店ID
      * @return 符合条件的预订数量
      */

+ 33 - 30
alien-entity/src/main/resources/mapper/UserReservationMapper.xml

@@ -244,43 +244,46 @@
           )
     </select>
 
-    <!-- 查询分类下是否有符合条件的预订信息
-         条件:订单状态为"待使用"(1)或"已完成"(2)
-         对于"已完成"状态的订单,要求 当前时间 < 结束时间 + 3小时 -->
+    <!-- 分类 hasReservation:仅 user_reservation,不联查 user_reservation_order;0/1 有预订;2 在结束+3h 内 -->
     <select id="countReservationsByCategoryAndOrderStatus" resultType="java.lang.Long">
-        SELECT COUNT(DISTINCT ur.id)
+        SELECT COUNT(ur.id)
         FROM user_reservation ur
-        INNER JOIN user_reservation_order uro ON ur.id = uro.reservation_id AND uro.delete_flag = 0
         WHERE ur.delete_flag = 0
           AND ur.category_id = #{categoryId}
           AND ur.store_id = #{storeId}
-          AND uro.order_status IN (1, 2)
           AND (
-            -- 订单状态为"待使用"(1),直接符合条件
-            uro.order_status = 1
-            OR
-            -- 订单状态为"已完成"(2),需要检查 当前时间 小于 订单结束时间+ 3小时
-            (
-              uro.order_status = 2
-              AND ur.end_time IS NOT NULL
-              AND TRIM(ur.end_time) != ''
-              AND (
-                -- 如果 end_time 是完整日期时间格式 (yyyy-MM-dd HH:mm)
-                (
-                  LENGTH(TRIM(ur.end_time)) &gt; 5
-                  AND STR_TO_DATE(TRIM(ur.end_time), '%Y-%m-%d %H:%i') IS NOT NULL
-                  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
-                (
-                  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 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()
-                )
+              ur.status IN (0, 1)
+              OR (
+                  ur.status = 2
+                  AND (
+                      ur.end_time IS NULL
+                      OR TRIM(ur.end_time) = ''
+                      OR
+                      (
+                          (
+                              LENGTH(TRIM(ur.end_time)) &gt; 5
+                              AND STR_TO_DATE(TRIM(ur.end_time), '%Y-%m-%d %H:%i') IS NOT NULL
+                              AND NOW() &lt;= DATE_ADD(STR_TO_DATE(TRIM(ur.end_time), '%Y-%m-%d %H:%i'), INTERVAL 3 HOUR)
+                          )
+                          OR
+                          (
+                              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 NOW() &lt;= 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
+                              )
+                          )
+                      )
+                  )
               )
-            )
           )
     </select>
 

+ 1 - 1
alien-store/src/main/java/shop/alien/store/controller/StoreBookingCategoryController.java

@@ -238,7 +238,7 @@ public class StoreBookingCategoryController {
     }
 
     @ApiOperationSupport(order = 8)
-    @ApiOperation("查询分类下是否有预订信息")
+    @ApiOperation("查询分类下是否有预订信息(0/1 有预订;已到店(2) 在结束时间+3h 内;不依赖订单表)")
     @ApiImplicitParams({
             @ApiImplicitParam(name = "categoryId", value = "分类ID", dataType = "Integer", paramType = "query", required = true),
             @ApiImplicitParam(name = "storeId", value = "门店ID", dataType = "Integer", paramType = "query", required = true)

+ 1 - 1
alien-store/src/main/java/shop/alien/store/service/StoreBookingCategoryService.java

@@ -75,7 +75,7 @@ public interface StoreBookingCategoryService extends IService<StoreBookingCatego
     boolean updateDisplayStatus(Integer id, Integer isDisplay);
 
     /**
-     * 查询分类下是否有预订信息
+     * 查询分类下是否有有效预订(仅 user_reservation.category_id,不查订单表;规则同桌位 hasReservation)
      *
      * @param categoryId 分类ID
      * @param storeId    门店ID

+ 1 - 3
alien-store/src/main/java/shop/alien/store/service/impl/StoreBookingCategoryServiceImpl.java

@@ -366,9 +366,7 @@ public class StoreBookingCategoryServiceImpl extends ServiceImpl<StoreBookingCat
             return false;
         }
         
-        // 查询该门店该分类下是否有符合条件的预订信息
-        // 条件:订单状态为"待使用"(1)或"已完成"(2)
-        // 对于"已完成"状态的订单,结束时间需要在当前时间3小时内
+        // 仅 user_reservation(ur.category_id),不查订单表;0/1 有预订;2 在「结束时间+3h」内算有预订
         long count = userReservationMapper.countReservationsByCategoryAndOrderStatus(categoryId, storeId);
         boolean hasReservation = count > 0;