当前位置: 首页 > news >正文

基于Spring Boot+Vue3的烹饪交流学习系统 设计与实现

基于 Spring Boot + Vue3 的烹饪交流学习系统 设计与实现

一、项目概述

随着人们对烹饪学习与交流需求的增加,传统线下学习模式在菜谱管理、内容发现、交流共享与个性化推荐等方面存在明显不足。为此,本项目基于 Spring Boot + Vue3 技术栈,构建一套烹饪交流学习平台(前后端分离),旨在为普通用户与管理员提供一个包含菜谱发布、智能推荐、学习交流、视频教学与排行榜等功能的数字化平台,提升菜谱内容质量与用户学习体验。

二、系统架构与技术栈

  • 前端:Vue3 + Element Plus(管理端:cookie-web-admin,用户端:cookie-web-user
  • 后端:Java + Spring Boot + MyBatis(cookie-boot
  • 数据库:MySQL 8.x
  • 其它:Node.js、npm/yarn、Maven、IntelliJ IDEA、Navicat

系统采用前后端分离架构,后端暴露 RESTful API,前端通过统一接口调用并按角色(管理员 / 普通用户)展示不同页面与权限。

三、主要功能

3.1管理员功能需求

(1)登录

管理员通过个人账号,登录后台管理系统。

(2)个人信息管理

管理员可以查看和修改个人基本信息(姓名、联系方式、邮箱等),保证账号信息的准确性。

(3)密码修改

管理员可以修改登录密码,增强账号安全性。

(4)用户管理

对用户基本信息进行查看操作,可以为用户重置密码,删除用户以及停用违规用户账号。

(5)菜谱管理

管理员可以管理用户发布的菜谱内容,主要包括审核、编辑、删除、查看详情等操作。对于菜谱质量管理,管理员可以根据菜谱内容质量进行标记分类,包括美图菜谱、精品菜谱、新手友好等标签,同时标记菜谱难度等级为初级、中级或高级。此外,在评论管理模块中,管理员可以查看用户对菜谱的评论信息,并对不合规的评论内容进行删除处理。

(6)菜谱视频管理

管理员在这里可以统一管理用户上传的做菜视频,对于不合规的视频,可以进行下架处理。

(7)厨艺大比拼审核

审核用户发布的厨艺大比拼信息,并可删除不合规的信息。

(9)统计分析

分析点击数、收藏数、点赞数、评论数等维度信息,比如Top收藏菜谱、Top10点赞菜谱,好评最多的几个菜谱,好评率等。

(10)字典管理

维护菜谱分类、口味、烹调方法等字典数据,为前端选择控件提供统一数据来源。

(11)公告管理

发布、编辑、启用/停用公告,向用户推送重要通知。

3.2用户功能需求

(1)注册与登录

用户通过账号密码注册、登录用户端系统,完善基础信息。

(2)菜谱智能推荐

用户选择食材、厨具后,系统为用户按照菜谱难度推荐菜谱,并推荐两道搭配菜,点击菜谱进入菜谱详情页面,里面介绍食材和制作步骤等信息,在详情页展示制作视频。

(3)菜谱学习与交流

查看已发布的所有菜谱列表,点击菜谱名称,可以查看菜谱详情。可以点赞、收藏。做菜交流:用户在这里上传用这个菜谱做的菜的图片、辅助文字进行描述,也可以在这里上传自己的做菜视频,供其他用户学习交流。

(4)菜谱排行榜

根据点赞数、收藏数、评价数,展示Top10菜谱。

(5)今天吃什么

点击按钮,随机抽取一道菜供用户参考。

(6)厨艺大比拼

用户可在此发布比赛,包括比赛标题、时间、地点和要求等信息,发布后待管理员审核通过后,其他用户可以报名比赛。报名比赛后,用户线下参与比赛。

(7)公告

用户在这里查看管理员发布的公告信息。

(8)个人中心

  1. 我的菜谱

用户可以点击添加按钮来发布自己的菜谱,包含菜谱分类、食材配方、制作步骤、制作视频等详细信息。发布后,可通过编辑按钮修改菜谱内容,同时可以查看管理员的审核信息,或选择删除已发布的菜谱。

  1. 历史记录

查看之前点击过的菜谱列表,按照点击时间倒序排序。

  1. 我的比赛

用户可以查看自己发布的比赛,支持编辑比赛内容、查看管理员审核信息或删除比赛。点击发布按钮可创建新的比赛活动。此外,用户还可以查看已报名的比赛,并对不需要参加的比赛进行退赛操作。

  1. 个人信息

修改个人信息。

  1. 修改密码

用户在这里修改账号密码。

四、菜谱推荐算法

1、 算法类型:多维度加权评分算法

这个推荐算法采用了多维度加权评分的方法,类似于协同过滤和内容推荐的结合体。

2、 主要流程

1)数据预处理阶段*// 获取候选菜谱(只推荐审核通过的菜谱)
// 获取候选菜谱(只推荐审核通过的菜谱)List<TRecipe>candidateRecipes=getCandidateRecipes(request);
2) 多维度评分计算

