This commit is contained in:
zpc 2025-09-26 16:47:57 +08:00
parent c6042b8922
commit bf7c67daa9

View File

@ -479,10 +479,6 @@ public class SQController : ControllerBase
Msg = "房间不存在"
};
}
// 3. 检查房间是否可预约(不可用时间段)
var hasUnavailable = await _sQRoomUnavailableTimesServices.QueryListByClauseAsync(
t => t.room_id == dto.room_id && t.start_time < end_time && t.end_time > start_time,
@ -597,6 +593,105 @@ public class SQController : ControllerBase
};
}
/// <summary>
/// 用户是否可以创建预约(仅校验,不创建)
/// </summary>
/// <param name="dto">创建预约所需参数</param>
/// <returns>返回可否创建及原因</returns>
[HttpPost]
[Authorize]
public async Task<WebApiDto> CanCreateSQReservation([FromBody] SQReservationsAddDto dto)
{
var userId = _user.ID;
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)
{
return new WebApiDto()
{
Code = 500,
Data = new { canCreate = false },
Msg = "参数错误"
};
}
// 2. 检查房间是否存在
var room = await _SQRoomsServices.QueryByClauseAsync(r => r.id == dto.room_id, r => r.id, OrderByType.Asc);
if (room == null)
{
return new WebApiDto()
{
Code = 500,
Data = new { canCreate = false },
Msg = "房间不存在"
};
}
// 3. 检查房间是否可预约(不可用时间段)
var hasUnavailable = await _sQRoomUnavailableTimesServices.QueryListByClauseAsync(
t => t.room_id == dto.room_id && t.start_time < end_time && t.end_time > start_time,
t => t.id, OrderByType.Asc);
if (hasUnavailable != null && hasUnavailable.Count > 0)
{
return new WebApiDto()
{
Code = 500,
Data = new { canCreate = false },
Msg = "该时间段房间不可预约"
};
}
// 2.1 校验用户是否有其它预约时间冲突(只查未开始或正在进行中的预约)
var now = DateTime.Now;
var hasConflict = await _SQReservationParticipantsServices.QueryMuchAsync<SQReservationParticipants, SQReservations, int>(
(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 < 3 &&
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 = new { canCreate = false },
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,
r => r.id, OrderByType.Asc);
if (hasReserved != null && hasReserved.Count > 0)
{
return new WebApiDto()
{
Code = 500,
Data = new { canCreate = false },
Msg = "该时间段房间已被预约"
};
}
// 全部通过
return new WebApiDto()
{
Code = 0,
Data = new { canCreate = true },
Msg = "ok"
};
}
/// <summary>
/// 用户加入预约接口
/// </summary>