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.SQ; using CoreCms.Net.Model.ViewModels.UI; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; 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; /// /// 构造函数 /// public SQController(IWebHostEnvironment webHostEnvironment , ISQReservationsServices SQReservationsServices , ISQRoomsServices SQRoomsServices , ISysDictionaryServices sysDictionaryServices , ISysDictionaryDataServices sysDictionaryDataServices , ISQReservationParticipantsServices sQReservationParticipantsServices , IMapper mapper , ICoreCmsUserServices userServices , IHttpContextUser user , IUnitOfWork unitOfWork ) { _webHostEnvironment = webHostEnvironment; _SQReservationsServices = SQReservationsServices; _SQRoomsServices = SQRoomsServices; _sysDictionaryServices = sysDictionaryServices; _sysDictionaryDataServices = sysDictionaryDataServices; _SQReservationParticipantsServices = sQReservationParticipantsServices; _mapper = mapper; _userServices = userServices; _user = user; _dbBase = unitOfWork.GetDbClient(); } /// /// /// /// 1发起者,0参与者 /// [HttpGet] [Authorize] public async Task GetMyReservation([FromQuery] int type = 0) { var userId = _user.ID; //var list = await _SQReservationsServices.GetMyReservation(userId); var list = await _dbBase.Ado.SqlQueryAsync($"select r.*, 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}"); //SQReservationsMyDto return new WebApiDto() { Data = list, Code = 0, }; } /// /// /// /// /// /// [HttpGet] public async Task GetReservationList([FromQuery] int pageIndex, [FromQuery] int pageSize = 20) { var userId = _user.ID; var now = DateTime.Now; 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); var rIds = list.Select(it => it.id).ToList(); if (rIds != null && rIds.Count > 0) { var participants = await _SQReservationParticipantsServices.QueryListByClauseAsync(it => rIds.Contains(it.reservation_id), "", true); List userList = new List(); if (participants != null && participants.Count > 0) { var userIds = participants.Select(it => it.user_id).ToList(); userList = await _userServices.QueryListByClauseAsync(it => userIds.Contains(it.id), "", true); } foreach (var item in pageList) { var temp = participants.Where(it => it.reservation_id == item.id).OrderBy(it => it.role).ThenBy(it => it.status).ToList(); var dto = _mapper.Map>(temp); if (userList != null && userList.Count > 0) { foreach (var p in dto) { var u = userList.FirstOrDefault(it => it.id == p.user_id); if (u != null) { p.UserName = u.nickName; p.AvatarImage = u.avatarImage; } } } item.Participants = dto; } } return new WebApiDto() { Data = pageList, Code = 0, Msg = "ok", }; } /// /// /// /// /// [HttpGet] public async Task GetReservationDetail([FromQuery] int id) { return new WebApiDto() { }; } }