对每个候选菜谱计算5个维度的得分:

食材匹配度 (35%权重)
privateBigDecimalcalculateIngredientMatchScore(List<String>recipeIngredients,List<String>selectedIngredients){intmatchedCount=0;for(Stringselected:selectedIngredients){for(Stringrecipe:recipeIngredients){if(recipe.contains(selected)||selected.contains(recipe)){matchedCount++;break;}}}BigDecimalmatchRate=newBigDecimal(matchedCount).divide(newBigDecimal(selectedIngredients.size()),2,RoundingMode.HALF_UP);returnmatchRate.compareTo(BigDecimal.valueOf(0.1))>0?matchRate:BigDecimal.valueOf(0.1);}

计算逻辑:

  • 遍历用户选择的每种食材

  • 检查菜谱是否包含该食材(模糊匹配)

  • 计算匹配率:匹配食材数 ÷ 用户选择食材总数

  • 最低保证0.1分(避免完全不匹配)

器具匹配度 (25%权重)
privateBigDecimalcalculateToolMatchScore(StringrecipeTools,List<String>selectedTools){intmatchedCount=0;for(Stringselected:selectedTools){if(recipeTools.contains(selected)){matchedCount++;}}returnmatchedCount==0?BigDecimal.valueOf(0.3):newBigDecimal(matchedCount).divide(newBigDecimal(selectedTools.size()),2,RoundingMode.HALF_UP);}

计算逻辑:

  • 检查菜谱需要的器具是否在用户选择中

  • 如果完全不匹配,给0.3的基础分(容错性)

  • 否则按匹配比例打分

饮食平衡度 (20%权重)
privateBigDecimalcalculateDietBalanceScore(List<String>recipeIngredients){// 统计荤素比例intmeatCount=0,vegetableCount=0,stapleCount=0;// 计算各类型食材得分BigDecimalmeatScore=calculateCategoryScore(meatCount,1,2);// 荤菜:1-2份BigDecimalvegetableScore=calculateCategoryScore(vegetableCount,2,3);// 素菜:2-3份BigDecimalstapleScore=calculateCategoryScore(stapleCount,1,2);// 主食:1-2份returnmeatScore.add(vegetableScore).add(stapleScore).divide(BigDecimal.valueOf(3),2,RoundingMode.HALF_UP);}

荤素分类映射:

  • 荤菜:猪肉、牛肉、鸡肉、鱼虾、鸡蛋等

  • 素菜:各类蔬菜、豆腐等

  • 主食:面食、米饭、面包等

难度适配度 (10%权重)
  • 无偏好时:初级菜谱+0.9分,中级+0.7分

  • 有偏好时:完全匹配+1分,不匹配+0.6分

时间适配度 (10%权重)
  • 根据用户设置的最大烹饪时间进行匹配

  • 在时间范围内:+1分,超出:+0.5分

3)综合评分计算
BigDecimaltotalScore=ingredientScore.multiply(INGREDIENT_WEIGHT).add(toolScore.multiply(TOOL_WEIGHT)).add(dietBalanceScore.multiply(DIET_BALANCE_WEIGHT)).add(difficultyScore.multiply(DIFFICULTY_WEIGHT)).add(timeScore.multiply(TIME_WEIGHT));

