|
|
@@ -284,46 +284,53 @@
|
|
|
)
|
|
|
</select>
|
|
|
|
|
|
- <!-- 查询桌号下是否有符合条件的预订信息
|
|
|
- 条件:订单状态为"待使用"(1)或"已完成"(2)
|
|
|
- 对于"已完成"状态的订单,结束时间需要在当前时间3小时内 -->
|
|
|
+ <!-- 主查询只 FROM user_reservation;桌位用 EXISTS(非 JOIN);不查 user_reservation_order
|
|
|
+ 0/1 有预订;2 有预订当 NOW() <= 解析后的 end_time + 3 小时(无 end 则算有预订) -->
|
|
|
<select id="countReservationsByTableAndOrderStatus" resultType="java.lang.Long">
|
|
|
- SELECT COUNT(DISTINCT ur.id)
|
|
|
+ SELECT COUNT(ur.id)
|
|
|
FROM user_reservation ur
|
|
|
- INNER JOIN user_reservation_table urt ON ur.id = urt.reservation_id AND urt.delete_flag = 0
|
|
|
- INNER JOIN user_reservation_order uro ON ur.id = uro.reservation_id AND uro.delete_flag = 0
|
|
|
WHERE ur.delete_flag = 0
|
|
|
- AND urt.table_id = #{tableId}
|
|
|
AND ur.store_id = #{storeId}
|
|
|
- AND uro.order_status IN (1, 2)
|
|
|
+ AND EXISTS (
|
|
|
+ SELECT 1
|
|
|
+ FROM user_reservation_table urt
|
|
|
+ WHERE urt.reservation_id = ur.id
|
|
|
+ AND urt.table_id = #{tableId}
|
|
|
+ AND urt.delete_flag = 0
|
|
|
+ )
|
|
|
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)) > 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') < NOW()
|
|
|
- AND STR_TO_DATE(TRIM(ur.end_time), '%Y-%m-%d %H:%i') > DATE_SUB(NOW(), INTERVAL 3 HOUR)
|
|
|
- )
|
|
|
- OR
|
|
|
- -- 如果 end_time 是时间格式 (HH:mm),需要结合 reservation_date
|
|
|
- (
|
|
|
- LENGTH(TRIM(ur.end_time)) <= 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') < NOW()
|
|
|
- AND STR_TO_DATE(CONCAT(DATE_FORMAT(ur.reservation_date, '%Y-%m-%d'), ' ', TRIM(ur.end_time)), '%Y-%m-%d %H:%i') > DATE_SUB(NOW(), INTERVAL 3 HOUR)
|
|
|
- )
|
|
|
+ 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)) > 5
|
|
|
+ AND STR_TO_DATE(TRIM(ur.end_time), '%Y-%m-%d %H:%i') IS NOT NULL
|
|
|
+ AND NOW() <= DATE_ADD(STR_TO_DATE(TRIM(ur.end_time), '%Y-%m-%d %H:%i'), INTERVAL 3 HOUR)
|
|
|
+ )
|
|
|
+ OR
|
|
|
+ (
|
|
|
+ LENGTH(TRIM(ur.end_time)) <= 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() <= 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>
|
|
|
|