From 97032500cce89d05b51ef873f6ae2c1cad5b3bc7 Mon Sep 17 00:00:00 2001 From: zpc Date: Mon, 15 Sep 2025 17:48:22 +0800 Subject: [PATCH] 312 --- .../Controllers/SQController.cs | 48 ++++++++++++++++++- CoreCms.Net.Web.WebApi/Doc.xml | 26 +++++++++- 2 files changed, 70 insertions(+), 4 deletions(-) diff --git a/CoreCms.Net.Web.WebApi/Controllers/SQController.cs b/CoreCms.Net.Web.WebApi/Controllers/SQController.cs index 000a50b..98a7287 100644 --- a/CoreCms.Net.Web.WebApi/Controllers/SQController.cs +++ b/CoreCms.Net.Web.WebApi/Controllers/SQController.cs @@ -461,8 +461,8 @@ ISQRoomUnavailableTimesServices sQRoomUnavailableTimesServices public async Task AddSQReservation([FromBody] SQReservationsAddDto dto) { var userId = _user.ID; - var start_time = DateTimeOffset.FromUnixTimeSeconds(dto.start_time).DateTime; - var end_time = DateTimeOffset.FromUnixTimeSeconds(dto.end_time).DateTime; + var start_time = DateTimeOffset.FromUnixTimeSeconds(dto.start_time).AddHours(8).DateTime; + var end_time = DateTimeOffset.FromUnixTimeSeconds(dto.end_time).AddHours(8).DateTime; // 1. 参数校验 if (dto == null || dto.room_id <= 0 || start_time >= end_time) { @@ -486,6 +486,9 @@ ISQRoomUnavailableTimesServices sQRoomUnavailableTimesServices }; } + + + // 3. 检查房间是否可预约(不可用时间段) var hasUnavailable = await _sQRoomUnavailableTimesServices.QueryListByClauseAsync( t => t.room_id == dto.room_id && t.start_time < end_time && t.end_time > start_time, @@ -500,6 +503,34 @@ ISQRoomUnavailableTimesServices sQRoomUnavailableTimesServices }; } + // 2.1 校验用户是否有其它预约时间冲突 + // 2.1 校验用户是否有其它预约时间冲突(只查未开始或正在进行中的预约) + var now = DateTime.Now; + var hasConflict = await _SQReservationParticipantsServices.QueryMuchAsync( + (p, r) => new object[] + { + JoinType.Inner, p.reservation_id == r.id + }, + (p, r) => r.id, + (p, r) => + p.user_id == userId && + p.status == 0 && // 只查未退出 + r.status < 2 && // 只查未取消/未结束 + r.end_time > now && // 只查未结束 + r.start_time < end_time && r.end_time > start_time // 时间有重叠 + ); + + if (hasConflict != null && hasConflict.Count > 0) + { + return new WebApiDto + { + Code = 402, + Data = null, + Msg = "您有其它预约时间冲突,无法加入该预约" + }; + } + + // 4. 检查房间是否已被预约(未取消的预约,时间有重叠) var hasReserved = await _SQReservationsServices.QueryListByClauseAsync( r => r.room_id == dto.room_id && r.status < 2 && r.start_time < end_time && r.end_time > start_time, @@ -524,6 +555,19 @@ ISQRoomUnavailableTimesServices sQRoomUnavailableTimesServices game_type = dto.game_type, created_at = DateTime.Now, updated_at = DateTime.Now, + credit_limit = dto.credit_limit, + player_count = dto.player_count, + deposit_fee = dto.deposit_fee, + duration_minutes = dto.duration_minutes, + extra_info = dto.extra_info, + game_rule = dto.game_rule, + gender_limit = dto.gender_limit, + is_smoking = dto.is_smoking, + max_age = dto.max_age, + min_age = dto.min_age, + remarks = "", + status = 0, + title = dto.title, // 其他字段可根据需要补充 }; var reservationId = await _dbBase.Insertable(reservation).ExecuteReturnIdentityAsync(); diff --git a/CoreCms.Net.Web.WebApi/Doc.xml b/CoreCms.Net.Web.WebApi/Doc.xml index 546cd26..41bb5bd 100644 --- a/CoreCms.Net.Web.WebApi/Doc.xml +++ b/CoreCms.Net.Web.WebApi/Doc.xml @@ -174,7 +174,7 @@ 通用调用接口数据 - + 构造函数 @@ -762,7 +762,7 @@ 预约接口 - + 构造函数 @@ -820,6 +820,28 @@ 每页数量 + + + 获取可预约的房间列表 + + 开始时间 时间戳 + 结束时间 时间戳 + + + + + 用户预约接口 + + + + + + + 用户加入预约接口 + + 预约 + + 门店调用接口数据