温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片!
1. 项目背景与需求分析
随着酒店行业信息化程度的不断提高,传统的人工登记、纸质台账和电话调度方式已难以满足日益增长的客房管理需求。酒店客房管理系统旨在通过信息化手段,实现客房状态实时管理、预订流程自动化、入住退房高效办理以及经营数据可视化,从而降低运营成本、提升服务效率和管理水平。
本系统基于 Spring Boot 框架进行设计与实现,采用前后端分离架构,后端提供 RESTful API 接口,前端通过 Web 页面进行交互。系统核心业务围绕客房管理、预订管理、入住管理和退房管理四大模块展开,同时辅以用户权限管理和数据统计分析功能。
2. 系统需求分析
2.1 功能需求
根据酒店日常运营的实际场景,系统需要覆盖以下核心功能:
- 客房信息管理:支持客房类型、房号、楼层、价格、设施等基础信息的增删改查,以及客房状态的实时维护(空闲、已预订、已入住、维修中)。
- 客房预订管理:支持客户在线或前台预订客房,包括预订登记、预订查询、预订取消和预订变更等操作。
- 入住管理:支持办理入住登记,自动将客房状态从"已预订"或"空闲"更新为"已入住",并记录入住人信息和入住时间。
- 退房管理:支持办理退房结算,计算房费、押金退还或补缴,并自动将客房状态更新为"空闲"或"待清洁"。
- 客户信息管理:维护客户的基本资料、历史入住记录和消费记录,支持会员等级管理。
- 系统用户管理:支持管理员、前台、保洁等不同角色的账号管理,实现基于角色的权限控制。
- 数据统计分析:提供入住率、营收统计、房型热度等经营数据的可视化报表。
2.2 非功能需求
- 性能需求:系统需支持并发操作,常规查询响应时间控制在 2 秒以内。
- 安全性需求:用户密码需加密存储,接口需进行身份认证和权限校验,防止越权访问。
- 可维护性需求:代码结构清晰、模块划分合理,便于后续功能扩展和维护。
- 可用性需求:系统界面简洁友好,操作流程符合酒店前台人员的使用习惯。
3. 系统总体设计
3.1 系统架构设计
本系统采用经典的三层架构,即表现层、业务逻辑层和数据访问层。表现层负责接收用户请求并返回响应数据;业务逻辑层负责处理核心业务规则;数据访问层负责与数据库进行交互。整体架构基于 Spring Boot 的 MVC 模式,结合 MyBatis 作为持久层框架,前端采用 Vue.js 构建单页应用。
系统架构图如下:
flowchart TD A[前端 Vue.js] -- HTTP/JSON --> B[Spring Boot 控制器层] B -- 调用 --> C[业务逻辑层 Service] C -- 调用 --> D[数据访问层 Mapper] D -- SQL --> E[(MySQL 数据库)] B -- 认证授权 --> F[Spring Security + JWT] C -- 日志记录 --> G[Logback]3.2 技术选型
| 技术类别 | 技术选型 | 说明 |
|---|---|---|
| 后端框架 | Spring Boot 2.7.x | 提供自动配置、内嵌容器和快速开发能力 |
| 持久层框架 | MyBatis Plus | 简化 CRUD 操作,支持分页查询和条件构造器 |
| 数据库 | MySQL 8.0 | 存储业务数据,支持事务和索引优化 |
| 安全框架 | Spring Security + JWT | 实现登录认证和接口权限控制 |
| 前端框架 | Vue.js 3 + Element Plus | 构建管理后台界面,提供丰富的 UI 组件 |
| 构建工具 | Maven | 管理项目依赖和构建流程 |
3.3 数据库设计
系统数据库共设计 6 张核心数据表,分别为用户表、客户表、客房表、房型表、预订表和入住记录表。各表之间通过外键建立关联关系,保证数据的一致性和完整性。
核心表结构设计如下:
| 表名 | 主要字段 | 说明 |
|---|---|---|
| sys_user | id、username、password、role、status | 系统用户账号信息,角色区分管理员和前台 |
| customer | id、name、phone、id_card、member_level | 客户基本信息,支持会员等级管理 |
| room_type | id、type_name、price、bed_count、area | 房型定义,如标准间、大床房、套房 |
| room | id、room_no、floor、type_id、status | 客房信息,状态区分空闲、预订、入住、维修 |
| reservation | id、customer_id、room_id、check_in_date、check_out_date、status | 预订记录,状态区分待入住、已入住、已取消 |
| check_in_record | id、reservation_id、customer_id、room_id、check_in_time、check_out_time、total_amount | 入住与退房记录,保存完整住宿流水 |
4. 系统核心功能实现
4.1 用户登录与权限控制
系统采用 Spring Security 结合 JWT 实现无状态认证。用户登录成功后,后端生成包含用户角色信息的 JWT Token 返回给前端,前端在后续请求中携带该 Token,后端通过拦截器进行校验和权限判断。
核心认证流程如下:
sequenceDiagram participant U as 用户 participant F as 前端 participant B as 后端 U ->> F: 输入账号密码 F ->> B: POST /api/auth/login B ->> B: 校验用户名密码 B -->> F: 返回 JWT Token F ->> B: 携带 Token 请求业务接口 B ->> B: 拦截器校验 Token 和权限 B -->> F: 返回业务数据登录接口的核心实现代码如下:
@RestController @RequestMapping("/api/auth") public class AuthController { @Autowired private AuthService authService; @PostMapping("/login") public Result<LoginResponse> login(@RequestBody LoginRequest request) { String token = authService.login(request.getUsername(), request.getPassword()); return Result.success(new LoginResponse(token)); } }4.2 客房信息管理
客房管理模块提供房型和客房信息的维护功能。管理员可以新增、编辑和删除房型,设置不同房型的价格和设施信息;同时可以管理具体客房,包括房号、所在楼层和所属房型。
客房状态通过状态字段进行管理,系统提供状态变更接口,支持在空闲、已预订、已入住、维修中四种状态之间流转。客房列表查询支持按房型、楼层和状态进行组合筛选。
客房查询接口实现如下:
@Service public class RoomServiceImpl implements RoomService { @Autowired private RoomMapper roomMapper; @Override public PageResult<RoomVO> queryRooms(RoomQuery query) { LambdaQueryWrapper<Room> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(StringUtils.isNotBlank(query.getStatus()), Room::getStatus, query.getStatus()) .eq(query.getFloor() != null, Room::getFloor, query.getFloor()) .like(StringUtils.isNotBlank(query.getRoomNo()), Room::getRoomNo, query.getRoomNo()); Page<Room> page = roomMapper.selectPage(new Page<>(query.getPageNum(), query.getPageSize()), wrapper); return PageResult.of(page); } }4.3 客房预订管理
预订模块是系统的核心业务之一。客户可以通过前台进行预订登记,系统会校验所选客房在目标时间段内是否空闲,校验通过后生成预订记录,并将客房状态更新为"已预订"。
预订流程包含以下关键步骤:
- 选择入住日期、退房日期和房型,系统查询符合条件的空闲客房。
- 录入客户信息,包括姓名、手机号和身份证号。
- 选择具体客房并确认预订,系统生成预订单号。
- 支持预订取消操作,取消后客房状态自动恢复为"空闲"。
预订创建的核心逻辑如下:
@Transactional public Long createReservation(ReservationRequest request) { // 校验客房在目标时间段内是否空闲 int count = reservationMapper.checkRoomAvailable( request.getRoomId(), request.getCheckInDate(), request.getCheckOutDate()); if (count > 0) { throw new BusinessException("该客房在所选时间段内已被预订"); } // 创建预订记录 Reservation reservation = new Reservation(); reservation.setCustomerId(request.getCustomerId()); reservation.setRoomId(request.getRoomId()); reservation.setCheckInDate(request.getCheckInDate()); reservation.setCheckOutDate(request.getCheckOutDate()); reservation.setStatus(ReservationStatus.BOOKED); reservationMapper.insert(reservation); // 更新客房状态为已预订 roomMapper.updateStatus(request.getRoomId(), RoomStatus.RESERVED); return reservation.getId(); }4.4 入住与退房管理
入住管理负责将预订记录转化为实际入住。前台人员根据预订单号或客户信息查询预订记录,确认客户到店后办理入住,系统自动将客房状态更新为"已入住",并生成入住记录。
退房管理负责办理离店结算。系统根据入住时间和退房时间自动计算房费,支持押金抵扣和差额补缴,结算完成后客房状态更新为"待清洁",由保洁人员确认后转为"空闲"。
退房结算的核心代码如下:
@Transactional public CheckOutResult checkOut(Long checkInRecordId) { CheckInRecord record = checkInRecordMapper.selectById(checkInRecordId); // 计算住宿天数 long days = ChronoUnit.DAYS.between(record.getCheckInTime(), LocalDateTime.now()); if (days < 1) { days = 1; } // 计算房费 Room room = roomMapper.selectById(record.getRoomId()); BigDecimal totalAmount = room.getPrice().multiply(BigDecimal.valueOf(days)); // 更新入住记录 record.setCheckOutTime(LocalDateTime.now()); record.setTotalAmount(totalAmount); checkInRecordMapper.updateById(record); // 更新客房状态为待清洁 roomMapper.updateStatus(record.getRoomId(), RoomStatus.CLEANING); return new CheckOutResult(totalAmount, days); }5. 系统测试
5.1 测试环境
系统测试在本地开发环境完成,后端服务运行于 Spring Boot 内嵌 Tomcat 容器,数据库使用 MySQL 8.0,前端通过 Vue.js 开发服务器进行联调测试。测试工具使用 Postman 进行接口测试,JUnit 进行单元测试。
5.2 功能测试
针对系统核心功能模块,设计并执行了完整的测试用例,覆盖正常流程、异常流程和边界条件。主要测试内容包括:
- 登录认证测试:验证正确账号密码可正常登录,错误密码返回提示信息,未登录访问受保护接口返回 401 状态码。
- 客房管理测试:验证房型和客房的增删改查功能,以及客房状态流转的正确性。
- 预订流程测试:验证正常预订、重复预订冲突、预订取消等场景的处理逻辑。
- 入住退房测试:验证入住登记、房费计算、退房结算和状态更新的正确性。
5.3 测试结果
测试结果表明,系统各功能模块运行正常,核心业务流程均能按照预期执行。预订冲突校验、权限控制等关键逻辑均能正确拦截异常操作,系统整体满足设计需求。
6. 总结与展望
本文基于 Spring Boot 框架设计并实现了一套酒店客房管理系统,覆盖了客房管理、预订管理、入住退房管理和数据统计等核心业务功能。系统采用前后端分离架构,后端通过 RESTful API 提供服务,前端使用 Vue.js 构建交互界面,整体结构清晰、扩展性良好。
系统在功能完整性和易用性方面达到了预期目标,但仍存在一些可优化方向:一是可引入消息队列提升高并发场景下的预订处理能力;二是可增加移动端适配,方便管理人员随时查看经营数据;三是可接入第三方支付平台,实现在线支付和自动结算。后续将围绕这些方向持续迭代完善。