示例#1
0
        /// <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
            });
        }
示例#3
0
        /// <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);
        }
示例#4
0
        /// <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);
        }
示例#5
0
        /// <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
                });
            }
        }
示例#8
0
        //添加订单
        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, "添加成功"));
        }
示例#9
0
        /// <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);
        }