homestay-booking-platform
Health Warn
- No license — Repository has no license file
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 9 GitHub stars
Code Warn
- network request — Outbound network request in homestay-admin/package.json
Permissions Pass
- Permissions — No dangerous permissions requested
No AI report is available for this listing yet.
全栈民宿预订平台 — Spring Boot 3 + Vue 3 + MySQL + Redis + Elasticsearch + RabbitMQ。 共计 25 个业务模块:JWT 身份认证、支付宝支付、WebSocket 实时通讯、房源动态定价、ES 全文检索、AI 智能客服;基于 AOP 实现接口限流、操作审计日志、分布式锁;集成 springdoc 自动接口文档;依托 RabbitMQ 实现可靠消息处理,通过 DLX 死信队列完成订单超时关闭、优惠券批量发放、消息推送,并配套失败重试机制。
民宿预订平台 (Homestay Booking Platform)
English | 中文
民宿预订平台是一个连接房客、房东和平台管理员的综合业务系统,覆盖房源发布、平台审核、在线搜索、下单支付、入住退房、评价反馈、收益统计和后台监管等完整流程。
25 个业务模块 · 10W+ 行代码 · 267 次 commit · 持续迭代 16 个月 · 50+ 篇项目文档
项目背景
Homestay 是一个单人独立交付的全栈项目,覆盖 25 个业务模块、10W+ 行代码,后端 Spring Boot 3 + 前端 Vue 3 + MySQL / Redis / Elasticsearch / 支付宝完整链路。
项目从 2025 年 2 月持续迭代至今,我借助 AI 编码工具(Cursor / Claude Code / Kimi Code CLI 等)完成 90% 的编码工作,自己负责架构设计、需求决策、代码审查、关键模块攻关与质量把控。
这种工作流让我一个人就能 cover 三端(用户端 / 房东端 / 管理员端)的全部交付,也是 2026 年 AI 时代全栈工程师的一个真实缩影。
工具链迭代:Cursor Pro → Claude Code CLI → Kimi Code CLI
目录
项目亮点
- 三端一体:用户端、房东端、管理员端共用后端能力,分别覆盖消费、经营和平台治理场景。
- Elasticsearch 房源搜索:支持全文检索、条件筛选、地理坐标索引与搜索、相似房源推荐,搜索结果可个性化排序。
- 智能个性化推荐引擎:基于用户历史订单、收藏行为、浏览轨迹构建用户画像,实现热门推荐、个性化推荐、基于位置的推荐和相似房源推荐四种策略,支持三级降级兜底与结果多样化。
- 动态定价引擎:支持周末溢价、节假日调价、连住折扣、提前预订优惠等多维度定价规则,作用域覆盖全局/城市/房东/房源组/单个房源,支持调休补班识别与订单价格快照锁定。
- 用户行为追踪与画像:异步埋点采集搜索、浏览、点击、收藏、预订、分享等行为事件,定时聚合用户画像(价格偏好、位置偏好、房型偏好、设施偏好),反哺推荐引擎形成闭环。
- 优惠券营销系统:支持优惠券模板管理、用户领取(悲观锁防超领)、订单核销、过期清理、批量发放与 ROI 分析。
- 订单自动化状态机:基于定时任务实现订单自动入住、自动退房、超时取消(待确认/待支付/支付中三级场景),支持历史订单状态批量修复。
- 房源智能特征分析:从房源类型、价格竞争力、设施组合、位置优势、预订活跃度、周末流行度、用户评价、入住便利性 8 个维度自动生成房源特色标签,并根据用户搜索条件动态提升匹配标签优先级。
- Redis 分布式锁:基于 Lua 脚本实现原子解锁,防止误删其他线程的锁,Redis 不可用时自动降级为无锁模式。
- 价格竞争力分析:同区域/同城市/同类型多级降级比价,结合季节性因子输出竞争力等级与价格建议。
- 地图找房体验:集成高德地图,支持位置搜索、周边检索、距离计算和地图展示。
- 支付集成:接入支付宝沙箱支付(页面跳转支付 + 扫码支付),支持订单支付、异步回调、状态查询和退款。
- 工程化后端:统一响应、全局异常、权限注解、DTO 映射、缓存、数据库迁移和审计日志。
近期工程化增强(2026-08)
| 能力 | 实现方式 | 效果/意义 |
|---|---|---|
| 接口限流 | @RateLimit 注解 + AOP 切面,Redis Lua 固定窗口计数,超限返回 429,Redis 异常自动降级放行 |
保护敏感接口(支付创建、批量发券等),注解即用 |
| LLM 调用重试 | LlmClient 标注 @Retryable(3 次、指数退避),@EnableRetry 开启 |
AI 客服在 LLM 服务抖动时自动重试,不丢请求 |
| 首页统计并行化 | HomeService 五路 CompletableFuture 并行 count + allOf().join() |
首页统计接口 P95 显著下降(压测对比见 vault) |
| AOP 操作日志 | @OperationLog 注解(SpEL 动态 detail/resourceId)+ 切面异步落库 |
管理员操作全程可审计,69 处标注点 |
| API 接口文档 | springdoc-openapi 2.2.0 自动生成,Swagger UI 开箱即用 | 启动后访问 http://localhost:8081/swagger-ui.html |
| 仪表盘真实环比 | 统计接口补充昨日数据,前端计算真实环比 | 取代随机数趋势,数据可信 |
| 管理后台构建分包 | manualChunks 拆包 + Element Plus 按需引入(unplugin) | 主 chunk 1.1MB → 35KB,白屏修复(移除 transition 包裹懒加载组件) |
消息架构(RabbitMQ 三场景)
flowchart LR
subgraph S1["① 订单超时 · DLX 延迟队列"]
direction LR
O1[下单] --> O2[延迟队列<br/>TTL 2h] --> O3[DLX 死信<br/>→ 消费队列] --> O4[幂等校验<br/>→ 系统取消]
end
subgraph S2["② 批量发券 · 消息驱动 + 重试队列"]
direction LR
C1[创建任务] --> C2[主队列] --> C3[消费者发券<br/>逐条入账] --> C4[失败进重试队列<br/>60s 后自动重试 ≤3 次]
end
subgraph S3["③ 通知推送 · 可靠投递"]
direction LR
N1[事务提交] --> N2[主队列] --> N3[WebSocket<br/>实时推送] --> N4[进程崩溃不丢<br/>重启自动补推]
end
统一模式:主队列 + 重试/延迟队列(TTL 死信回主)、消费者手动 ack + 幂等校验、mq-enabled 开关降级、定时任务兜底。详细图见
obsidian-vault/03-后端/后端-RabbitMQ 消息架构.md。
技术栈
| 模块 | 技术 |
|---|---|
| 用户端 | Vue 3、TypeScript、Vite、Vue Router、Pinia、Element Plus、Axios、ECharts、高德地图、SockJS、STOMP |
| 管理端 | Vue 3、TypeScript、Vite、Vue Router、Pinia、Element Plus、Axios、ECharts |
| 后端 | Java 17、Spring Boot 3.0.2、Spring Web、Spring Security、Spring Data JPA、Spring Validation |
| 数据与缓存 | MySQL 8.0、Redis、Redisson、Flyway、Elasticsearch |
| 通信与集成 | JWT、WebSocket(STOMP)、RabbitMQ(AMQP)、支付宝 SDK、SMTP 邮件 |
| 工程工具 | Maven、npm、MapStruct、Lombok、Docker Compose |
系统架构

