Skip to content

EXtreameChallenge/SpringBoot-Vue-Homestay

Repository files navigation

🏨 SpringBoot-Vue-Homestay —— JavaEE 实践周满分作业

别人交作业凑技术点,你拿这个交,老师会觉得你是来答辩的

Spring Boot Vue Element Plus Sa-Token MyBatis-Plus MySQL

为什么你的同学都在找这种项目

JavaEE 实践周的评分是「功能实现 35 分 + 数据库设计 20 分 + 界面/代码/拓展/答辩各 10 分 + 总结 5 分 + 特别加分 5 分」。

大多数同学的项目是这样的:

扣分项 别人的大作业 你的项目
权限控制 无,所有人能看所有页面 🟢 Sa-Token RBAC,管理员/服务员两套菜单
操作日志 无,谁改了数据不知道 🟢 AOP 自动记录每次增删改,完整审计
订单状态流转 简单 CRUD,无状态机 🟢 预订→入住→完成→取消,完整生命周期
数据库关联 单表操作 🟢 用户-角色-菜单多对多,订单-房间-客户一对多
演示数据 空数据库,评审时现录 🟢 一条 SQL 导入 15 客户 + 15 间房 + 38 条订单
代码注释 🟢 Controller/Service/Mapper 均有注释
Thymeleaf ❌ 完全没有(扣 5 分) 🟡 依赖已集成到 pom.xml,补充模板即拿分

老师评分表对标

评分项(满分) 本项目得分点
界面设计(10) Element Plus 统一 UI,配色协调,表格/表单/弹窗风格一致
数据库设计(20) 7 张业务表,含多对多关联(角色-菜单)、一对多(订单-房间)、外键约束
功能实现(35) 10 个模块全部可增删改查,无报错,状态流转正确
代码质量(10) Controller-Service-Mapper 三层清晰,AOP 日志解耦,异常统一处理
项目拓展(10) Sa-Token RBAC + AOP 日志 + 订单状态机 + 动态路由
答辩(10) 附答辩话术模板,7 个老师必问问题 + 满分回答
总结(5) 格式规范、技术用语准确
额外加分(5) 演示数据 + 两个角色切换 + 动态路由权限

功能模块

📊 控制台           — 今日预入住/预退房/可用房间/本周收入统计卡片
                     + 房间状态饼图(空闲/预订/入住/维修)
🏨 酒店管理
   ├── 📋 订单管理  — 全部/待入住/已入住/已完成/已取消 Tab 切换
   │                 新增订单自动计算总价、自动标房间为"预订"
   │                 确认入住 / 退房 / 收款 / 取消 / 续住
   ├── 🏠 房间管理  — 新增/编辑/删除/搜索,图片上传
   │                 8 个城市覆盖:北京/上海/广州/深圳/杭州/成都/西安/三亚
   └── 👥 客户管理  — 新增/编辑/删除/搜索,姓名/手机号查询
⚙️ 系统管理
   ├── 👤 用户管理  — 新增/编辑/删除/搜索/状态切换,角色筛选
   ├── 🛡️ 角色管理  — 角色定义 + 菜单权限树勾选
   ├── 📑 菜单管理  — 动态菜单 CRUD,图标/路径/排序
   ├── 📝 日志管理  — 操作日志查看/批量删除,记录操作人/IP/耗时
   └── 📄 营业日报  — Thymeleaf 依赖已集成,补充模板即可拿技术拓展分
💰 财务统计         — 月度收入柱状图 + 周收入柱状图(ECharts)

技术栈

后端(Java)

技术 版本 作用 教学对标
Spring Boot 2.7.6 快速开发、自动配置、打包发布 ✅ 考核要求 Spring Boot
Spring MVC 随 Boot @RestController + @RequestMapping,RESTful 接口 ✅ 考核要求 Spring MVC
MyBatis-Plus 3.5.2 Lambda 查询、分页插件、自动填充 ✅ 考核要求 MyBatis/Plus
Sa-Token 1.34 RBAC 权限认证、登录拦截、菜单权限 🔥 拓展加分
AOP @Around 环绕通知,自动记录操作日志 🔥 拓展加分
Thymeleaf 随 Boot 模板引擎依赖已集成,预留营业日报扩展 🟡 补充即拿技术分
Lombok 1.18.30 简化 getter/setter/构造器 代码规范加分
MySQL 8.0 关系型数据库 ✅ 考核要求

前端(Vue)

技术 版本 作用
Vue 3.x 渐进式框架
Vue Router 4.x 动态路由 + beforeEach 登录守卫
Vuex 4.x 全局状态管理(token / 菜单 / 用户信息)
Element Plus 2.2 表格/表单/弹窗/菜单/导航/图标
Axios 1.x 统一请求封装,baseURL/超时/拦截器
ECharts 5.4 财务统计柱状图
TypeScript 4.5 类型安全

🚀 3 分钟跑起来

前置条件

  • JDK 17+
  • Maven 3.8+
  • MySQL 8.0
  • Node.js 16+

