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; 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; } /// /// /// /// 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 = 1, [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) { string sqlWhere = string.Join(",", rIds); var participants = await _dbBase.Ado.SqlQueryAsync($"select p.id,p.reservation_id,p.status,p.join_time,p.user_id, p.role,u.nickName UserName,u.avatarImage AvatarImage from SQReservationParticipants p inner join CoreCmsUser u on p.user_id=u.id where p.status=0 and p.reservation_id in ({sqlWhere})"); if (participants != null && participants.Count > 0) { var userBlacklist = new List(); //如果用户登录了 if (userId > 0) { userBlacklist = await _coreCmsUserBlacklistServices.GetUserBlacklists(userId); //并且用户有黑名单数据 if (userBlacklist.Count > 0) { //查找并修改黑名单用户 foreach (var participant in participants.Where(it => userBlacklist.Contains(it.user_id))) { participant.UserBlackStatus = 1; } } } 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); item.Participants = dto; } } //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() { }; } }