using Model; using PagedList; using System; using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Threading.Tasks; using System.Web; using System.Web.Http; using static regionController; /// /// guadanOderController 的摘要描述 /// [ezAuthorize] public class guadanOrderController : ApiController { private Model.ezEntities _db = new Model.ezEntities(); [HttpPost] [Route("api/guadan/list")] public async Task getGuadanList([FromBody] guadan_order_search_dto search) { var query = _db.GuaDanOrder .Where(a => a.IsCancel == false) .Where(a => a.IsDeleted == false); if(search.guadanUser != null) { query = query.Where(order => order.BookerName == search.guadanUser); } if (search.startDate != null && search.endDate != null) { query = query.Where(order => order.StartDate >= search.startDate) .Where(order => order.EndDate <= search.endDate); } else { if (search.startDate != null) { query = query.Where(order => order.StartDate == search.startDate); } else if (search.endDate != null) { query = query.Where(order => order.EndDate == search.endDate); } } var total = query.Count(); var data = await query .OrderByDescending(b => b.CreatedAt) .Select(a => new { uuid = a.Uuid, guaDanOrderNo = a.GuaDanOrderNo, start_date = a.StartDate, end_date = a.EndDate, created_at = a.CreatedAt, updated_at = a.UpdatedAt, notes = a.Notes, bookerName = a.BookerName, guest_count = _db.GuaDanOrderGuest .Where(c => c.GuaDanOrderNo == a.GuaDanOrderNo && c.IsDeleted == false) .Where(c => c.RegionRoomBedStatus.Code != GuaDanOrderGuest.STATUS_CANCELLED) .Count(), }) .Skip((search.page - 1) * search.pageSize) .Take(search.pageSize) .ToListAsync(); return Ok(new { total, data }); } [HttpGet] [Route("api/guadan/getorderbyid")] public async Task getGuadanOrderById(string orderId) { var order = await _db.GuaDanOrder .Where(a => a.GuaDanOrderNo == orderId) .Where(a => a.IsCancel == false && a.IsDeleted == false) .FirstOrDefaultAsync(); if (order == null) { return BadRequest("未找到对应订单"); } var result = new { order.admin, order.followers, StartDate = order.StartDate?.ToString("yyyy-MM-dd"), EndDate = order.EndDate?.ToString("yyyy-MM-dd"), order.CreateUser, order.CreatedAt, order.UpdatedAt, order.Notes, order.GuaDanOrderNo, order.BookerFollowerNum, order.BookerName, order.BookerPhone, order.IsDeleted, order.Uuid, order.ActivityNum, }; return Ok(result); } [HttpPost] [Route("api/guadan/create")] public async Task createGuadanOrder(GuaDanOrderView model) { if (model == null) { return BadRequest("掛單資料不可為空"); } if (model.Uuid.HasValue) { return BadRequest("已存在对应挂单资料"); } try { if (model.startdate > model.enddate) { return BadRequest("掛單結束時間不能再開始時間之前"); } } catch { } var guadanorder = new GuaDanOrder { StartDate = model.startdate, EndDate = model.enddate, CreateUser = model.createuser, CreatedAt = DateTime.Now, UpdatedAt = DateTime.Now, Notes = model.note, GuaDanOrderNo = GuaDanOrder.GenerateStatusCode(), BookerName = model.bookerName, BookerPhone = model.bookerPhone, Uuid = Guid.NewGuid(), ActivityNum = model.activityNum, }; _db.GuaDanOrder.Add(guadanorder); await _db.SaveChangesAsync(); return Ok(guadanorder); } [HttpPost] [Route("api/guadan/update")] public async Task updateGuadanOrder(GuaDanOrderView model) { if (model == null) { return BadRequest("掛單資料不可為空"); } if (!model.Uuid.HasValue) { return BadRequest(""); } try { if (model.startdate > model.enddate) { return BadRequest("掛單結束時間不能再開始時間之前"); } } catch { } var order = await _db.GuaDanOrder.FindAsync(model.Uuid.Value); if (order == null) { return BadRequest("未找到对应挂单资料"); } order.StartDate = model.startdate; order.EndDate = model.enddate; order.Notes = model.note; order.BookerName = model.bookerName; order.BookerPhone = model.bookerPhone; order.ActivityNum = model.activityNum; await _db.SaveChangesAsync(); return Ok(model); } [HttpPost] [Route("api/guadan/cancel")] public async Task CancelGuadanOrder([FromUri] Guid uuid) { var guadan = await _db.GuaDanOrder.FindAsync(uuid); if (guadan == null) { return NotFound(); } if(_db.GuaDanOrderGuest.Any(a => a.GuaDanOrderNo == guadan.GuaDanOrderNo) ) { return BadRequest($"该挂单已经存在挂单莲友,不能取消!"); } using (var transaction = _db.Database.BeginTransaction()) { try { var guadanGuests = await _db.GuaDanOrderGuest .Where(a => a.GuaDanOrderNo == guadan.GuaDanOrderNo) .ToListAsync(); if (guadanGuests.Any()) { foreach (var guest in guadanGuests) { guest.StatusCode = "404"; // 取消所有相關的排程 if (guest.RegionAndRoomAndBedSchedule != null && guest.RegionAndRoomAndBedSchedule.Any()) { foreach (var schedule in guest.RegionAndRoomAndBedSchedule) { schedule.IsCancel = true; } } } await _db.SaveChangesAsync(); } guadan.IsCancel = true; await _db.SaveChangesAsync(); transaction.Commit(); return Ok(new { message = "取消成功" }); } catch (Exception ex) { transaction.Rollback(); return InternalServerError(ex); } } } public class guadan_order_dto { public int id { get; set; } public int room_id { get; set; } public int bed_id { get; set; } public int guest_id { get; set; } public DateTime start_date { get; set; } public DateTime? end_date { get; set; } public int? create_user { get; set; } public DateTime created_at { get; set; } public DateTime updated_at { get; set; } public string notes { get; set; } public int? follower_num { get; set; } public Room room { get; set; } = null; public RegionRoomBed bed { get; set; } = null; } public class guadan_order_search_dto { public DateTime? startDate { get; set; } public DateTime? endDate { get; set; } public string guadanUser { get; set; } public int page { get; set; } = 1; public int pageSize { get; set; } = 10; } }