using AutoMapper; using CoreCms.Net.Auth.HttpContextUser; using CoreCms.Net.IRepository.UnitOfWork; using CoreCms.Net.IServices; using CoreCms.Net.Model.Entities; using CoreCms.Net.Model.Entities.Expression; using CoreCms.Net.Model.ViewModels.Basics; using CoreCms.Net.Model.ViewModels.SQ; using CoreCms.Net.Model.ViewModels.UI; using CoreCms.Net.Services; using CoreCms.Net.Services.SQ; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using NPOI.SS.Formula.Functions; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using CoreCms.Net.Services.SQ; using CoreCms.Net.Utility.Extensions; namespace CoreCms.Net.Web.WebApi.Controllers; /// /// 预约接口 /// [Route("api/[controller]/[action]")] [ApiController] public class SQController : ControllerBase { private readonly IWebHostEnvironment _webHostEnvironment; private readonly ISQReservationsServices _SQReservationsServices; private readonly ISQRoomsServices _SQRoomsServices; private readonly ISysDictionaryDataServices _sysDictionaryDataServices; private readonly ISysDictionaryServices _sysDictionaryServices; private readonly ISQReservationParticipantsServices _SQReservationParticipantsServices; private readonly IMapper _mapper; private readonly ICoreCmsUserServices _userServices; private readonly IHttpContextUser _user; private readonly SqlSugarScope _dbBase; private readonly ICoreCmsUserBlacklistServices _coreCmsUserBlacklistServices; /// /// 构造函数 /// public SQController(IWebHostEnvironment webHostEnvironment , ISQReservationsServices SQReservationsServices , ISQRoomsServices SQRoomsServices , ISysDictionaryServices sysDictionaryServices , ISysDictionaryDataServices sysDictionaryDataServices , ISQReservationParticipantsServices sQReservationParticipantsServices , IMapper mapper , ICoreCmsUserServices userServices , IHttpContextUser user , IUnitOfWork unitOfWork , ICoreCmsUserBlacklistServices coreCmsUserBlacklistServices ) { _webHostEnvironment = webHostEnvironment; _SQReservationsServices = SQReservationsServices; _SQRoomsServices = SQRoomsServices; _sysDictionaryServices = sysDictionaryServices; _sysDictionaryDataServices = sysDictionaryDataServices; _SQReservationParticipantsServices = sQReservationParticipantsServices; _mapper = mapper; _userServices = userServices; _user = user; _dbBase = unitOfWork.GetDbClient(); _coreCmsUserBlacklistServices = coreCmsUserBlacklistServices; } /// /// 我的预约记录 /// /// 0 参与者,1发起者 /// 起始页 /// 页大小 /// [HttpGet] [Authorize] public async Task GetMyReservation([FromQuery] int type = 0, [FromQuery] int index = 1, [FromQuery] int size = 10) { var userId = _user.ID; var list = await _dbBase.Ado.SqlQueryAsync($"select r.*,p.id pid, p.status pstatus,p.join_time, p.quit_time ,p.is_refund from SQReservationParticipants p inner join SQReservations r on p.reservation_id=r.id where p.user_id={userId} and p.role={type} order by p.id desc OFFSET {(index - 1) * size} ROWS FETCH NEXT {size} ROWS ONLY"); if (list != null && list.Count > 0) { // 转为基类列表 var baseList = list.Cast().ToList(); await baseList.LoadSQReservationParticipantsApiDto(userId, _dbBase, _coreCmsUserBlacklistServices, _mapper); } return new WebApiDto() { Data = list, Code = 0, }; } /// /// 获取正在进行的预约 /// /// [HttpGet] [Authorize] public async Task GetMyUseReservation() { var userId = _user.ID; var list = await _dbBase.Ado.SqlQueryAsync($"select top 3 r.* from SQReservations r left join SQReservationParticipants p on r.id=p.reservation_id where r.status<2 and p.user_id={userId} and p.status=0 order by r.start_time "); if (list != null && list.Count > 0) { // 转为基类列表 var baseList = list.Cast().ToList(); await baseList.LoadSQReservationParticipantsApiDto(userId, _dbBase, _coreCmsUserBlacklistServices, _mapper); } return new WebApiDto() { Data = list, Code = 0, }; } /// /// 首页预约列表 /// /// /// /// [HttpGet] public async Task GetReservationList([FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 20) { var userId = _user.ID; var now = DateTime.Now; var roomList = await _SQRoomsServices.GetRoomList(); var where = PredicateBuilder.True(); where = where.And(it => it.end_time > now); where = where.And(it => it.status < 2); var list = await _SQReservationsServices.QueryPageAsync(where, it => it.start_time, OrderByType.Asc, pageIndex, pageSize, true); var pageList = _mapper.Map>(list); if (pageList != null && pageList.Count > 0) { // 转为基类列表 var baseList = pageList.Cast().ToList(); await baseList.LoadSQReservationParticipantsApiDto(userId, _dbBase, _coreCmsUserBlacklistServices, _mapper); } return new WebApiDto() { Data = pageList, Code = 0, Msg = "ok", }; } }