/// <summary> /// 根据房间ID和日期获取历史入住信息 /// </summary> /// <param name="roomId"></param> /// <param name="date"></param> /// <param name="freeChenkinTime"></param> /// <param name="freeCheckoutTime"></param> /// <returns></returns> public RoomStatusRespones GetRoomHistoryCheckinByRoomId(int roomId, DateTime date) { RoomStatusRespones result = new RoomStatusRespones(); DateTime freeChenkinDateTime = new DateTime(date.Year, date.Month, date.Day, DbConst.SettlementHour, 0, 0); DateTime freeCheckoutDateTime = new DateTime(date.Year, date.Month, date.Day, DbConst.SettlementHour, 0, 0); Room room = HotelContext.Room.FirstOrDefault(r => r.Id == roomId && !r.IsDel.Value); if (room != null) { result.RoomId = roomId; result.RoomNo = room.RoomNo; var roomTypeName = HotelContext.Hotelenum.FirstOrDefault(e => e.FullKey == room.RoomType && !e.IsDel.Value); result.RoomTypeName = roomTypeName == null ? "" : roomTypeName.Name; Roomcheck check = HotelContext.Roomcheck.FirstOrDefault( c => !c.IsDel.Value && c.Status == (int)RoomStatus.Ckeckout && ((c.CheckinTime <= freeCheckoutDateTime && c.CheckoutTime > freeCheckoutDateTime) || (c.CheckinTime > freeCheckoutDateTime && c.CheckinTime < freeChenkinDateTime.AddDays(1))) ); if (check == null) { check = HotelContext.Roomcheck.FirstOrDefault( c => !c.IsDel.Value && c.Status == (int)RoomStatus.Checkin && ((c.CheckinTime <= freeCheckoutDateTime && c.CheckoutTime == null) || (c.CheckinTime > freeCheckoutDateTime && c.CheckinTime < freeChenkinDateTime.AddDays(1))) ); } if (check != null) { result.Id = check.Id; result.Status = check.Status; result.ReserveTime = check.ReserveTime; result.PlanedCheckinTime = check.PlanedCheckinTime; result.CheckinTime = check.CheckinTime; result.PlanedCheckoutTime = check.PlanedCheckoutTime; result.CheckoutTime = check.CheckoutTime; result.Prices = check.Prices; result.Deposit = check.Deposit; var certTypes = HotelContext.Hotelenum.Where(e => !e.IsDel.Value && e.EnumClass == DbConst.CertTypeEnumClass).ToList(); result.Guests = HotelContext.Guest.Where(g => !g.IsDel.Value && g.CheckId == check.Id).Select(g => new GuestResponse() { Id = g.Id, CheckId = g.CheckId, Name = g.Name, CertType = g.CertType, CertTypeName = certTypes.FirstOrDefault(t => t.FullKey == g.CertType) == null ? "" : certTypes.FirstOrDefault(t => t.FullKey == g.CertType).Name, CertId = g.CertId, Mobile = g.Mobile, Address = g.Address }).ToList(); } ; } return(result); }
public async Task <Response <RoomStatusRespones> > GetRoomCheck(long checkId) { RoomStatusRespones result = await Task.Run(() => { return(Hander.GetRoomCheckById(checkId)); }); return(new Response <RoomStatusRespones>() { Status = StatusEnum.Success, Massage = "获取房间状态成功", Data = result }); }
/// <summary> /// 获取当前房间状态 /// </summary> /// <param name="hotelId"></param> /// <returns></returns> public List <RoomStatusRespones> GetRoomNowStatus(int hotelId) { List <RoomStatusRespones> result = new List <RoomStatusRespones>(); var rooms = HotelContext.Room.Where(r => !r.IsDel.Value && r.HotelId == hotelId).OrderBy(r => r.RoomNo).ToList(); var roomTypes = HotelContext.Hotelenum.Where(e => !e.IsDel.Value && e.EnumClass == DbConst.RoomTypeEnumClass).ToList(); var certTypes = HotelContext.Hotelenum.Where(e => !e.IsDel.Value && e.EnumClass == DbConst.CertTypeEnumClass).ToList(); foreach (Room r in rooms) { RoomStatusRespones status = new RoomStatusRespones() { RoomId = r.Id, RoomNo = r.RoomNo, RoomTypeName = roomTypes.FirstOrDefault(t => t.FullKey == r.RoomType) == null ? "" : roomTypes.FirstOrDefault(t => t.FullKey == r.RoomType).Name }; //var check = HotelContext.Roomcheck.FirstOrDefault(o => !o.IsDel.Value && o.RoomId == r.Id && (o.Status == (int)RoomStatus.Checkin || o.Status == (int)RoomStatus.Reserved)); var check = HotelContext.Roomcheck.FirstOrDefault(o => !o.IsDel.Value && o.RoomId == r.Id && o.Status == (int)RoomStatus.Checkin); if (check == null) { check = HotelContext.Roomcheck.FirstOrDefault(o => !o.IsDel.Value && o.RoomId == r.Id && o.Status == (int)RoomStatus.Reserved && o.PlanedCheckinTime > DateTime.Now.Date); } if (check != null) { status.Id = check.Id; status.Status = check.Status; status.ReserveTime = check.ReserveTime; status.PlanedCheckinTime = check.PlanedCheckinTime; status.CheckinTime = check.CheckinTime; status.PlanedCheckoutTime = check.PlanedCheckoutTime; status.CheckoutTime = check.CheckoutTime; status.Prices = check.Prices; status.Deposit = check.Deposit; status.Guests = HotelContext.Guest.Where(g => !g.IsDel.Value && g.CheckId == check.Id).Select(g => new GuestResponse() { Id = g.Id, CheckId = g.CheckId, Name = g.Name, CertType = g.CertType, CertTypeName = certTypes.FirstOrDefault(t => t.FullKey == g.CertType) == null ? "" : certTypes.FirstOrDefault(t => t.FullKey == g.CertType).Name, CertId = g.CertId, Mobile = g.Mobile, Address = g.Address }).ToList(); } ; result.Add(status); } return(result); }
/// <summary> /// 根据入住ID获取入住信息 /// </summary> /// <param name="checkId"></param> /// <returns></returns> public RoomStatusRespones GetRoomCheckById(long checkId) { RoomStatusRespones result = new RoomStatusRespones(); Roomcheck check = base.Get(c => c.Id == checkId && !c.IsDel.Value); if (check != null) { result.Id = check.Id; result.RoomId = check.RoomId; Room room = HotelContext.Room.FirstOrDefault(r => r.Id == check.RoomId && !r.IsDel.Value); if (room != null) { result.RoomNo = room.RoomNo; var roomTypeEnum = HotelContext.Hotelenum.FirstOrDefault(e => e.FullKey == room.RoomType && !e.IsDel.Value); result.RoomTypeName = roomTypeEnum == null ? "" : roomTypeEnum.Name; } result.Status = check.Status; result.ReserveTime = check.ReserveTime; result.PlanedCheckinTime = check.PlanedCheckinTime; result.CheckinTime = check.CheckinTime; result.PlanedCheckoutTime = check.PlanedCheckoutTime; result.CheckoutTime = check.CheckoutTime; result.Prices = check.Prices; result.Deposit = check.Deposit; result.Remark = check.Remark; var certTypes = HotelContext.Hotelenum.Where(e => !e.IsDel.Value && e.EnumClass == DbConst.CertTypeEnumClass).ToList(); result.Guests = HotelContext.Guest.Where(g => !g.IsDel.Value && g.CheckId == check.Id).Select(g => new GuestResponse() { Id = g.Id, CheckId = g.CheckId, Name = g.Name, Gender = g.Gender, CertType = g.CertType, CertTypeName = certTypes.FirstOrDefault(t => t.FullKey == g.CertType) == null ? "" : certTypes.FirstOrDefault(t => t.FullKey == g.CertType).Name, CertId = g.CertId, Mobile = g.Mobile, Address = g.Address }).ToList(); } return(result); }
/// <summary> /// 获取指定房间的当前状态 /// </summary> /// <param name="roomId"></param> /// <returns></returns> public RoomStatusRespones GetRoomNowStatusByRoomId(int roomId) { RoomStatusRespones result = new RoomStatusRespones(); Room room = HotelContext.Room.FirstOrDefault(r => r.Id == roomId && !r.IsDel.Value); if (room != null) { result.RoomId = roomId; result.RoomNo = room.RoomNo; var roomTypeName = HotelContext.Hotelenum.FirstOrDefault(e => e.FullKey == room.RoomType && !e.IsDel.Value); result.RoomTypeName = roomTypeName == null ? "" : roomTypeName.Name; var check = HotelContext.Roomcheck.FirstOrDefault(o => !o.IsDel.Value && o.RoomId == room.Id && (o.Status == (int)RoomStatus.Checkin || o.Status == (int)RoomStatus.Reserved)); if (check != null) { result.Id = check.Id; result.Status = check.Status; result.ReserveTime = check.ReserveTime; result.PlanedCheckinTime = check.PlanedCheckinTime; result.CheckinTime = check.CheckinTime; result.PlanedCheckoutTime = check.PlanedCheckoutTime; result.CheckoutTime = check.CheckoutTime; result.Prices = check.Prices; result.Deposit = check.Deposit; var certTypes = HotelContext.Hotelenum.Where(e => !e.IsDel.Value && e.EnumClass == DbConst.CertTypeEnumClass).ToList(); result.Guests = HotelContext.Guest.Where(g => !g.IsDel.Value && g.CheckId == check.Id).Select(g => new GuestResponse() { Id = g.Id, CheckId = g.CheckId, Name = g.Name, CertType = g.CertType, CertTypeName = certTypes.FirstOrDefault(t => t.FullKey == g.CertType) == null ? "" : certTypes.FirstOrDefault(t => t.FullKey == g.CertType).Name, CertId = g.CertId, Mobile = g.Mobile, Address = g.Address }).ToList(); } ; } return(result); }
public async Task <Response <RoomStatusRespones> > GetRoomStatus(int roomId, long?checkId, DateTime?date) { RoomStatusRespones result = null; if (checkId.HasValue && checkId.Value > 0) { result = await Task.Run(() => { return(Hander.GetRoomCheckById(checkId.Value)); }); } else { if (date == null || date == DateTime.Now.Date) { //当前状态 result = await Task.Run(() => { return(Hander.GetRoomNowStatusByRoomId(roomId)); }); } else if (date < DateTime.Now.Date) { //历史入住情况 result = await Task.Run(() => { return(Hander.GetRoomHistoryCheckinByRoomId(roomId, date.Value)); }); } else { //未来预定情况 result = await Task.Run(() => { return(Hander.GetRoomFutureReserveByRoomId(roomId, date.Value)); }); } } return(new Response <RoomStatusRespones>() { Status = StatusEnum.Success, Massage = "获取房间状态成功", Data = result }); }
public async Task <Response <RoomStatusRespones> > ModifyRoomCheck([FromBody] RoomStatusRespones roomCheck) { string manager = HttpContext.User.Identity.Name; KeyValuePair <bool, string> result; if (roomCheck.Id > 0) { Roomcheck check = new Roomcheck() { Id = roomCheck.Id, RoomId = roomCheck.RoomId, Status = roomCheck.Status, ReserveTime = roomCheck.ReserveTime, PlanedCheckinTime = roomCheck.PlanedCheckinTime, CheckinTime = roomCheck.CheckinTime, PlanedCheckoutTime = roomCheck.PlanedCheckoutTime, CheckoutTime = roomCheck.CheckoutTime, Prices = roomCheck.Prices, Deposit = roomCheck.Deposit, Remark = roomCheck.Remark, UpdateTime = DateTime.Now }; List <Guest> guests = new List <Guest>(); if (roomCheck.Guests != null && roomCheck.Guests.Count > 0) { guests = roomCheck.Guests.Select(g => new Guest() { Id = g.Id, CheckId = check.Id, Name = g.Name, Gender = g.Gender, CertType = g.CertType, CertId = g.CertId, Mobile = g.Mobile, Address = g.Address, IsDel = false }).ToList(); } result = await Task.Run(() => { return(Hander.UpdateCheck(check, guests, manager)); }); } else { result = await Task.Run(() => { return(Hander.AddCheck(roomCheck, manager)); }); } if (result.Key) { return(new Response <RoomStatusRespones>() { Status = StatusEnum.Success, Massage = "执行成功", Data = roomCheck }); } else { return(new Response <RoomStatusRespones>() { Status = StatusEnum.ValidateModelError, Massage = result.Value.StartsWith("数据错误")? "数据错误!请刷新重试!":result.Value, Data = null }); } }
//添加订单 public KeyValuePair <bool, string> AddCheck(RoomStatusRespones roomcheck, string manager) { if (roomcheck.Status != (int)RoomStatus.Reserved && roomcheck.Status != (int)RoomStatus.Checkin) { return(new KeyValuePair <bool, string>(false, "数据错误!")); } if (roomcheck.Status == (int)RoomStatus.Reserved) { if (!roomcheck.PlanedCheckinTime.HasValue) { return(new KeyValuePair <bool, string>(false, "预定房间必须要有计划入住时间!")); } } if (roomcheck.Status == (int)RoomStatus.Checkin) { if (!roomcheck.CheckinTime.HasValue) { return(new KeyValuePair <bool, string>(false, "入住房间必须要有入住时间!")); } } if (!roomcheck.PlanedCheckoutTime.HasValue) { return(new KeyValuePair <bool, string>(false, "必须要有计划离店时间!")); } if (roomcheck.Guests == null || roomcheck.Guests.Count <= 0) { return(new KeyValuePair <bool, string>(false, "必须要有入住人!")); } var certTypes = HotelContext.Hotelenum.Where(e => !e.IsDel.Value && e.EnumClass == DbConst.CertTypeEnumClass).ToList(); foreach (GuestResponse g in roomcheck.Guests) { if (string.IsNullOrWhiteSpace(g.Name)) { return(new KeyValuePair <bool, string>(false, "入住人存在姓名为空!")); } if (string.IsNullOrWhiteSpace(g.CertId) && roomcheck.Status == (int)RoomStatus.Checkin) { return(new KeyValuePair <bool, string>(false, "入住人存在证件号码为空!")); } //if(!certTypes.Any(c=>c.FullKey==g.CertType) && roomcheck.Status == (int)RoomStatus.Checkin) //{ // return new KeyValuePair<bool, string>(false, "入住人存在证件类型错误!"); //} } Room room = HotelContext.Room.FirstOrDefault(r => !r.IsDel.Value && r.Id == roomcheck.RoomId); if (room == null) { return(new KeyValuePair <bool, string>(false, "数据错误!")); } if (!HotelContext.Hotelmanager.Any(m => !m.IsDel.Value && m.HotelId == room.HotelId && m.WxOpenId == manager)) { return(new KeyValuePair <bool, string>(false, "没有管理员权限!")); } Roomcheck check = new Roomcheck() { RoomId = roomcheck.RoomId, Status = roomcheck.Status, ReserveTime = roomcheck.ReserveTime, PlanedCheckinTime = roomcheck.PlanedCheckinTime, CheckinTime = roomcheck.CheckinTime, PlanedCheckoutTime = roomcheck.PlanedCheckoutTime, CheckoutTime = roomcheck.CheckoutTime, Prices = roomcheck.Prices, Deposit = roomcheck.Deposit, Remark = roomcheck.Remark, IsDel = false, CreateTime = DateTime.Now, UpdateTime = DateTime.Now }; string msg; if (!canReserveOrCheckin(check, out msg)) { return(new KeyValuePair <bool, string>(false, msg)); } //add var tran = HotelContext.Database.BeginTransaction(); try { HotelContext.Roomcheck.Add(check); HotelContext.SaveChanges(); roomcheck.Id = check.Id; foreach (GuestResponse g in roomcheck.Guests) { Guest guest = new Guest() { CheckId = check.Id, Name = g.Name, Gender = g.Gender, CertType = g.CertType, CertId = g.CertId, Mobile = g.Mobile, Address = g.Address, IsDel = false, CreateTime = DateTime.Now, UpdateTime = DateTime.Now }; HotelContext.Guest.Add(guest); HotelContext.SaveChanges(); g.CheckId = check.Id; g.Id = guest.Id; } tran.Commit(); } catch (Exception ex) { tran.Rollback(); throw ex; } return(new KeyValuePair <bool, string>(true, "添加成功")); }
/// <summary> /// 获取未来预定情况 /// </summary> /// <param name="hotelId"></param> /// <param name="date"></param> /// <param name="freeChenkinTime"></param> /// <param name="freeCheckoutTime"></param> /// <returns></returns> public List <RoomStatusRespones> GetRoomFutureReserve(int hotelId, DateTime date) { DateTime freeChenkinDateTime = new DateTime(date.Year, date.Month, date.Day, DbConst.SettlementHour, 0, 0); DateTime freeCheckoutDateTime = new DateTime(date.Year, date.Month, date.Day, DbConst.SettlementHour, 0, 0); List <RoomStatusRespones> result = new List <RoomStatusRespones>(); var rooms = HotelContext.Room.Where(r => !r.IsDel.Value && r.HotelId == hotelId).OrderBy(r => r.RoomNo).ToList(); var roomTypes = HotelContext.Hotelenum.Where(e => !e.IsDel.Value && e.EnumClass == DbConst.RoomTypeEnumClass).ToList(); var certTypes = HotelContext.Hotelenum.Where(e => !e.IsDel.Value && e.EnumClass == DbConst.CertTypeEnumClass).ToList(); foreach (Room r in rooms) { RoomStatusRespones status = new RoomStatusRespones() { RoomId = r.Id, RoomNo = r.RoomNo, RoomTypeName = roomTypes.FirstOrDefault(t => t.FullKey == r.RoomType) == null ? "" : roomTypes.FirstOrDefault(t => t.FullKey == r.RoomType).Name }; //每日结算点前入住,结算点后离店的和结算点后入住,次日免费入住点前入住的 var checks = HotelContext.Roomcheck.Where( c => c.RoomId == r.Id && !c.IsDel.Value && c.Status == (int)RoomStatus.Reserved && ((c.PlanedCheckinTime <= freeCheckoutDateTime && c.PlanedCheckoutTime > freeCheckoutDateTime) || (c.PlanedCheckinTime > freeCheckoutDateTime && c.PlanedCheckinTime < freeChenkinDateTime.AddDays(1))) ).ToList(); checks.AddRange(HotelContext.Roomcheck.Where( c => c.RoomId == r.Id && !c.IsDel.Value && c.Status == (int)RoomStatus.Checkin && (c.CheckinTime <= freeCheckoutDateTime && c.PlanedCheckoutTime > freeCheckoutDateTime) )); if (checks != null && checks.Count() > 0) { foreach (var check in checks) { status.Id = check.Id; status.Status = check.Status; status.ReserveTime = check.ReserveTime; status.PlanedCheckinTime = check.PlanedCheckinTime; status.CheckinTime = check.CheckinTime; status.PlanedCheckoutTime = check.PlanedCheckoutTime; status.CheckoutTime = check.CheckoutTime; status.Prices = check.Prices; status.Deposit = check.Deposit; status.Guests = HotelContext.Guest.Where(g => !g.IsDel.Value && g.CheckId == check.Id).Select(g => new GuestResponse() { Id = g.Id, CheckId = g.CheckId, Name = g.Name, CertType = g.CertType, CertTypeName = certTypes.FirstOrDefault(t => t.FullKey == g.CertType) == null ? "" : certTypes.FirstOrDefault(t => t.FullKey == g.CertType).Name, CertId = g.CertId, Mobile = g.Mobile, Address = g.Address }).ToList(); } } ; result.Add(status); } return(result); }