1. 项目背景与需求分析
高校食堂作为学生日常饮食的主要场所,长期以来面临着供需匹配度低、营养搭配不合理等痛点问题。我在参与某高校信息化建设项目时发现,超过60%的学生对食堂菜品满意度不高,主要反映在"菜品重复率高"、"不符合个人口味"和"营养搭配不科学"三个方面。传统的人工管理模式难以应对数千名学生的个性化需求,这正是我们开发这套饮食推荐系统的初衷。
系统需要解决三个核心问题:
- 学生端:基于个人健康数据(如过敏原、体质指数)和饮食偏好(口味、忌口),提供每日个性化推荐
- 食堂端:动态调整菜品供应策略,通过数据分析预测热门菜品
- 管理端:监控营养摄入分布,生成群体健康报告
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计
2.1 整体架构方案
采用前后端分离架构,这是经过多个校园项目验证的稳定方案。后端选择SpringBoot 2.7 + MyBatis-Plus组合,前端采用Vue3 + Element Plus。特别说明几个关键技术选型原因:
- 放弃JPA选择MyBatis-Plus:食堂菜品数据存在大量复杂查询场景(如多条件筛选、联表统计),MyBatis的手写SQL更灵活
- 使用Redis缓存:学生就餐高峰时段(11:30-12:30)的并发请求量可达500+/秒,采用Redis缓存热门菜品数据
- 消息队列RabbitMQ:用于异步处理推荐结果生成和反馈分析,避免阻塞主业务流程
2.2 数据库设计优化
原始文档中给出了基础表结构,这里补充几个关键设计点:
- 学生偏好表增加索引:
sql复制ALTER TABLE `stu_preference`
ADD INDEX `idx_gender_age` (`gender`, `age`),
ADD FULLTEXT `ft_preference` (`taste_preference`);
- 菜品表采用分库分表:按菜品类别(主食/荤菜/素菜)水平分表,解决单表数据量过大问题
- 推荐记录表添加分区:按recommend_date做RANGE分区,便于历史数据归档
3. 核心功能实现
3.1 个性化推荐算法
采用混合推荐策略,具体实现流程:
- 冷启动阶段(新用户):
java复制// 基于人口统计学的推荐
public Lis
