以下是基于Spring Boot和Vue的民宿管理系统的实现方案,包含技术选型、功能模块设计和实现要点:
一、技术栈选型
- 后端
- 核心框架:Spring Boot 2.x
- 安全框架:Spring Security + JWT
- 数据库:MySQL 8.x
- 持久层:MyBatis-Plus(简化CRUD)
- 缓存:Redis(可选,用于登录缓存/热点数据)
- 文件存储:OSS(阿里云对象存储)或本地存储
- 接口文档:Swagger 3.0
- 前端
- 核心框架:Vue 3 + TypeScript
- UI组件库:Element Plus 或 Ant Design Vue
- 状态管理:Pinia(替代Vuex)
- 路由管理:Vue Router 4
- HTTP库:Axios
- 地图服务:高德地图API(可选)
- 其他工具
- 构建工具:Maven(后端) / npm(前端)
- 部署工具:Docker + Nginx(前后端分离部署)
二、核心功能模块
1. 用户端功能
模块 | 功能点 |
---|
用户管理 | 注册/登录(手机号+验证码)、第三方登录(微信)、个人信息管理、实名认证 |
民宿浏览 | 多条件筛选(价格/位置/房型)、地图找房、收藏民宿、查看详情(图片/评论/设施) |
预订管理 | 在线预订(选择日期/房型)、订单支付(模拟或对接支付宝/微信)、订单状态跟踪 |
评价系统 | 发表评价(带图片)、查看历史评价、评分统计 |
消息通知 | 订单状态变更通知、系统公告推送 |
2. 商家端功能
模块 | 功能点 |
---|
房源管理 | 发布/编辑房源(多图上传)、设置价格策略(节假日调价)、房态日历管理 |
订单管理 | 确认/拒绝订单、查看订单详情、导出订单报表 |
数据统计 | 营收数据可视化(折线图/柱状图)、入住率分析 |
3. 后台管理
模块 | 功能点 |
---|
系统管理 | 角色权限管理(RBAC)、操作日志审计、敏感词过滤 |
民宿审核 | 新发布房源审核、违规房源下架 |
运营分析 | 全局数据统计(用户增长/订单趋势)、热门房源排行 |
三、数据库设计(关键表)
-- 用户表
CREATE TABLE `user` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`username` VARCHAR(50) UNIQUE NOT NULL,
`password` VARCHAR(100) NOT NULL,
`phone` VARCHAR(20) NOT NULL,
`avatar` VARCHAR(255),
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- 民宿表
CREATE TABLE `house` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`title` VARCHAR(100) NOT NULL,
`address` VARCHAR(200) NOT NULL,
`price` DECIMAL(10,2) NOT NULL,
`status` TINYINT DEFAULT 1 COMMENT '0-下架 1-可预订',
`user_id` BIGINT NOT NULL COMMENT '房东ID',
`gmt_create` DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- 订单表
CREATE TABLE `order` (
`id` VARCHAR(32) PRIMARY KEY COMMENT '分布式ID',
`user_id` BIGINT NOT NULL,
`house_id` BIGINT NOT NULL,
`start_date` DATE NOT NULL,
`end_date` DATE NOT NULL,
`total_price` DECIMAL(10,2) NOT NULL,
`status` TINYINT DEFAULT 0 COMMENT '0-待支付 1-已支付 2-已取消'
);
-- 评论表
CREATE TABLE `comment` (
`id` BIGINT PRIMARY KEY AUTO_INCREMENT,
`content` TEXT NOT NULL,
`score` TINYINT NOT NULL,
`user_id` BIGINT NOT NULL,
`house_id` BIGINT NOT NULL,
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP
);
四、接口设计示例
1. 民宿搜索接口
// HouseController.java
@GetMapping("/houses")
public Result searchHouses(
@RequestParam(required = false) String keywords,
@RequestParam(required = false) BigDecimal minPrice,
@RequestParam(required = false) BigDecimal maxPrice,
@RequestParam(defaultValue = "1") Integer page,
@RequestParam(defaultValue = "10") Integer size) {
// 构造查询条件
QueryWrapper<House> queryWrapper = new QueryWrapper<>();
if (StringUtils.hasText(keywords)) {
queryWrapper.like("title", keywords).or().like("address", keywords);
}
queryWrapper.between("price", minPrice, maxPrice);
// 分页查询
Page<House> pageResult = houseService.page(new Page<>(page, size), queryWrapper);
return Result.ok(pageResult);
}
2. JWT认证拦截器
public class JwtInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) {
String token = request.getHeader("Authorization");
if (StringUtils.isEmpty(token)) {
throw new AuthException("未提供Token");
}
Claims claims = JwtUtils.parseToken(token);
// 将用户信息存入请求上下文
UserContext.setCurrentUser(claims.getSubject());
return true;
}
}
五、关键实现细节
- 安全控制
- 敏感操作(如支付)需二次验证
- 使用HTTPS传输敏感数据
- 防止SQL注入:MyBatis使用#{}占位符
- 性能优化
- 民宿列表页缓存:Redis缓存热门搜索条件结果
- 图片处理:使用CDN加速图片加载
- 分页查询:后端必须做分页限制
- 支付集成
// 示例:支付宝支付回调处理
@PostMapping("/pay/callback")
public String handleAlipayCallback(@RequestParam Map<String, String> params) {
boolean signVerified = AlipaySignature.rsaCheckV1(params);
if (signVerified) {
String tradeStatus = params.get("trade_status");
if ("TRADE_SUCCESS".equals(tradeStatus)) {
orderService.updateOrderStatus(params.get("out_trade_no"), 1);
}
return "success";
}
return "failure";
}
六、部署方案
- 前端部署
npm run build
# 将dist目录部署到Nginx
- 后端部署
FROM openjdk:11
COPY target/*.jar /app.jar
EXPOSE 8080
CMD ["java", "-jar", "/app.jar"]
七、扩展方向
- 智能推荐:基于用户行为使用协同过滤算法推荐民宿
- 智能门锁:对接物联网设备实现自助入住
- 数据分析:使用ELK实现日志分析
建议采用敏捷开发模式,分阶段实现核心功能(先完成用户端预订流程),逐步迭代优化。