第 1 步:导入数据库

-- 创建数据库
CREATE DATABASE IF NOT EXISTS homestay DEFAULT CHARSET utf8mb4;
USE homestay;

-- 一键导入所有数据(表结构 + 演示数据)
source demo_data.sql;

这条 SQL 包含了 7 张表的建表语句 + 15 个客户 + 15 间房 + 38 条订单 + 2 个角色 + 系统用户 + 50 条操作日志。数据立刻可演示。

第 2 步:修改数据库连接

编辑 homestayback/src/main/resources/application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/homestay?useUnicode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=你的MySQL密码

第 3 步:启动后端

cd homestayback
mvn spring-boot:run

后端运行在 http://localhost:8091

第 4 步:启动前端

cd homestayfront
npm install
npm run serve

前端运行在 http://localhost:8080,已通过 vue.config.js 配置代理到后端 8091 端口。

第 5 步:登录体验

角色 账号 密码 能看到的菜单
超级管理员 admin 123456 全部功能
服务员 worker 123456 控制台 + 订单/房间/客户

两个角色看到的菜单不一样,这是 Sa-Token 动态路由 RBAC 的体现,答辩时切换演示。

订单状态流转(答辩核心亮点)

用户前台预订 / 管理员手动建单
        │
        ▼
    [预订状态] ────取消────▶ [已取消]
        │
    确认入住
        │
        ▼
    [入住状态] ────退房────▶ [已完成]
        │
    续住(延长天数、重算金额)
操作 接口 触发条件 副作用
新增订单 POST /h/order 房间必须"空闲" 房间自动变为"预订",总价=房价×天数
确认入住 PUT /h/order 订单状态为"预订" 状态变为"入住"
退房 POST /h/order/checkout 订单状态为"入住"且已支付 状态变为"完成",恢复房间为"空闲"
取消 DELETE /h/order/{id} 订单状态为"预订" 状态变为"取消",恢复房间"空闲"
续住 PUT /h/order/orderPlus 订单状态为"入住" 延长天数,重新计算金额,重置支付状态
收款 POST /h/order/pay 支付状态标记为"已支付"

数据库设计

sys_user ──┐              h_order ──── h_room
   │       │                 │              │
   │    sys_role_menu        │           h_room_img
   │       │                 │
   └── sys_role              │
           │                 │
        sys_menu          h_user

关键关联:
  sys_user  ←── N:1 ──→  sys_role         (用户属于一个角色)
  sys_role  ←── M:N ──→  sys_menu         (角色拥有多个菜单,通过 sys_role_menu)
  h_order   ←── N:1 ──→  h_room           (订单对应一个房间)
  h_order   ←── N:1 ──→  h_user           (订单对应一个客户)
  h_room    ←── 1:N ──→  h_room_img       (房间有多张图片)

项目结构

SpringBoot-Vue-Homestay/
├── homestayback/                        # Spring Boot 后端
│   └── src/main/java/com/homestay/homestay/
│       ├── config/                      # 配置层
│       │   ├── aop/SysLogAspect.java    # 🔥 AOP 环绕通知,自动记录操作日志
│       │   ├── satoken/                 # Sa-Token 拦截器 + 权限实现
│       │   └── mybatis/                 # MyBatis-Plus 分页/自动填充
│       ├── controller/                  # 控制器层(HOrder/HRoom/HUser/Sys*)
│       ├── service/                     # 业务逻辑层 + impl 实现
│       ├── mapper/                      # MyBatis-Plus Mapper 接口
│       ├── entity/                      # 实体类(@TableName/@TableId)
│       └── common/                      # 统一返回 Res<T> + 全局异常 + CORS
├── homestayfront/                       # Vue 3 前端
│   └── src/
│       ├── views/                       # 页面组件(10 个 .vue)
│       │   ├── h/                       # 酒店管理(订单/房间/客户)
│       │   └── sys/                     # 系统管理(用户/角色/日志)
│       ├── layout/                      # 布局(侧边栏/顶栏/标签页)
│       ├── router/                      # 动态路由 + 登录守卫
│       ├── store/                       # Vuex Token/菜单/用户
│       └── utils/request.ts            # Axios 封装,Satoken 注入
├── demo_data.sql                        # 🔥 演示数据(开箱即用)
└── 答辩话术.txt                          # 💬 7 个老师必问问题 + 满分回答

Star 这个项目,答辩的时候被问到"你参考了哪些开源项目",你可以说"Star 过这个项目,在此基础上做了 XX 改进"——老师会觉得你有开源视野。

💬 项目根目录的 答辩话术.txt 包含了 7 个老师最常问的问题和满分回答模板,答辩前看一遍。拿到优秀记得回来还愿。

About

🏨 JavaEE实践周满分作业 | Spring Boot 2.7.6 + Vue 3 + Sa-Token RBAC + AOP日志 + 订单状态机 | 附答辩话术+演示数据

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors