From e342fd2c19f7d5851ce6de007f39436f7c493136 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=90=E6=96=87=E9=9B=AF?= <3363402744@qq.com> Date: Thu, 30 May 2024 23:06:17 +0800 Subject: [PATCH] booking mangment --- booking_management.py | 62 +++++++++++++++++++++++++++++++++++++++++++ room_management.py | 58 ---------------------------------------- 2 files changed, 62 insertions(+), 58 deletions(-) create mode 100644 booking_management.py delete mode 100644 room_management.py diff --git a/booking_management.py b/booking_management.py new file mode 100644 index 0000000..7d6c550 --- /dev/null +++ b/booking_management.py @@ -0,0 +1,62 @@ +from sqlalchemy import Column, Integer, String, ForeignKey, DateTime +from sqlalchemy.orm import relationship +from datetime import datetime, timezone +from .room_management import Room, Base # 假设room_management.py在同一包内,或根据实际情况调整导入路径 + +# 预订模型 +class Booking(Base): + __tablename__ = 'bookings' # 注意双下划线的正确使用 + id = Column(Integer, primary_key=True) + room_id = Column(Integer, ForeignKey('rooms.id'), nullable=False) + guest_name = Column(String, nullable=False) + start_date = Column(DateTime, nullable=False, default=lambda: datetime.now(timezone.utc)) # 使用时区感知的默认值 + end_date = Column(DateTime, nullable=False) + room = relationship("Room", back_populates="bookings") + + def __repr__(self): + return f"Booking(id={self.id}, room={self.room.room_number}, guest='{self.guest_name}', start_date={self.start_date}, end_date={self.end_date})" + +# 初始化Room模型与Booking之间的关系 +Room.bookings = relationship("Booking", order_by=Booking.id, back_populates="room") + +def make_booking(room_number, guest_name, start_date_str, end_date_str): + """创建预订""" + from dateutil.parser import parse + try: + start_date = parse(start_date_str).replace(tzinfo=None) + end_date = parse(end_date_str).replace(tzinfo=None) + room = session.query(Room).filter_by(room_number=room_number, status='available').first() + if not room: + return "该房间不可用或不存在。" + new_booking = Booking(guest_name=guest_name, start_date=start_date, end_date=end_date, room=room) + room.status = 'occupied' + session.add(new_booking) + session.commit() + return f"{guest_name} 的预订成功,房间号:{room_number},时间:{start_date} 至 {end_date}" + except Exception as e: + return str(e) + +def cancel_booking(booking_id): + """取消预订""" + booking = session.query(Booking).get(booking_id) + if not booking: + return "预订记录不存在。" + room = booking.room + room.status = 'available' + session.delete(booking) + session.commit() + return f"预订ID为{booking_id}的预订已取消。" + +def get_bookings_by_guest(guest_name=None): + """按客人姓名获取预订记录""" + query = session.query(Booking) + if guest_name: + query = query.filter_by(guest_name=guest_name) + return query.all() + +def get_bookings_by_room(room_number): + """按房间号获取预订记录""" + room = session.query(Room).filter_by(room_number=room_number).first() + if not room: + return [] + return room.bookings diff --git a/room_management.py b/room_management.py deleted file mode 100644 index f261002..0000000 --- a/room_management.py +++ /dev/null @@ -1,58 +0,0 @@ -from sqlalchemy import create_engine, Column, Integer, String -from sqlalchemy.ext.declarative import declarative_base -from sqlalchemy.orm import sessionmaker - -# 数据库连接配置 -DATABASE_URI = 'sqlite:///hotel_rooms.db' -engine = create_engine(DATABASE_URI) -Base = declarative_base() -Session = sessionmaker(bind=engine) -session = Session() - -# Room模型定义 -class Room(Base): - __tablename__ = 'rooms' - id = Column(Integer, primary_key=True) - room_number = Column(Integer, unique=True, nullable=False) - room_type = Column(String, nullable=False) # 如 'single', 'double', 'suite' - status = Column(String, nullable=False, default='available') # 如 'available', 'occupied', 'maintenance' - - def __repr__(self): - return f"Room(number={self.room_number}, type='{self.room_type}', status='{self.status}')" - -# 数据库表结构创建 -Base.metadata.create_all(bind=engine) - -def add_room(room_number, room_type): - """添加房间到数据库""" - if session.query(Room).filter_by(room_number=room_number).first(): - return "该房间号已存在,请选择其他房间号。" - new_room = Room(room_number=room_number, room_type=room_type) - session.add(new_room) - session.commit() - return f"房间号为{room_number}的{room_type}型房间已添加。" - -def list_rooms(status=None): - """查询并列出所有房间,可选指定房间状态""" - query = session.query(Room) - if status: - query = query.filter_by(status=status) - return query.all() - -def update_room_status(room_number, new_status): - """更新房间状态""" - room = session.query(Room).filter_by(room_number=room_number).first() - if not room: - return f"未找到房间号为{room_number}的房间。" - room.status = new_status - session.commit() - return f"房间号{room_number}的状态已更新为'{new_status}'。" - -def delete_room(room_number): - """删除指定房间""" - room = session.query(Room).filter_by(room_number=room_number).first() - if not room: - return f"未找到房间号为{room_number}的房间。" - session.delete(room) - session.commit() - return f"房间号为{room_number}的房间已删除。" \ No newline at end of file