4) 排序与推荐

// 按得分降序排序 recipeScores.sort((a,b)->b.getTotalScore().compareTo(a.getTotalScore()));// 返回结果 RecipeRecommendationResponseDto response=new RecipeRecommendationResponseDto();response.setMainRecipe(recipeScores.get(0).getRecipe());// 得分最高的作为主菜 response.setSideRecipes(recipeScores.subList(1,3));// 接下来2个作为搭配菜

3、 算法优势

  1. 精确匹配:食材和器具的精准匹配度计算

  2. 营养均衡:自动分析荤素搭配比例

  3. 个性化:根据用户偏好进行难度和时间适配

  4. 容错性强:即使某些维度匹配度低也能给出合理推荐

  5. 可扩展性:权重可以根据需求动态调整

4、 评分区间

  • 总得分范围:0.0 - 1.0

  • 各维度得分:0.0 - 1.0

  • 最低得分保证:确保每个菜谱都有展示机会

5、 实际效果

用户选择"土豆、猪肉、炒锅"时:

  • 土豆炖肉得分高(食材+器具完美匹配)

  • 清炒土豆丝得分中等(食材匹配但缺少肉类)

  • 红烧排骨得分低(缺少主要食材)

这个算法既保证了推荐的准确性,又考虑了用户体验和营养均衡,是一个实用性很强的智能推荐系统!

http://www.jsqmd.com/news/595666/

相关文章:

  • 2026广告机厂家推荐榜TOP5
  • Face3D.ai Pro零基础入门:5分钟从照片到3D人脸,小白也能玩转
  • Z-Image-GGUF文生图模型问题解决:常见报错处理,让AI绘画更顺畅
  • SDMatte模型推理性能优化:从算法到GPU算力的全方位调优
  • 科研写作利器:ChatGPT高效Prompt全攻略
  • 通义千问1.5-1.8B-Chat-GPTQ-Int4在复杂网络问题诊断中的辅助应用
  • Qwen3-14B私有部署镜像Node.js环境配置与API服务搭建
  • 烟台GEO搜索优化服务商链接烟台GEO搜索优化服务商
  • 如何快速突破百度网盘限速:baidu-wangpan-parse直链解析完全指南
  • Scarab:开源模组管理工具的智能解决方案
  • Nanbeige 4.1-3B应用:打造个人专属二次元风格AI助手
  • Pixel Language Portal效果展示:技术文档→多语种Markdown的结构化翻译与格式保持案例
  • seo综合查询工具和网站分析工具有什么区别_seo综合查询工具如何分析网站关键词排名
  • Qwen3.5-2B生成Typora风格技术文档:Markdown与图表自动编排
  • 005、Git远程协作:连接GitHub/Gitee,掌握Push、Pull与团队协作规范
  • Guohua Diffusion 辅助教育教学:快速生成历史场景与科学图解
  • BUG列表:QQ 发送邮件发生异常
  • K8s集群认证文件丢失的5个常见原因及预防措施(含etcd数据保护建议)
  • OpenClaw权限管控:安全使用SecGPT-14B的5条黄金法则
  • [嵌入式] 详解 30 脚 OLED 裸屏与 4 脚 I2C 模块的区别:从硬件配置到代码驱动
  • FLUX.2-klein-base-9b-nvfp4快速入门:小白也能玩转AI图片编辑
  • 华硕笔记本智能Lid控制解决方案:3步终结外接显示器合盖休眠难题
  • Linux 软件安装没你想的那么简单:为什么有的软件能直接跑,有的非装不可?
  • 百川2-13B模型助力网络安全:威胁情报分析与报告自动生成
  • 颠覆传统:5大鲜为人知的显卡性能解锁技巧
  • [GROMACS]模拟数据分析前轨迹文件生成-轨迹预处理
  • 别再只盯着Finalshell和Xshell了!这5款免费/开源的SSH客户端同样能打(含Mac/Linux选项)
  • Windows平台OpenClaw部署教程:Qwen3-14b_int4_awq模型接入
  • Downkyi完全指南:高效管理B站视频资源的4个关键步骤
  • 办公神器PasteMD:粘贴即美化,技术日志、网页内容一键整理