321
This commit is contained in:
parent
c6042b8922
commit
bf7c67daa9
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user