温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片!
摘要
本系统基于 SpringBoot 框架开发,以 MySQL 作为数据库,面向在校学生、食堂窗口商户、食堂管理员三类用户,围绕校园食堂菜品点评与餐饮服务改进业务进行设计。系统包含食堂与窗口信息维护、菜品图文展示、价格与口味标签、菜品点评与评分、晒图分享、点赞与收藏、菜品排行、差评反馈与商家回复、投诉建议、卫生与用餐环境评价、评论审核、窗口满意度统计等功能模块。学生可以按食堂、窗口、菜品分类浏览,查看评分与真实点评,为吃过的菜品打分、写评价、上传实拍图,反馈分量、价格、口味与卫生情况,收藏常吃的菜品;窗口商户上传菜品与价格、更新供应时段、查看本窗口评分与差评并及时回复;食堂管理员维护食堂窗口信息、审核评论内容、汇总各窗口满意度与整改情况、导出餐饮服务评价报表。本系统把原本散落在群聊、口口相传中的食堂口味反馈集中沉淀,替代手写意见簿与零散问卷,使学生选餐有真实参考、点评有渠道,帮助食堂与窗口依据真实评价优化菜品结构与服务水平,为学校后勤餐饮管理提供量化依据,推动校园餐饮服务持续改进。
技术栈
后端采用 SpringBoot 作为核心框架,结合 MyBatis-Plus 简化数据库操作,快速实现食堂、菜品、点评、回复等业务数据持久化。MySQL 存储用户、食堂窗口、菜品、点评、回复、投诉等业务数据,Redis 缓存菜品评分排行、热评内容、登录 token,提升浏览页面响应速度。前端使用 Vue3 搭配 Element Plus 组件库搭建点评页面与商户回复后台,支持图文点评、星级评分、标签选择,ECharts 实现窗口满意度、菜品评分分布、差评关键词等数据可视化。项目通过 Maven 管理依赖,JWT 实现多角色身份认证,区分学生、商户、管理员权限。集成 OSS 上传菜品与用餐实拍图,敏感词过滤与评论先审后发展示,重复点评同一菜品的当天去重,站内消息推送商户回复与差评提醒,EasyExcel 导出满意度与点评明细报表,全局异常处理器统一处理接口异常。整套技术方案成熟稳定,点评与评分机制完整,便于后续拓展食堂预订、营养分析等功能。
系统设计
系统采用表现层、业务逻辑层、数据访问层三层架构,按业务划分为六大模块。用户模块实现登录认证、在校身份绑定、我的点评与收藏;食堂窗口模块维护食堂楼栋、窗口名称、营业时段、窗口简介与卫生评级;菜品模块维护菜品名称、图片、价格、口味标签、供应时段、上下架状态;点评模块支持星级评分、文字与图片点评、点赞收藏、菜品与窗口排行;反馈模块实现差评回复、投诉建议提交、处理进度查询;后台管理模块实现评论审核、窗口与菜品维护、满意度统计、餐饮评价报表导出。三类角色权限相互隔离,学生侧重浏览、点评、收藏与反馈;商户侧重维护菜品、查看评价、回复差评;管理员拥有全部内容审核与统计权限。各模块低耦合,通过接口交互,便于后续拓展食堂预订、营养分析等功能。
具体实现截图













核心代码
@RestController
@RequestMapping("/canteenReview")
public class CanteenReviewController {
@Autowired
private IReviewService reviewService;
@Autowired
private IDishService dishService;
// 分页查询菜品点评
@GetMapping("/reviewList")
public Result reviewList(@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize,
@RequestParam Long dishId) {
Page<DishReview> page = new Page<>(pageNum, pageSize);
LambdaQueryWrapper<DishReview> wrapper = Wrappers.lambdaQuery();
wrapper.eq(DishReview::getDishId, dishId)
.eq(DishReview::getAuditStatus, 1)
.orderByDesc(DishReview::getCreateTime);
return Result.success(reviewService.page(page, wrapper));
}
// 学生提交菜品点评
@PostMapping("/submitReview")
public Result submitReview(@RequestBody DishReview review) {
if (review.getScore() == null || review.getScore() < 1 || review.getScore() > 5) {
return Result.error("评分需在1至5星之间");
}
boolean flag = reviewService.submitReview(review);
return flag ? Result.success("点评提交成功,审核通过后展示") : Result.error("您今天已点评过该菜品");
}
// 商户回复差评
@PostMapping("/replyReview")
public Result replyReview(@RequestParam Long reviewId, @RequestParam String content) {
boolean flag = reviewService.merchantReply(reviewId, content);
return flag ? Result.success("回复提交成功") : Result.error("该点评不属于本窗口或已回复");
}
}
数据库设计
数据库基于 MySQL 设计,根据食堂餐饮点评业务实体建立数据表,设置关联关系保证数据完整性。核心数据表包括用户表 user,存储账号、密码、昵称、学号、角色、创建时间;食堂表 canteen,记录食堂名称、位置、开放时段;窗口表 canteen_window,关联食堂 id 与商户 id,保存窗口名称、营业时段、卫生评级、状态;菜品表 dish,关联窗口 id,记录菜品名称、图片、价格、口味标签、供应时段、上架状态;点评表 dish_review,关联菜品 id 与用户 id,保存星级评分、文字内容、图片、点赞数、审核状态、点评日期;回复表 review_reply,关联点评 id,记录回复人、回复内容、回复时间;投诉表 complaint,关联窗口 id 与用户 id,保存投诉类型、内容、处理状态、处理结果。所有数据表统一设置自增主键,添加创建时间、更新时间字段,针对菜品 id、窗口 id、审核状态、点评日期查询建立索引,优化查询性能,减少数据冗余,满足餐饮点评与评价管理业务的数据存储需求。
系统测试
系统采用单元测试结合黑盒功能测试开展测试工作。单元测试重点对评分区间校验、同菜品当日重复点评拦截、评论审核状态控制、商户回复权限校验等核心逻辑编写测试用例,验证未审核点评不可对外展示、非本窗口商户无法回复他人点评。黑盒测试模拟学生、窗口商户、食堂管理员三类角色,依次测试登录、浏览食堂窗口与菜品、提交图文点评、点赞收藏、查看菜品排行、商户维护菜品与回复差评、提交投诉建议、管理员审核评论与汇总满意度报表等完整业务流程。同时覆盖异常场景,评分超出范围提交、重复点评同一菜品、含敏感词点评提交、越权修改他人点评、已下架菜品继续点评、非法参数等,记录接口返回、页面展示与数据变化,及时修复发现的缺陷。经过多轮测试,系统运行稳定,点评流程顺畅,评分与排行统计准确,审核与回复机制有效,权限控制可靠,数据读写无误,页面交互流畅,满足校园食堂餐饮点评系统的业务需求。
转载自 CSDN-专业IT技术社区
原文链接:https://blog.csdn.net/2602_96754328/article/details/170356075