矢量版:docs/architecture.svg(本地
docs/architecture.drawio为 draw.io 可编辑源,按 .gitignore 约定不入库)。
系统角色
| 角色 | 说明 |
|---|---|
| 游客 | 可浏览首页、搜索房源、查看公开房源详情 |
| 房客 | 可收藏房源、提交订单、支付、退款、评价和发送消息 |
| 房东 | 可入驻平台、发布房源、管理订单、处理入住退房、查看收益统计 |
| 管理员 | 可审核房源、管理用户和订单、处理举报争议、查看统计数据和配置平台规则 |
功能概览
用户端
| 模块 | 主要能力 |
|---|---|
| 账号认证 | 注册、登录、JWT 鉴权、密码重置、个人资料维护 |
| 首页推荐 | 热门民宿、个性化推荐、基于位置的推荐 |
| 房源搜索 | Elasticsearch 关键词搜索、条件筛选、排序分页、URL 参数持久化、相似房源推荐 |
| 地图找房 | 高德地图展示、周边搜索、坐标定位、距离计算 |
| 房源详情 | 图片、设施、智能特色标签、价格、位置、房东信息、评价列表 |
| 在线预订 | 日期选择、动态定价实时计价、订单预览、库存校验 |
| 在线支付 | 支付宝页面跳转或扫码支付、支付状态查询、支付成功回跳 |
| 订单管理 | 订单列表、订单详情、取消订单、退款申请、状态跟踪 |
| 收藏评价 | 收藏/取消收藏、完成订单后评价、查看我的评价 |
| 优惠券中心 | 可领优惠券列表、我的券包、领取(防超领)、订单核销 |
| 邀请返利 | 邀请码分享、被邀请人注册后双方奖励 |
| 实名认证 | 身份认证资料提交与审核状态跟踪 |
| 消息通知 | 房客与房东即时通讯、未读提醒、系统通知(WebSocket 实时推送) |
房东端
| 模块 | 主要能力 |
|---|---|
| 房东入驻 | 入驻资料填写、身份认证、房东资料维护 |
| 房东控制台 | 房源、订单、收入、评价和最近订单概览 |
| 房源管理 | 创建、编辑、草稿保存、提交审核、上下架、删除、分组管理 |
| 房源发布 | 基本信息、位置、设施、描述、图片等分步录入 |
| 订单处理 | 查看订单、确认订单、拒绝订单、退款审核、争议处理 |
| 入住退房 | 生成入住凭证、自助入住码、办理入住、退房结算、押金和额外费用 |
| 房东日历 | 日期库存/房价一览、锁房、订单日程、按日期调价 |
| 收益管理 | 总收益、本月收益、未结算收益、日/月趋势统计、数据导出 |
| 评价管理 | 评分分布、评价列表、房东回复、未回复提醒 |
| 消息通知 | 会话列表、聊天记录、订单和审核通知 |
管理员端
| 模块 | 主要能力 |
|---|---|
| 审核工作台 | 待审核房源、批量审核、审核历史、审核统计 |
| 房源治理 | 房源列表、强制下架、违规记录、房源类型和设施管理 |
| 用户管理 | 用户列表、启用/禁用、身份认证审核 |
| 订单管理 | 多条件筛选、退款审核、争议解决 |
| 违规管理 | 举报列表、处理/忽略举报、违规扫描、重复举报统计 |
| 数据统计 | 订单、收入、用户、房源概览和趋势分析 |
| 定价规则 | 全局/城市/房东/房源多级定价规则配置与优先级管理 |
| 优惠券管理 | 模板创建、批量发放(MQ 消息驱动 + 重试队列)、使用统计与 ROI 分析 |
| 营销活动 | 活动 campaign 管理、自动启停、A/B 实验(多版本对照与数据回收) |
| 系统配置 | 平台配置、政策配置、费用配置 |
| 公告管理 | 发布系统通知和活动公告 |
| 日志审计 | 管理员操作日志、登录日志 |
后端能力
| 能力 | 说明 |
|---|---|
| 统一响应 | 使用 ApiResponse<T> 统一返回 success、code、message、data 和 timestamp |
| 认证授权 | 使用 Spring Security + JWT 实现无状态认证,并按角色控制接口访问 |
| 数据访问 | 使用 Spring Data JPA、Repository 和 Specification 支持复杂查询 |
| 数据迁移 | 使用 Flyway 管理数据库结构演进(V1 ~ V49) |
| 缓存加速 | 使用 Redis 缓存热点数据和推荐数据,Spring Cache 管理推荐缓存 |
| 分布式锁 | 基于 Redis + Lua 脚本实现分布式锁,支持故障降级;@RedisLock 注解 + 切面(SpEL key)开箱即用 |
| 接口限流 | @RateLimit 注解 + 切面(Redis Lua 固定窗口),超限 429,Redis 异常降级放行 |
| 接口文档 | springdoc-openapi 自动生成 OpenAPI 3 文档,Swagger UI 开箱即用 |
| 性能优化 | 首页统计五路 CompletableFuture 并行化、接口耗时统计切面(ApiTimingAspect) |
| 实时通信 | 使用 WebSocket(STOMP 协议)支持聊天消息和通知的实时推送 |
| 搜索服务 | 基于 Elasticsearch 构建房源搜索引擎,支持增量同步与全量重建 |
| 推荐服务 | 多策略推荐引擎 + 用户画像服务 + 行为追踪,支持缓存与降级 |
| 定价引擎 | 多维度动态定价规则引擎,支持日期级与订单级调价,规则优先级与叠加控制 |
| 支付集成 | 接入支付宝沙箱支付,支持页面跳转支付、扫码支付、异步通知、订单查询和退款 |
| 异常处理 | 使用 @RestControllerAdvice 统一处理业务异常和系统异常 |
| 对象映射 | 使用 MapStruct 完成 Entity、DTO、Request、Response 转换 |
| 审计记录 | 异步记录管理员操作(@OperationLog 注解)、登录行为和关键业务状态变化 |
| 定时任务 | 订单状态自动流转、超时处理、优惠券清理、用户画像聚合 |
| AI 智能客服 | 三层 Agent:FAQ 咨询(只读工具)、订单服务(申请型写操作,起草+确认)、争议辅助(管理员裁决建议草稿) |
AI 客服 Agent(三层架构)
| 层级 | 能力 | 安全设计 |
|---|---|---|
| 第一层 FAQ 咨询 | 订单/退款/入住/评价等 7 个只读工具,两阶段 LLM 编排 | 白名单硬编码、敏感词直达人工、3 轮转人工 |
| 第二层 订单服务 | 代客申请退款、取消订单、发起争议(3 个申请型写操作) | 只起草不执行,前端确认卡片 → /api/support/agent/confirm 才真正提交;订单客人强校验 |
| 第三层 争议辅助 | 管理员仲裁前一键生成裁决建议草稿(订单时间线+聊天摘要+历史相似案例+LLM 建议) | 仅 ADMIN 可调,只建议绝不自动仲裁 |
详细设计见
obsidian-vault/04-架构分析/方案-AI客服Agent-三方权限矩阵.md(v1.0),测试见obsidian-vault/04-架构分析/AI客服Agent-测试报告.md。
核心业务流程
房源发布与审核
房东创建房源草稿
-> 补充位置、设施、描述和图片
-> 提交审核
-> 管理员审核
-> 审核通过后上线 / 审核拒绝后退回修改
订单生命周期
房客提交订单
-> 待支付
-> 已支付
-> 房东确认
-> 准备入住
-> 已入住(定时任务自动流转)
-> 已退房(定时任务自动流转)
-> 已完成
-> 房客评价
退款与争议
房客申请退款
-> 房东审核
-> 同意退款 -> 退款中 -> 退款完成
-> 拒绝退款 -> 用户发起争议 -> 管理员介入处理
收益结算
订单完成
-> 生成房东收益
-> 进入可结算金额
-> 房东查看收益统计与趋势
项目结构
homestay3/
├── homestay-front/ # 用户端 + 房东端,Vue 3 + Vite
├── homestay-admin/ # 管理员端,Vue 3 + Vite
├── homestay-backend/ # 后端 API,Spring Boot
├── docs/ # 项目说明文档
│ └── INSTALL.md # 安装教程(含 AI Agent 安装指引)
├── tools/ # 本地工具脚本或辅助工具
├── docker-compose.yml # Docker Compose 配置(含 Elasticsearch)
├── README.md # 项目总览(中文)
├── README_EN.md # 项目总览(英文)
└── .gitignore # Git 忽略规则
后端主要分层:
com.homestay3.homestaybackend
├── config/ # 安全、缓存、跨域、WebSocket、支付等配置
├── controller/ # REST API 控制器
├── service/ # 核心业务逻辑
│ ├── search/ # 搜索与推荐相关服务
│ ├── agent/ # AI 客服(工具、LLM 客户端)
│ └── gateway/ # 支付网关
├── repository/ # JPA 数据访问层
├── entity/ # 数据库实体
├── dto/ # 数据传输对象
├── mapper/ # MapStruct 映射
├── model/ # 枚举和常量
├── annotation/ # 自定义注解(@RateLimit / @OperationLog / @RedisLock)
├── aspect/ # AOP 切面(限流 / 操作日志 / 分布式锁 / 接口耗时)
├── mq/ # RabbitMQ 生产者与消费者
├── exception/ # 全局异常处理
├── security/ # JWT 与认证授权
├── util/ # 通用工具类
└── job/ # 定时任务
快速开始
完整的安装教程(含 AI Agent 自动安装指引)见 docs/INSTALL.md。
环境要求
| 环境 | 推荐版本 | 必需 |
|---|---|---|
| JDK | 17+ | ✅ |
| Maven | 3.6+ | ✅ |
| MySQL | 8.0+ | ✅ |
| Redis | 6.0+ | ✅ |
| Elasticsearch | 8.5+ | ✅(后端启动依赖 ES 客户端连接,即使 elasticsearch.enabled=false 也需容器在线) |
| RabbitMQ | 3.13+(management) | ❌(可选,订单超时延迟队列依赖) |
| Node.js | 18+ | ✅ |
| npm | 9+ | ✅ |
| Docker + Docker Compose | 最新稳定版 | ❌(仅用于启动 ES / RabbitMQ) |
1. 克隆项目
git clone https://github.com/goaltang/homestay3.git
cd homestay3
2. 启动基础设施
MySQL — 创建数据库:
mysql -u root -p -e "CREATE DATABASE homestay_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
Redis — 确保 Redis 在 localhost:6379 运行:
redis-server --daemonize yes
Elasticsearch(可选) — 通过 Docker Compose 启动:
docker-compose up -d elasticsearch
注意:
elasticsearch.enabled=false仅关闭索引同步与 ES 搜索降级为 JPA,但 ElasticsearchRepository 仍会初始化,ES 容器必须保持在线,否则后端启动失败。
RabbitMQ(可选,订单超时延迟队列) — 通过 Docker Compose 启动:
docker-compose up -d rabbitmq
管理台地址:
http://localhost:15672(默认账号homestay / homestay123,可在 compose 中修改)。订单超时采用「RabbitMQ 延迟队列为主 + 定时轮询兜底」双保险:MQ 不可用时,轮询任务仍会取消超时订单,因此不启动 RabbitMQ 也不影响系统正确性。
3. 配置后端
复制配置模板并修改:
cd homestay-backend
cp src/main/resources/application.example.properties src/main/resources/application-local.properties
编辑 application-local.properties,填入本地的 MySQL 密码、Redis 密码、JWT 密钥等。
也可以直接修改
application.properties,但请注意不要将敏感信息提交到仓库。
4. 启动后端
cd homestay-backend
mvn clean compile
mvn spring-boot:run
后端默认运行在 http://localhost:8081。Flyway 会自动执行全部数据库迁移(V1 ~ V49,共 41 个脚本),无需手动建表。
5. 启动用户端和房东端
cd homestay-front
cp .env.example .env.local # 可选,配置高德地图 Key
npm install
npm run dev
访问 http://localhost:5173。Vite 已配置代理,/api 请求自动转发到后端 http://127.0.0.1:8081。
6. 启动管理员端
cd homestay-admin
npm install
npm run dev
访问 http://localhost:5174。Vite 已配置代理,/api 请求自动转发到后端。
首次使用
首次启动后端时,DataInitializer 会自动初始化默认设施数据,AdminServiceImpl 会自动创建默认管理员账号 admin / admin888(ROLE_ADMIN,仅当 admin 用户不存在时创建)。
- 管理员:直接用
admin / admin888登录管理端(localhost:5174)。 - 房客 / 房东:在用户端 (
localhost:5173) 注册账号即可使用。
配置说明
后端配置文件位于:
homestay-backend/src/main/resources/application.properties
本地运行需要关注这些配置:
| 配置 | 说明 |
|---|---|
spring.datasource.* |
MySQL 连接地址、用户名和密码 |
spring.data.redis.* |
Redis 地址、端口、密码和数据库编号 |
spring.elasticsearch.* |
Elasticsearch 连接地址(可选) |
elasticsearch.enabled |
设为 false 可跳过 ES,降级为 JPA 搜索 |
spring.rabbitmq.* |
RabbitMQ 连接地址、端口、账号(可选,订单超时延迟队列依赖) |
order.timeout.mq-enabled |
订单超时 MQ 消费开关,设为 false 时仅靠轮询兜底 |
order.timeout.* |
订单超时时长(pending / confirmed / payment-pending 小时数、预警提前分钟数) |
jwt.secret |
JWT 签名密钥 |
spring.mail.* |
邮件服务配置 |
payment.alipay.* |
支付宝沙箱应用、公钥、私钥、网关和回调地址 |
file.upload-dir |
上传文件保存目录 |
agent.llm.* |
AI 客服 LLM 配置(开关、模型、超时、API Key) |
*.mq-enabled |
三个 MQ 场景开关:order.timeout / coupon.batch / notification.push,设为 false 走定时任务/降级路径 |
springdoc.* |
接口文档配置(可选,默认 /swagger-ui.html + /v3/api-docs) |
前端环境变量:
| 文件 | 说明 |
|---|---|
homestay-front/.env.example |
用户端环境变量模板(高德地图 Key 等) |
测试与构建
后端
cd homestay-backend
mvn test
mvn clean package
测试构成(60 个测试类,全部 H2 内存库):
- 单元测试:
src/test/java/.../mq/(MQ 消费者:订单超时/批量发券/通知推送)、service/impl/(订单/支付/券/争议/通知/审核等核心规则)、service/agent/(AI 客服:工具注册/写工具只读校验/两阶段编排)、service/search/(ES 降级/画像聚合)、aspect/(@RateLimit/@RedisLock/@OperationLog 三个切面) - API 自动化测试:
src/test/java/.../api/(AuthApiTest / OrderApiTest / CouponApiTest / NotificationApiTest,验证认证、下单、发券、通知全链路,H2 内存库 + MQ 降级路径) - 集成测试:
src/test/java/.../integration/(BookingWorkflow / ConcurrentBooking 并发防超卖等)
⚠️ 测试安全红线:所有测试必须走
application-test.properties(H2 内存库),禁止连接真实 MySQL(历史曾发生测试清空生产数据事故)。
用户端
cd homestay-front
npm run build
管理员端
cd homestay-admin
npm run build
文档索引
| 文档 | 说明 |
|---|---|
| 安装教程 | 详细安装指南,含 AI Agent 自动安装指引 |
| 项目结构总览 | 项目目录和模块职责 |
| 项目技术栈说明 | 技术选型和依赖说明 |
| 开发环境配置指南 | 本地开发环境准备 |
| homestay-admin 详细结构 | 管理端目录结构说明 |
| 用户端说明 | 用户端和房东端前端说明 |
| 管理端说明 | 管理端前端说明 |
安全说明
本仓库不包含任何真实密钥:application.properties 已被 .gitignore 排除,仓库内仅提供application.example.properties 模板(数据库密码、JWT 密钥、支付宝私钥、LLM API Key 等均为占位符)。
请复制为 application-local.properties 并填入本地真实值,切勿将真实密钥提交到仓库。
许可证
MIT License
Reviews (0)
Sign in to leave a review.
Leave a reviewNo results found