From 2d0a4f39d653807a5ff6c6f858504260b44dc1fb Mon Sep 17 00:00:00 2001 From: zpc Date: Sun, 14 Sep 2025 02:50:01 +0800 Subject: [PATCH] 321 --- .../Controllers/SQController.cs | 50 +++++++++++++++++-- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/CoreCms.Net.Web.WebApi/Controllers/SQController.cs b/CoreCms.Net.Web.WebApi/Controllers/SQController.cs index 6526bf5..41a8681 100644 --- a/CoreCms.Net.Web.WebApi/Controllers/SQController.cs +++ b/CoreCms.Net.Web.WebApi/Controllers/SQController.cs @@ -49,7 +49,7 @@ public class SQController : ControllerBase private readonly ICoreCmsUserBlacklistServices _coreCmsUserBlacklistServices; private readonly ISQReservationReputationServices _sQReservationReputationServices; private readonly ISQReservationEvaluateServices _sQReservationEvaluateServices; - + private readonly ISQRoomUnavailableTimesServices _sQRoomUnavailableTimesServices; /// /// 构造函数 /// @@ -68,6 +68,10 @@ public class SQController : ControllerBase ISQReservationEvaluateServices sQReservationEvaluateServices , ISQReservationReputationServices sQReservationReputationServices + , +ISQRoomUnavailableTimesServices sQRoomUnavailableTimesServices + + ) { @@ -84,6 +88,7 @@ ISQReservationReputationServices sQReservationReputationServices _coreCmsUserBlacklistServices = coreCmsUserBlacklistServices; _sQReservationEvaluateServices = sQReservationEvaluateServices; _sQReservationReputationServices = sQReservationReputationServices; + _sQRoomUnavailableTimesServices = sQRoomUnavailableTimesServices; } @@ -341,7 +346,7 @@ ISQReservationReputationServices sQReservationReputationServices [Authorize] public async Task GetReputationByUser([FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 20) { - var list = await _sQReservationReputationServices.QueryPageAsync(it => it.user_id == _user.ID , it => it.created_at, OrderByType.Desc, pageIndex, pageSize, true); + var list = await _sQReservationReputationServices.QueryPageAsync(it => it.user_id == _user.ID, it => it.created_at, OrderByType.Desc, pageIndex, pageSize, true); var o = new List(); foreach (var item in list) @@ -349,7 +354,7 @@ ISQReservationReputationServices sQReservationReputationServices var c = new { item.created_at, - reputation_value=item.reputation_value.ToString("#.#"), + reputation_value = item.reputation_value.ToString("#.#"), title = item.remark }; o.Add(c); @@ -391,5 +396,44 @@ ISQReservationReputationServices sQReservationReputationServices } + /// + /// 获取可预约的房间列表 + /// + /// 开始时间 时间戳 + /// 结束时间 时间戳 + /// + [HttpGet] + public async Task GetReservationRoomList([FromQuery] long startTime, [FromQuery] long endTime) + { + // 时间戳转DateTime + var start = DateTimeOffset.FromUnixTimeSeconds(startTime).DateTime; + var end = DateTimeOffset.FromUnixTimeSeconds(endTime).DateTime; + + // 1. 查询所有可用房间 + var allRooms = await _SQRoomsServices.QueryListByClauseAsync(r => r.status == true); + + // 2. 查询有不可用时间段冲突的房间 + var unavailableRoomIds = (await _sQRoomUnavailableTimesServices.QueryListByClauseAsync( + t => t.start_time < end && t.end_time > start + )).Select(t => t.room_id).Distinct().ToList(); + + // 3. 查询已被预约的房间(未取消的预约,时间有重叠) + var reservedRoomIds = (await _SQReservationsServices.QueryListByClauseAsync( + r => r.status < 3 && r.start_time < end && r.end_time > start + )).Select(r => r.room_id).Distinct().ToList(); + + // 4. 可预约房间 = 所有可用房间 - 不可用房间 - 已预约房间 + var availableRooms = allRooms + .Where(r => !unavailableRoomIds.Contains(r.id) && !reservedRoomIds.Contains(r.id)) + .ToList(); + + return new WebApiDto() + { + Code = 0, + Data = availableRooms, + Msg = "ok" + }; + } + }