321
This commit is contained in:
parent
c6042b8922
commit
bf7c67daa9
|
|
@ -479,10 +479,6 @@ public class SQController : ControllerBase
|
||||||
Msg = "房间不存在"
|
Msg = "房间不存在"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 3. 检查房间是否可预约(不可用时间段)
|
// 3. 检查房间是否可预约(不可用时间段)
|
||||||
var hasUnavailable = await _sQRoomUnavailableTimesServices.QueryListByClauseAsync(
|
var hasUnavailable = await _sQRoomUnavailableTimesServices.QueryListByClauseAsync(
|
||||||
t => t.room_id == dto.room_id && t.start_time < end_time && t.end_time > start_time,
|
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>
|
||||||
/// 用户加入预约接口
|
/// 用户加入预约接口
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user