1. 项目背景与核心需求
"十里香"快餐店智慧化升级项目源于当前餐饮行业数字化转型的迫切需求。随着移动互联网和智能推荐技术的普及,传统快餐店面临着三大痛点:点餐效率低下、顾客口味偏好难以捕捉、菜品更新缺乏数据支撑。这个基于SpringBoot的毕业设计项目,正是为了解决这些实际问题而设计的完整解决方案。
系统采用B/S架构,后端基于SpringBoot 2.7.5(兼容JDK11),前端可选Vue.js或Thymeleaf模板引擎,数据库使用MySQL 8.0。核心功能模块包括:
- 智能点餐系统(含扫码点餐、套餐搭配)
- 用户口味画像构建模块
- 协同过滤推荐算法引擎
- 门店经营数据看板
提示:选择SpringBoot 2.x而非3.x版本,主要考虑毕业设计场景下第三方库的兼容性更成熟,且教学资源更丰富。
2. 系统架构设计与技术选型
2.1 分层架构实现
系统采用经典的三层架构,但针对快餐业务特点做了特殊设计:
表现层:SpringMVC + Thymeleaf/Vue 业务层:SpringBoot + 自定义推荐引擎 数据层:MyBatis-Plus + MySQL + Redis缓存特别在DAO层使用MyBatis-Plus 3.5.3,其Lambda表达式查询构建器能大幅简化菜品条件查询的代码量。例如获取辣度适中的推荐菜品:
List<Dish> recommendList = dishMapper.selectList( Wrappers.<Dish>lambdaQuery() .between(Dish::getSpicyLevel, 2, 4) .orderByDesc(Dish::getSalesVolume) );2.2 推荐算法实现方案
针对快餐场景优化了传统的协同过滤算法:
- 用户特征提取:基于订单历史分析辣度偏好、菜品类别偏好等
- 菜品相似度矩阵:使用改进的余弦相似度计算(加入时间衰减因子)
- 实时推荐:通过Redis缓存用户最近浏览记录,实现毫秒级响应
算法核心参数配置示例:
# 推荐系统参数 recommend.topN=5 recommend.similarity.threshold=0.6 recommend.time.decay.factor=0.83. 关键业务模块实现细节
3.1 智能点餐流程设计
点餐状态机设计是系统的核心难点,采用Spring StateMachine实现:
stateDiagram [*] --> 待点餐 待点餐 --> 已选菜品: 添加菜品 已选菜品 --> 待支付: 提交订单 待支付 --> 已完成: 支付成功 待支付 --> 已取消: 超时未支付实际开发中需要处理并发的座位占用问题,我们采用Redis分布式锁保证原子性:
public boolean occupySeat(String seatId) { String lockKey = "seat_lock:" + seatId; try { Boolean result = redisTemplate.opsForValue() .setIfAbsent(lockKey, "1", 30, TimeUnit.SECONDS); return Boolean.TRUE.equals(result); } finally { // 锁释放逻辑 } }3.2 数据库表结构设计
核心的菜品表设计考虑了推荐系统的需求:
CREATE TABLE `dish` ( `id` bigint NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL COMMENT '菜品名称', `category` enum('主食','小吃','饮料') NOT NULL, `price` decimal(10,2) NOT NULL, `spicy_level` tinyint DEFAULT '0' COMMENT '辣度0-5', `tags` json DEFAULT NULL COMMENT '口味标签数组', `sales_volume` int DEFAULT '0' COMMENT '销量', `recommend_score` float DEFAULT '0' COMMENT '推荐指数', PRIMARY KEY (`id`), FULLTEXT KEY `idx_tags` (`tags`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;注意:使用JSON类型存储标签字段,便于后续的推荐算法处理,但要注意MySQL 8.0以下版本不支持JSON类型的全文索引。
4. 开发环境搭建与避坑指南
4.1 开发工具链配置
推荐使用以下开发环境组合:
- IDEA 2023.1 + Lombok插件(必须)
- MySQL Workbench 8.0 CE
- Redis Desktop Manager
- Postman for API测试
常见问题解决方案:
SpringBoot热部署失效: 检查是否添加了spring-boot-devtools依赖 并开启IDEA的自动编译(Build -> Compile Automatically)
MySQL连接时区错误: 在连接字符串后添加参数:
spring.datasource.url=jdbc:mysql://localhost:3306/fastfood?serverTimezone=Asia/Shanghai
4.2 部署注意事项
生产环境部署建议采用Docker组合:
# SpringBoot应用Dockerfile示例 FROM openjdk:11-jre COPY target/fastfood-0.0.1-SNAPSHOT.jar /app.jar ENTRYPOINT ["java","-jar","/app.jar"]使用docker-compose编排:
version: '3' services: app: build: . ports: - "8080:8080" depends_on: - redis - mysql mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: root redis: image: redis:6-alpine5. 毕业设计扩展建议
5.1 答辩亮点打造
在推荐算法部分可加入对比实验:
- 传统协同过滤 vs 本系统改进算法
- 使用JMeter模拟并发测试推荐响应时间
可视化方面:
- 使用ECharts展示用户口味偏好雷达图
- 制作菜品推荐路径桑基图
5.2 代码质量提升技巧
使用Git规范提交信息:
feat: 新增口味偏好分析接口 fix: 修复订单并发问题 docs: 更新API文档添加Swagger接口文档:
@Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.basePackage("com.shilixiang.controller")) .build(); } }性能优化点:
- 使用Spring Cache注解缓存热门菜品
- 对推荐结果进行二级缓存(Redis + Caffeine)
- 采用连接池控制数据库连接(建议HikariCP)