265 lines
8.2 KiB
C#
265 lines
8.2 KiB
C#
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;
|
|
|
|
/// <summary>
|
|
/// guadanOderController 的摘要描述
|
|
/// </summary>
|
|
[ezAuthorize]
|
|
public class guadanOrderController : ApiController
|
|
{
|
|
private Model.ezEntities _db = new Model.ezEntities();
|
|
[HttpPost]
|
|
[Route("api/guadan/list")]
|
|
public async Task<IHttpActionResult> 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<IHttpActionResult> 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<IHttpActionResult> 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<IHttpActionResult> 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<IHttpActionResult> 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;
|
|
}
|
|
|
|
} |