321
This commit is contained in:
parent
c945442160
commit
5bd8167c2e
|
|
@ -175,4 +175,28 @@ namespace CoreCms.Net.Model.ViewModels.SQ
|
||||||
public string cancel_reason { get; set; }
|
public string cancel_reason { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 签到参与人项(不包含发起者)
|
||||||
|
/// </summary>
|
||||||
|
public class SQReservationCheckInAttendeeDto
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 用户ID
|
||||||
|
/// </summary>
|
||||||
|
public int user_id { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// 是否出席(true=赴约,false=未赴约)
|
||||||
|
/// </summary>
|
||||||
|
public bool isAttended { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 预约签到 DTO(仅发起者可调用)
|
||||||
|
/// </summary>
|
||||||
|
public class SQReservationCheckInDto
|
||||||
|
{
|
||||||
|
[Required(ErrorMessage = "请输入预约ID")]
|
||||||
|
public int reservation_id { get; set; }
|
||||||
|
public List<SQReservationCheckInAttendeeDto> attendeds { get; set; }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -66,15 +66,9 @@ public class SQController : ControllerBase
|
||||||
, IHttpContextUser user
|
, IHttpContextUser user
|
||||||
, IUnitOfWork unitOfWork
|
, IUnitOfWork unitOfWork
|
||||||
, ICoreCmsUserBlacklistServices coreCmsUserBlacklistServices
|
, ICoreCmsUserBlacklistServices coreCmsUserBlacklistServices
|
||||||
,
|
, ISQReservationEvaluateServices sQReservationEvaluateServices
|
||||||
ISQReservationEvaluateServices sQReservationEvaluateServices
|
, ISQReservationReputationServices sQReservationReputationServices
|
||||||
,
|
, ISQRoomUnavailableTimesServices sQRoomUnavailableTimesServices
|
||||||
ISQReservationReputationServices sQReservationReputationServices
|
|
||||||
,
|
|
||||||
ISQRoomUnavailableTimesServices sQRoomUnavailableTimesServices
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
_webHostEnvironment = webHostEnvironment;
|
_webHostEnvironment = webHostEnvironment;
|
||||||
|
|
@ -132,7 +126,7 @@ ISQRoomUnavailableTimesServices sQRoomUnavailableTimesServices
|
||||||
{
|
{
|
||||||
var userId = _user.ID;
|
var userId = _user.ID;
|
||||||
|
|
||||||
var list = await _dbBase.Ado.SqlQueryAsync<SQReservationsApiDto>($"SELECT r.*, p.role AS Role, p.is_arrive, CASE WHEN r.status = 1 THEN 0 WHEN r.status = 2 THEN 1 WHEN r.status = 0 THEN 2 WHEN r.status = 3 THEN 3 END AS orderid FROM SQReservations r LEFT JOIN SQReservationParticipants p ON r.id = p.reservation_id WHERE r.status < 4 AND p.user_id = {userId} AND p.status = 0 AND DATEADD(day, 5, end_time) > GETDATE() ORDER BY orderid asc, r.start_time ASC ");
|
var list = await _dbBase.Ado.SqlQueryAsync<SQReservationsApiDto>($"SELECT r.*, p.role AS Role, p.is_arrive, CASE WHEN r.status = 1 THEN 0 WHEN r.status = 2 THEN 1 WHEN r.status = 0 THEN 2 WHEN r.status = 3 THEN 3 END AS orderid FROM SQReservations r LEFT JOIN SQReservationParticipants p ON r.id = p.reservation_id WHERE r.status < 4 AND p.user_id = {userId} AND p.status = 0 AND DATEADD(day,2, end_time) > GETDATE() ORDER BY orderid asc, r.start_time ASC ");
|
||||||
if (list != null && list.Count > 0)
|
if (list != null && list.Count > 0)
|
||||||
{
|
{
|
||||||
var roomList = await _SQRoomsServices.GetRoomList();
|
var roomList = await _SQRoomsServices.GetRoomList();
|
||||||
|
|
@ -880,4 +874,150 @@ ISQRoomUnavailableTimesServices sQRoomUnavailableTimesServices
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 预约签到(仅发起者可操作,且只能签到一次)
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="dto">签到参数:不包含发起者的参会名单</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
[HttpPost]
|
||||||
|
[Authorize]
|
||||||
|
public async Task<WebApiDto> CheckInReservation([FromBody] SQReservationCheckInDto dto)
|
||||||
|
{
|
||||||
|
var userId = _user.ID;
|
||||||
|
if (dto == null || dto.reservation_id <= 0)
|
||||||
|
{
|
||||||
|
return new WebApiDto
|
||||||
|
{
|
||||||
|
Code = 500,
|
||||||
|
Data = null,
|
||||||
|
Msg = "参数错误"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// 查询预约
|
||||||
|
var reservation = await _SQReservationsServices.QueryByClauseAsync(
|
||||||
|
r => r.id == dto.reservation_id,
|
||||||
|
r => r.id, OrderByType.Asc);
|
||||||
|
if (reservation == null)
|
||||||
|
{
|
||||||
|
return new WebApiDto
|
||||||
|
{
|
||||||
|
Code = 404,
|
||||||
|
Data = null,
|
||||||
|
Msg = "预约不存在"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// 已结束或已取消
|
||||||
|
if (reservation.status >= 3)
|
||||||
|
{
|
||||||
|
return new WebApiDto
|
||||||
|
{
|
||||||
|
Code = 400,
|
||||||
|
Data = null,
|
||||||
|
Msg = "预约已结束或已取消,无法签到"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
// 已进行中(已签到),禁止重复
|
||||||
|
if (reservation.status == 2)
|
||||||
|
{
|
||||||
|
return new WebApiDto
|
||||||
|
{
|
||||||
|
Code = 400,
|
||||||
|
Data = null,
|
||||||
|
Msg = "已签到,无法重复签到"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// 权限校验:仅发起者可签到
|
||||||
|
var initiator = await _SQReservationParticipantsServices.QueryByClauseAsync(
|
||||||
|
p => p.reservation_id == dto.reservation_id && p.user_id == userId && p.role == 1 && p.status == 0,
|
||||||
|
p => p.id, OrderByType.Asc);
|
||||||
|
if (initiator == null)
|
||||||
|
{
|
||||||
|
return new WebApiDto
|
||||||
|
{
|
||||||
|
Code = 403,
|
||||||
|
Data = null,
|
||||||
|
Msg = "仅发起者可进行签到"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
dto.attendeds ??= new List<SQReservationCheckInAttendeeDto>();
|
||||||
|
var falseUserIds = dto.attendeds
|
||||||
|
.Where(a => a != null && a.isAttended == false)
|
||||||
|
.Select(a => a.user_id)
|
||||||
|
.Distinct()
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_dbBase.Ado.BeginTran();
|
||||||
|
|
||||||
|
// 1) 预约置为进行中
|
||||||
|
var updatedReservation = await _SQReservationsServices.UpdateAsync(
|
||||||
|
it => new SQReservations
|
||||||
|
{
|
||||||
|
status = 2,
|
||||||
|
updated_at = DateTime.Now
|
||||||
|
},
|
||||||
|
it => it.id == dto.reservation_id);
|
||||||
|
if (!updatedReservation)
|
||||||
|
{
|
||||||
|
_dbBase.Ado.RollbackTran();
|
||||||
|
return new WebApiDto
|
||||||
|
{
|
||||||
|
Code = 500,
|
||||||
|
Data = null,
|
||||||
|
Msg = "签到失败:更新预约状态异常"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2) 默认将所有未退出的参与者标记为已赴约(1)
|
||||||
|
await _SQReservationParticipantsServices.UpdateAsync(
|
||||||
|
it => new SQReservationParticipants
|
||||||
|
{
|
||||||
|
is_arrive = 1
|
||||||
|
},
|
||||||
|
it => it.reservation_id == dto.reservation_id && it.status == 0);
|
||||||
|
|
||||||
|
// 3) 对于传入的未出席名单,标记为未赴约(2)
|
||||||
|
if (falseUserIds.Count > 0)
|
||||||
|
{
|
||||||
|
await _SQReservationParticipantsServices.UpdateAsync(
|
||||||
|
it => new SQReservationParticipants
|
||||||
|
{
|
||||||
|
is_arrive = 2
|
||||||
|
},
|
||||||
|
it => it.reservation_id == dto.reservation_id && it.status == 0 && falseUserIds.Contains(it.user_id));
|
||||||
|
}
|
||||||
|
|
||||||
|
// 4) 确保发起者始终为已赴约(1)
|
||||||
|
await _SQReservationParticipantsServices.UpdateAsync(
|
||||||
|
it => new SQReservationParticipants
|
||||||
|
{
|
||||||
|
is_arrive = 1
|
||||||
|
},
|
||||||
|
it => it.reservation_id == dto.reservation_id && it.status == 0 && it.user_id == userId);
|
||||||
|
|
||||||
|
_dbBase.Ado.CommitTran();
|
||||||
|
|
||||||
|
return new WebApiDto
|
||||||
|
{
|
||||||
|
Code = 0,
|
||||||
|
Data = null,
|
||||||
|
Msg = "签到成功"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
catch (Exception)
|
||||||
|
{
|
||||||
|
_dbBase.Ado.RollbackTran();
|
||||||
|
return new WebApiDto
|
||||||
|
{
|
||||||
|
Code = 500,
|
||||||
|
Data = null,
|
||||||
|
Msg = "签到失败"
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -849,6 +849,13 @@
|
||||||
<param name="dto">取消预约参数</param>
|
<param name="dto">取消预约参数</param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:CoreCms.Net.Web.WebApi.Controllers.SQController.CheckInReservation(CoreCms.Net.Model.ViewModels.SQ.SQReservationCheckInDto)">
|
||||||
|
<summary>
|
||||||
|
预约签到(仅发起者可操作,且只能签到一次)
|
||||||
|
</summary>
|
||||||
|
<param name="dto">签到参数:不包含发起者的参会名单</param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="T:CoreCms.Net.Web.WebApi.Controllers.StoreController">
|
<member name="T:CoreCms.Net.Web.WebApi.Controllers.StoreController">
|
||||||
<summary>
|
<summary>
|
||||||
门店调用接口数据
|
门店调用接口数据
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user