摘 要
本系统基于SpringBoot框架和微信小程序开发,旨在实现一个智能菜谱推荐平台,通过结合用户偏好和冰箱食材管理,帮助用户更好地管理饮食习惯。用户可以在平台上进行食材选择、查看推荐菜谱、管理食物热量、记录每日打卡等操作。系统不仅提供个性化的菜谱推荐,还通过实时提醒帮助用户避免食材浪费。此外,管理员可以通过后台管理用户信息、食谱、食材等内容,确保平台的正常运行和数据准确性。系统在开发过程中结合了前沿技术,如SpringBoot框架和微信小程序开发,确保平台高效、稳定并具有良好的扩展性。
该平台的设计目标是提升用户的饮食体验和健康管理水平,同时通过智能化手段优化食材使用。通过对用户个人信息、食材存储、热量控制等方面的综合管理,本系统能够精准匹配用户需求,提供个性化服务。管理员通过后台管理功能,实现对系统内容的全面掌控,包括用户数据、食谱内容、食材信息等,从而确保系统运行的高效性和稳定性。平台的技术架构与业务功能相结合,为用户提供了一个便捷、安全且富有互动性的菜谱管理和饮食记录工具。
关键词:SpringBoot,微信小程序,智能菜谱。
Abstract
This system is developed based on the SpringBoot framework and WeChat mini program, aiming to realize an intelligent recipe recommendation platform. By combining user preferences and refrigerator ingredient management, it helps users better manage their eating habits. Users can select ingredients, view recommended recipes, manage food calories, and record daily check ins on the platform. The system not only provides personalized recipe recommendations, but also helps users avoid food waste through real-time reminders. In addition, administrators can manage user information, recipes, ingredients, and other content through the backend to ensure the normal operation and data accuracy of the platform. The system combines cutting-edge technologies such as SpringBoot framework and WeChat mini program development during the development process, ensuring that the platform is efficient, stable, and has good scalability.
The design goal of this platform is to enhance users' dietary experience and health management level, while optimizing the use of ingredients through intelligent means. Through comprehensive management of user personal information, food storage, calorie control, and other aspects, this system can accurately match user needs and provide personalized services. Administrators can achieve comprehensive control over system content through backend management functions, including user data, recipe content, ingredient information, etc., to ensure the efficiency and stability of system operation. The combination of the platform's technical architecture and business functions provides users with a convenient, secure, and interactive recipe management and food recording tool.
Keywords:SpringBoot, WeChat mini program, intelligent recipe.
目 录
第1章绪论
1.1研究目的
智能菜谱系统的设计与实现,旨在为用户提供更加便捷、智能的饮食管理方案。在系统开发中,文件上传功能的实现是一个关键环节,通过研究和优化Java Web中文件上传方法,能够有效提升系统的文件处理效率和稳定性[1]。系统不仅需要处理多样化的菜谱数据,还要确保菜品的功效一致性,以便满足用户不同的健康需求和口味偏好[2]。在实现菜谱推荐时,系统还需要处理大量的数据,如何高效管理和存储这些数据是系统设计中的另一个挑战。此外,智能菜谱系统的设计和实现也推动了健康饮食理念的普及,尤其是在对用户个性化饮食需求的满足方面,能够有效改善用户的饮食结构和生活质量[3]。基于MySQL数据库的数据录入系统设计,提供了一个高效且稳定的数据存储方案,为系统的顺利运行提供了保障[4]。通过这些技术和方法的应用,智能菜谱系统的开发不仅提升了饮食管理的智能化水平,也为健康饮食提供了有力支持。
1.2研究意义
智能菜谱系统的研究具有重要的现实意义,尤其是在推动健康饮食和提升人们生活质量方面。随着人们对健康饮食需求的增加,养生菜谱的研究和设计成为了一个重要的方向[5]。通过智能菜谱系统,可以为用户提供个性化的饮食推荐,帮助他们根据个人健康状况、口味偏好等因素选择合适的菜谱,进一步促进健康管理。与此同时,菜谱生成技术的创新也为智能推荐系统提供了理论基础,基于规则约束的菜谱生成技术能够精确匹配用户需求,确保菜谱的合理性和科学性[6]。在此过程中,菜谱中的调味品使用同样受到了关注,尤其是在“三减政策”背景下,合理设计调味料的使用对保证菜肴的健康性起到了关键作用[7]。此外,智能菜谱系统的应用不仅限于家庭厨房,在集体用餐场所如高校食堂中也得到了广泛应用。通过优化数据建模和推荐算法,系统能够有效提升菜品的质量和营养价值,为更广泛的用户群体提供健康的饮食方案[8]。这些研究为智能菜谱系统的发展提供了宝贵的参考,推动了其在健康饮食管理中的应用和发展。
1.2.1国内外研究现状
在国内外,随着智能化技术的不断发展,智能菜谱系统逐渐成为饮食健康管理的重要工具。尤其是在近年来,随着人们生活水平的提升以及对健康饮食的关注,智能菜谱系统的研究和应用得到了广泛关注。国内外的相关研究多集中在食谱推荐系统、食材管理、用户个性化需求分析等方面。传统的菜谱系统主要依赖人工经验和简单的推荐算法,用户只能根据固定的菜谱进行选择,缺乏个性化和灵活性。然而,随着技术的发展,新的系统设计逐渐实现了根据用户口味、健康需求以及可用食材的智能推荐,显著提高了用户体验。
国内的研究多集中于基于数据库的菜谱推荐系统,这类系统往往结合用户反馈和菜谱数据进行优化。例如,通过分析用户的饮食偏好,推荐系统能够根据用户历史记录、食材库存等因素,智能化地推送符合用户需求的菜谱。此外,国内一些研究还注重食材管理与菜谱的结合,帮助用户根据家中存货来安排每日餐食,避免食材浪费。例如,部分系统已经能够支持通过输入食材名称进行菜谱查询,或根据剩余食材生成合理的菜谱建议。这种结合了食材管理和菜谱推荐的系统设计在国内逐渐成熟。
国外的研究则相对更注重跨平台应用与大数据分析的结合。许多系统利用大数据对用户行为进行分析,形成更加精准的个性化推荐。国外的智能菜谱系统不仅注重菜谱的多样性,还加强了对食材来源、营养成分的详细描述。部分系统甚至通过与健康管理平台的连接,提供更加科学和定制化的饮食建议,以帮助用户达到健康目标。国外一些研究还开始探索菜谱与餐饮供应链的联动,借助更高效的库存管理和供应链信息流通,提高食材的使用效率,进一步减少浪费。
总体来看,国内外的智能菜谱系统的研究与应用逐步向个性化、精准化发展,逐渐从单纯的菜谱推荐走向全面的饮食健康管理,未来随着技术的进一步进步,智能菜谱系统将成为人们日常饮食的重要助手。
1.3开发工具的选用及语言介绍
1.3.1微信开发者工具
微信开发者工具是一款专为小程序开发而设计的应用,它不断改进,提供了便捷的操作方式,并且在开发过程中可以通过微信扫描二维码来访问,从而实现快速、准确的小程序开发和调试。
根据用户的需求,我们将采用不同的屏幕大小来制作小程序。
在完成了视图布置之后,可以通过执行编辑功能,快速更改当前的视图界面。
控制台:方便调试打印输出信息。
将代码上传至腾讯服务器,并在审核过程中填写版本号和备注信息,以确保代码的安全性和准确性。
通过查看资源文件,我们可以快速地调整相关项目的文件目录,从而实现断点调试。
使用远程调试技术,无论是在手机端还是PC端,都能够轻松地进行开发工作。
本地数据存储:显示的是本地存储的数据。
通过使用子父层级结构,我们可以更容易地进行视图调试。
微信的代码体积应该保持在2M 以内,而且在开发过程中,应该严格检查合法域名信息,并且为小程序的后台配置服务器域名。
微信开发者工具已经成为了开发过程中不可或缺的一部分,并且正在不断地改进和完善。
1.3.2小程序框架以及目录结构介绍
这款微信小程序的设计旨在帮助用户快速、便捷地创建出一款拥有完全独特的应用。它由一套完善的框架结构,将用户界面、操作界面、功能界面等多种功能完美结合,使用户只需要一点点的操作,就能轻松实现微信小程序的创建。框架的核心功能是一个快速的数据绑定机制,它能够轻松地将用户的信息和界面进行一致性的管理。它不仅支持对用户信息的实时监控,还能够根据用户的需求,实现对界面的快速调整和优化,从而使用户能够轻松地构建强大的微信小程序。
1.3.3B/S结构
B/S(Browser/Server)结构是一种用于WEB应用程序的架构模式,用户通过浏览器与服务器进行交互。与传统的C/S(Client/Server)架构相比,B/S结构具有更好的普适性和简便性,用户无需安装客户端软件,只需通过浏览器即可访问应用,降低了维护和升级的成本。
1.3.4 SpringBoot 框架
SpringBoot,作为Spring生态系统中一颗璀璨的明星,以其“约定优于配置”的核心理念,极大地简化了Java应用的开发、部署与管理流程。它并非是对Spring框架的颠覆,而是在其基础上进行了深度封装与优化,旨在快速搭建独立的、生产级别的Spring应用。SpringBoot通过自动配置功能,减少了大量繁琐的配置工作,让开发者能够更加专注于业务逻辑的实现。同时,它集成了众多常用库,如数据库连接池、缓存、消息队列等,为系统开发提供了一站式的解决方案。此外,SpringBoot还支持多种部署方式,无论是传统的WAR包部署,还是现代的容器化部署,都能轻松应对。因此,选择SpringBoot作为智能菜谱系统的开发框架,不仅能够提升开发效率,还能确保系统的稳定性和可维护性。
1.3.5MySQL描述
MySQL数据库已经成为网络上的一种强大的工具,它能够支持多个用户,并且能够根据客户端和服务端的需求进行调整,从而满足不同的需求。在这里,服务端和客户端只是一种软件上的概念,而我们所使用的计算机硬件则没有必要完全相互匹配。
MySQL作为一种备受推崇的关联性DBMS,其卓越的性能和易于操作的特性,以及其在多种操作环境中的灵活性,让其成为了最受青睐的应用之选。此外,MySQL还具有良好的跨平台性,让软件开发人员更加满意。与传统的关联式数据库系统形式大相径庭,MySQL拥有一套完善的数据库管理策略,以确保用户的安全、稳健、安全。MySQL具备良好的容错、安全、快速、稳健的特点,使得mysql成为一款相当流行的数据库管理工具。
1.3本文主要研究结构安排
本文共分为七章,章节内容安排如下:
第一章为绪论,主要介绍系统的研究背景和意义,同时进行了论文整体框架的结构的简要介绍。
第二章相关技术介绍,主要介绍本系统研究所涉及用到的技术分析。
第三章为系统需求分析,章节所做的主要的工作是对系统进行了技术、经济和法律方面可行性的分析;对系统实行了总体功能的需求、用例分析。
第四章为系统的设计,主要是对系统的功能结构进行设计,并对系统数据库的概念结构以及物理结构的设计进行了分析。
第五章就是对系统的实现,根据系统功能的划分,分别的对系统所需要实现的用户功能和管理员功能进行了分析和说明。
第六章:系统测试。主要对系统的部分界面进行展示并对主要功能进行测试。
第七章:总结。
第2章系统分析
2.1可行性分析
在软件开发的过程中,可行性分析是至关重要的,它旨在评估问题的可行性,以便尽可能快地解决,同时也要考虑到不同的解决方案的优势和劣势,以及实施这些方案所带来的经济效益。通过对技术、操作和经济因素的综合考量,我们可以更好地评估智能菜谱系统的可行性,具体表现在:
2.1.1技术可行性
智能菜谱系统在数据的存储上使用的MYSQL数据库,在智能菜谱系统开发中使用了JAVA、HTML、TOMCAT、SpringBoot这些开发工具的使用,能够给我们的编写工作带来许多的便利。系统使用B/S模式进行开发,使系统的可扩展性和维护性更佳,减少系统配置代码,简化编程代码,目前B/S模式是目前最受欢迎的一种模式。
2.1.2经济可行性
通过采用Java和MySQL的架构,智能菜谱系统的开发与维护费用虽然较低,但一旦正式推出,将会带来巨大的收益:既能够让用户更加轻松地获取信息,同时降低运营者的负担。设计基于微信小程序并非特别复杂,但它的制作费用相比较低,而且耗费的时间更少,因为它能够带来更高的效率,而且比起日常的维护与管理,它的收入要更高,因此,它的制作完全符合市场的需求。
2.1.3操作可行性
这款智能菜谱系统是一款基于浏览器和服务器的软件,它的前台页面简洁易懂,无论是系统管理员还是注册用户,只要有网络,只要打开浏览器,就可以轻松访问,而且不需要任何操作指导。由于无需任何复杂的环境配置,这个系统既简单又易于操作,因此它具有极高的实用性和可靠性。
2.2功能需求分析
当前,B/S架构的系统提供了一种便捷的数据访问模式:只需点击一下网站,即可获取系统的信息,而且,该信息会被存储,并且会被及时地转交给服务器,从而实现快速、准确的信息交换。注册用户用例图如图3-1所示。

图3-1 注册用户用例图
管理员用例图如图3-2所示。

图3-2 管理员用例图
本节对整个系统的功能进行描述:
- 注册用户主要功能描述
注册登录:用户可以通过注册和登录系统,根据个人偏好选择食材类别。系统将根据用户选择的食材,推荐相应的菜谱信息到首页,便于用户快速获取符合自己饮食习惯和需求的菜谱推荐。
首页:首页展示用户偏好食材的推荐菜谱,用户可以方便地通过首页的导航栏操作,浏览轮播图、查看网站公告、饮食资讯以及食谱信息推荐等。通过输入关键词,用户能够进行全网搜索,快速查找到感兴趣的菜谱或食材相关信息。
食谱信息:用户可以查看推荐的各类食谱信息,了解每道菜的详细资料,如食谱名称、主要食材、菜谱口味及点赞数等。系统还支持通过输入食谱名称、主要食材、选择点赞数、点击数、收藏数和发布时间等多维度进行搜索。用户对喜欢的食谱可以进行点赞、收藏,或发表评论。评论后,用户还可对其评论进行回复、删除。
冰箱食材:用户可以录入自己冰箱中的食材,记录食材的名称、购买日期、保质期限、食材图片以及存放备注等信息,帮助用户更好地管理家中的食材,避免浪费。系统将提供相关提醒,确保用户及时使用即将过期的食材。
食物热量:用户可以查看各类食物的热量信息,包括食物名称、热量总值、营养成分等详细数据。系统支持通过输入食物名称、选择点赞数、点击数、收藏数等进行搜索,帮助用户选择适合自己饮食需求的食物。用户还可对食物热量信息进行点赞、收藏,或发表评论,回复和删除评论。
用户打卡:用户可以在系统中记录每日饮食打卡信息,查看打卡日期,并可输入备注进行提交,帮助用户追踪饮食习惯和健康状况,形成良好的饮食管理习惯。
网站公告:用户可以查看系统发布的各项公告,包括网站公告、关于我们、联系方式、网站介绍等信息,便于用户了解网站的最新动态与发展。
饮食资讯:用户可以查看各类饮食资讯的详细信息,支持根据文章标题进行搜索,或选择最新、热度、点赞最高、收藏最多等方式进行排序和筛选。用户还可对感兴趣的资讯进行点赞、收藏,并进行评论。
我的:用户可以修改个人资料、更新登录信息以及密码等。此外,还可以管理自己的偏好食材,调整个人饮食习惯的设置,以确保系统推荐的信息更符合用户的口味。
日程管理:用户可以查看个人的饮食日程,设置并添加日程项。在食材保质期前一天,系统会提醒用户,帮助用户合理规划食材使用,避免浪费。
收藏:用户可以查看自己收藏的内容,包括饮食资讯、网站公告、食谱信息等。对于不再需要或不喜欢的内容,用户可以删除收藏项,保持收藏列表的清晰和有序
食谱信息:用户可以通过输入食谱名称、主要食材等关键词进行搜索,快速查找感兴趣的食谱信息。系统还支持对食谱进行添加、重置、查询等操作,帮助用户管理和获取想要的菜谱。
冰箱食材:用户可以查看各类冰箱食材的列表信息,系统支持根据食材名称、保质期限等进行搜索,以便用户随时掌握家中食材的存储情况并作出合理安排。
用户打卡:用户打卡的记录也能在系统中查看,通过输入姓名、打卡日期等信息进行搜索,用户可以回顾自己的饮食记录,管理和改进饮食习惯。
二、 管理员角色功能描述
后台首页:管理员可以通过后台首页查看日程管理信息、进行个人资料和登录信息的修改,以及管理密码等功能。通过该功能,管理员可随时跟踪系统的运营状态,确保正常运行。
系统用户:管理员能够管理所有系统用户,包括注册用户和管理用户账号。管理员可以通过昵称搜索用户信息,对用户账号进行增删改查等操作,以确保用户数据的准确性和系统安全。
食材分类管理:管理员可查看食材各分类的详细列表,并支持通过输入食材名称进行搜索。对于不适用的食材分类,管理员可以进行删除。管理员还可以新增食材分类,输入食材名称提交添加。
食谱信息管理:管理员可查看所有食谱信息的详细资料,包括用户对食谱的评论和反馈。管理员通过搜索食谱名称和主要食材等关键词,能够进行精准的查询操作。对不合适的食谱或评论,管理员可进行删除,保持食谱推荐内容的高质量。同时,管理员也可以对食谱进行新增和更新。
冰箱食材管理:管理员可以查看各用户的冰箱食材信息,管理用户的冰箱食材列表,支持按食材名称、保质日期等进行筛选搜索。管理员可以删除过期或不合适的食材记录,以保证用户数据的准确性和及时性。
食物热量管理:管理员可以查看各类食物的热量数据,包括食物名称、热量总值、营养成分等。管理员还可以通过输入食物名称进行搜索,管理食物热量信息的准确性与完整性。在此基础上,管理员也可以新增食物热量记录,完善系统信息库。
用户打卡管理:管理员可查看各用户的打卡记录,并可以根据用户姓名、打卡日期等信息进行筛选查询。管理员可以删除无效或重复的打卡记录,确保打卡数据的规范与准确。
系统管理:管理员可管理轮播图信息,查看各轮播图的详情,并支持通过标题搜索,进行增删改查等操作。确保轮播图内容的实时更新和有效性。
网站公告管理:管理员能够管理系统发布的公告信息,包括网站公告、关于我们、联系方式等,支持通过标题进行搜索,进行增删改查等操作,保持公告内容的及时性和准确性。
资源管理:管理员负责管理饮食资讯,包括查看各类饮食资讯的详情和用户评论。管理员可以通过标题、标签和分类进行搜索,管理资讯内容的准确性。对于不合适的资讯内容,管理员可以删除,保持系统内容的质量。
操作日志:管理员可以查看各用户的操作日志,记录每个操作的角色、操作人、操作模块等信息。通过搜索操作日志,管理员能够及时发现系统中的潜在问题,确保系统的安全运行。
2.3非功能需求分析
2.3.1数据安全性
智能菜谱系统需要确保数据安全,避免信息泄露或损坏。通过使用身份认证、权限控制、加密技术等措施,系统有效保护用户数据和敏感信息。采用HTTPS加密通信和数据库加密存储,确保数据传输和存储的安全性,减少安全隐患。此外,系统还通过备份和恢复机制,确保数据的完整性和可靠性。
2.3.2时间特性
由于本系统具有交流沟通分享性质,涉及发布、留言、回复等及时性较强的功能,所以,为了提高用户体验,需要及时反映操作的准确性以及有效性,预计需要控制系统响应时间在3s内,数据传输在50ms以内。
2.3.3稳定性
智能菜谱系统需要应对高并发和大量数据访问,以确保系统的稳定性。在系统设计中,我们通过优化数据提交、减少不必要的请求和采用高效的缓存机制,提升系统在高负载情况下的响应能力。同时,通过合理的负载均衡和数据库优化,确保系统在突发访问情况下仍能保持稳定,避免服务器崩溃或响应迟缓。
第3章系统设计
3.1系统架构设计
目前B/S体系的系统主要的数据访问方式是:通过浏览器页面用户可以进入系统,系统可以自动对用户向服务器发送的请求进行处理,处理请求是在系统后台中进行的,用户在浏览器页面上进行相应操作,就能够看到服务端传递的处理结果。智能菜谱系统的设计与实现主要分为视图-模型-控制三层架构设计。在视图层中,主要是操作在服务器端向客户端反馈并显示的数据,在模型层中,主要处理相关的业务逻辑、数据整合等,最后的控制层它介于视图和模型之间,主要是调整两层之间的关系,最终落实数据的传递。
系统架构图如图4-1所示。

图4-1系统架构图
3.2系统总体设计
在这个智能菜谱系统网站上,我们将会发现一个由两个部门组成的小程序。
虽然两个模块看起来各自独立,但它们所使用的数据库却是一致的。这些模块的功能都是经过精心设计和分析,并结合了大量的资料和信息,才得以实现的。
综上所述,系统功能结构图如图4-2所示。

图4-2 系统功能结构图
3.3系统功能设计
该小程序包括三个主要模块:浏览、检索和维护。管理员拥有维护这些信息的权限,并能够发布最新的公告信息和更新已有的信息。
管理员可以对食材分类详情添加,查询、重置、删除等,而注册用户则可以根据自身需求,选择合适的食谱进行发布评论。
3.4数据库设计
3.4.1数据库概念设计
数据库概念设计是指对于某个具体应用的数据模型(数据结构),进行抽象和设计,以便在后续的数据库实现阶段中进行数据库逻辑设计和物理结构设计。概念结构本身特性就是其能表现来自用户的各类需求。
系统ER图如图4-3所示。

图4-3 系统ER图
3.4.2数据库表设计
过对数据结构的深入分析,我们可以确定哪些表格和结构之间的关系,并且可以通过验证、调整和完善,来满足用户对数据和功能的需求,从而实现数据库的有效管理。
根据智能菜谱系统的特性,我们重新设计了数据库的概念模型,以满足其功能的需求,并且结构更加清晰明确。
系统数据库表如下表所示。
表access_token (登陆访问时长)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | token_id | int | 10 | 0 | N | Y | 临时访问牌ID | |
| 2 | token | varchar | 64 | 0 | Y | N | 临时访问牌 | |
| 3 | info | text | 65535 | 0 | Y | N | ||
| 4 | maxage | int | 10 | 0 | N | N | 2 | 最大寿命:默认2小时 |
| 5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 7 | user_id | int | 10 | 0 | N | N | 0 | 用户编号: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | article_id | mediumint | 8 | 0 | N | Y | 文章id:[0,8388607] | |
| 2 | title | varchar | 125 | 0 | N | Y | 标题:[0,125]用于文章和html的title标签中 | |
| 3 | type | varchar | 64 | 0 | N | N | 0 | 文章分类:[0,1000]用来搜索指定类型的文章 |
| 4 | hits | int | 10 | 0 | N | N | 0 | 点击数:[0,1000000000]访问这篇文章的人次 |
| 5 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
| 6 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 8 | source | varchar | 255 | 0 | Y | N | 来源:[0,255]文章的出处 | |
| 9 | url | varchar | 255 | 0 | Y | N | 来源地址:[0,255]用于跳转到发布该文章的网站 | |
| 10 | tag | varchar | 255 | 0 | Y | N | 标签:[0,255]用于标注文章所属相关内容,多个标签用空格隔开 | |
| 11 | content | longtext | 2147483647 | 0 | Y | N | 正文:文章的主体内容 | |
| 12 | img | varchar | 255 | 0 | Y | N | 封面图 | |
| 13 | description | text | 65535 | 0 | Y | N | 文章描述 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | type_id | smallint | 5 | 0 | N | Y | 分类ID:[0,10000] | |
| 2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000]决定分类显示的先后顺序 |
| 3 | name | varchar | 16 | 0 | N | N | 分类名称:[2,16] | |
| 4 | father_id | smallint | 5 | 0 | N | N | 0 | 上级分类ID:[0,32767] |
| 5 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该分类的作用 | |
| 6 | icon | text | 65535 | 0 | Y | N | 分类图标: | |
| 7 | url | varchar | 255 | 0 | Y | N | 外链地址:[0,255]如果该分类是跳转到其他网站的情况下,就在该URL上设置 | |
| 8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | auth_id | int | 10 | 0 | N | Y | 授权ID: | |
| 2 | user_group | varchar | 64 | 0 | Y | N | 用户组: | |
| 3 | mod_name | varchar | 64 | 0 | Y | N | 模块名: | |
| 4 | table_name | varchar | 64 | 0 | Y | N | 表名: | |
| 5 | page_title | varchar | 255 | 0 | Y | N | 页面标题: | |
| 6 | path | varchar | 255 | 0 | Y | N | 路由路径: | |
| 7 | parent | varchar | 64 | 0 | Y | N | 父级菜单 | |
| 8 | parent_sort | int | 10 | 0 | N | N | 0 | 父级菜单排序 |
| 9 | position | varchar | 32 | 0 | Y | N | 位置: | |
| 10 | mode | varchar | 32 | 0 | N | N | _blank | 跳转方式: |
| 11 | add | tinyint | 3 | 0 | N | N | 1 | 是否可增加: |
| 12 | del | tinyint | 3 | 0 | N | N | 1 | 是否可删除: |
| 13 | set | tinyint | 3 | 0 | N | N | 1 | 是否可修改: |
| 14 | get | tinyint | 3 | 0 | N | N | 1 | 是否可查看: |
| 15 | field_add | text | 65535 | 0 | Y | N | 添加字段: | |
| 16 | field_set | text | 65535 | 0 | Y | N | 修改字段: | |
| 17 | field_get | text | 65535 | 0 | Y | N | 查询字段: | |
| 18 | table_nav_name | varchar | 500 | 0 | Y | N | 跨表导航名称: | |
| 19 | table_nav | varchar | 500 | 0 | Y | N | 跨表导航: | |
| 20 | option | text | 65535 | 0 | Y | N | 配置: | |
| 21 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 22 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | code_token_id | int | 10 | 0 | N | Y | ||
| 2 | token | varchar | 255 | 0 | Y | N | ||
| 3 | code | varchar | 255 | 0 | Y | N | 验证码 | |
| 4 | expire_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 失效时间 |
| 5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | collect_id | int | 10 | 0 | N | Y | 收藏ID: | |
| 2 | user_id | int | 10 | 0 | N | N | 0 | 收藏人ID: |
| 3 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
| 4 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
| 5 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
| 6 | title | varchar | 255 | 0 | Y | N | 标题: | |
| 7 | img | varchar | 255 | 0 | Y | N | 封面: | |
| 8 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 9 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | comment_id | int | 10 | 0 | N | Y | 评论ID: | |
| 2 | user_id | int | 10 | 0 | N | N | 0 | 评论人ID: |
| 3 | reply_to_id | int | 10 | 0 | N | N | 0 | 回复评论ID:空为0 |
| 4 | content | longtext | 2147483647 | 0 | Y | N | 内容: | |
| 5 | nickname | varchar | 255 | 0 | Y | N | 昵称: | |
| 6 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
| 7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 9 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
| 10 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
| 11 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | food_calories_id | int | 10 | 0 | N | Y | 食物热量ID | |
| 2 | food_pictures | varchar | 255 | 0 | Y | N | 食物图片 | |
| 3 | food_name | varchar | 64 | 0 | Y | N | 食物名称 | |
| 4 | total_calorie_value | varchar | 64 | 0 | Y | N | 热量总值 | |
| 5 | nutritional_components | varchar | 64 | 0 | Y | N | 营养成分 | |
| 6 | food_taboos | varchar | 64 | 0 | Y | N | 食用禁忌 | |
| 7 | food_notes | text | 65535 | 0 | Y | N | 食材备注 | |
| 8 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
| 9 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
| 10 | collect_len | int | 10 | 0 | N | N | 0 | 收藏数 |
| 11 | comment_len | int | 10 | 0 | N | N | 0 | 评论数 |
| 12 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 13 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | food_classification_id | int | 10 | 0 | N | Y | 食材分类ID | |
| 2 | food_ingredient_name | varchar | 64 | 0 | Y | N | 食材名称 | |
| 3 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | hits_id | int | 10 | 0 | N | Y | 点赞ID: | |
| 2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
| 3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
| 6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
| 7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | notice_id | mediumint | 8 | 0 | N | Y | 公告id: | |
| 2 | title | varchar | 125 | 0 | N | N | 标题: | |
| 3 | content | longtext | 2147483647 | 0 | Y | N | 正文: | |
| 4 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 5 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | operation_log_id | int | 10 | 0 | N | Y | 操作日志ID | |
| 2 | user_group | varchar | 64 | 0 | Y | N | 用户角色 | |
| 3 | user_name | varchar | 64 | 0 | Y | N | 用户账号 | |
| 4 | routes | varchar | 64 | 0 | Y | N | 模块名称 | |
| 5 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | praise_id | int | 10 | 0 | N | Y | 点赞ID: | |
| 2 | user_id | int | 10 | 0 | N | N | 0 | 点赞人: |
| 3 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 4 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
| 6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
| 7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
| 8 | status | bit | 1 | 0 | N | N | 1 | 点赞状态:1为点赞,0已取消 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | recipe_information_id | int | 10 | 0 | N | Y | 食谱信息ID | |
| 2 | recipe_cover | varchar | 255 | 0 | Y | N | 食谱封面 | |
| 3 | recipe_name | varchar | 64 | 0 | Y | N | 食谱名称 | |
| 4 | recipe_type | varchar | 64 | 0 | Y | N | 食谱类型 | |
| 5 | main_ingredients | varchar | 64 | 0 | Y | N | 主要食材 | |
| 6 | other_materials | varchar | 64 | 0 | Y | N | 其他材料 | |
| 7 | recipe_flavors | varchar | 64 | 0 | Y | N | 菜谱口味 | |
| 8 | cooking_difficulty | varchar | 64 | 0 | Y | N | 烹饪难度 | |
| 9 | total_calorie_value | varchar | 64 | 0 | Y | N | 热量总值 | |
| 10 | nutritional_components | varchar | 64 | 0 | Y | N | 营养成分 | |
| 11 | publish_user | int | 10 | 0 | Y | N | 0 | 发布用户 |
| 12 | cooking_steps | text | 65535 | 0 | Y | N | 烹饪步骤 | |
| 13 | hits | int | 10 | 0 | N | N | 0 | 点击数 |
| 14 | praise_len | int | 10 | 0 | N | N | 0 | 点赞数 |
| 15 | collect_len | int | 10 | 0 | N | N | 0 | 收藏数 |
| 16 | comment_len | int | 10 | 0 | N | N | 0 | 评论数 |
| 17 | recommend | int | 10 | 0 | N | N | 0 | 智能推荐 |
| 18 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 19 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
表refrigerator_ingredients (冰箱食材)
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | refrigerator_ingredients_id | int | 10 | 0 | N | Y | 冰箱食材ID | |
| 2 | publish_user | int | 10 | 0 | Y | N | 0 | 发布用户 |
| 3 | food_preference | varchar | 64 | 0 | Y | N | 食材名称 | |
| 4 | quantity_of_ingredients | double | 9 | 2 | Y | N | 0.00 | 食材数量 |
| 5 | purchase_date | date | 10 | 0 | Y | N | 购买日期 | |
| 6 | shelf_life | date | 10 | 0 | Y | N | 保质期限 | |
| 7 | food_ingredient_pictures | varchar | 255 | 0 | Y | N | 食材图片 | |
| 8 | storage_remarks | text | 65535 | 0 | Y | N | 存放备注 | |
| 9 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | registered_user_id | int | 10 | 0 | N | Y | 注册用户ID | |
| 2 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
| 3 | preferred_ingredients | varchar | 64 | 0 | Y | N | 偏好食材 | |
| 4 | examine_state | varchar | 16 | 0 | N | N | 已通过 | 审核状态 |
| 5 | user_id | int | 10 | 0 | N | N | 0 | 用户ID |
| 6 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | schedule_id | smallint | 5 | 0 | N | Y | 日程ID:[0,32767] | |
| 2 | content | varchar | 255 | 0 | Y | N | 日程内容 | |
| 3 | scheduled_time | datetime | 19 | 0 | Y | N | 计划时间 | |
| 4 | user_id | int | 10 | 0 | N | N | 用户id | |
| 5 | create_time | datetime | 19 | 0 | Y | N | 创建时间 | |
| 6 | update_time | datetime | 19 | 0 | Y | N | 更新时间 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | score_id | int | 10 | 0 | N | Y | 评分ID: | |
| 2 | user_id | int | 10 | 0 | N | N | 0 | 评分人: |
| 3 | nickname | varchar | 64 | 0 | Y | N | 昵称: | |
| 4 | score_num | double | 5 | 2 | N | N | 0.00 | 评分: |
| 5 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 6 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 7 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
| 8 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
| 9 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | slides_id | int | 10 | 0 | N | Y | 轮播图ID: | |
| 2 | title | varchar | 64 | 0 | Y | N | 标题: | |
| 3 | content | varchar | 255 | 0 | Y | N | 内容: | |
| 4 | url | varchar | 255 | 0 | Y | N | 链接: | |
| 5 | img | varchar | 255 | 0 | Y | N | 轮播图: | |
| 6 | hits | int | 10 | 0 | N | N | 0 | 点击量: |
| 7 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 8 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | upload_id | int | 10 | 0 | N | Y | 上传ID | |
| 2 | name | varchar | 64 | 0 | Y | N | 文件名 | |
| 3 | path | varchar | 255 | 0 | Y | N | 访问路径 | |
| 4 | file | varchar | 255 | 0 | Y | N | 文件路径 | |
| 5 | display | varchar | 255 | 0 | Y | N | 显示顺序 | |
| 6 | father_id | int | 10 | 0 | Y | N | 0 | 父级ID |
| 7 | dir | varchar | 255 | 0 | Y | N | 文件夹 | |
| 8 | type | varchar | 32 | 0 | Y | N | 文件类型 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | user_id | int | 10 | 0 | N | Y | 用户ID:[0,8388607]用户获取其他与用户相关的数据 | |
| 2 | state | smallint | 5 | 0 | N | N | 1 | 账户状态:[0,10](1可用|2异常|3已冻结|4已注销) |
| 3 | user_group | varchar | 32 | 0 | Y | N | 所在用户组:[0,32767]决定用户身份和权限 | |
| 4 | login_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 上次登录时间: |
| 5 | phone | varchar | 11 | 0 | Y | N | 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时 | |
| 6 | phone_state | smallint | 5 | 0 | N | N | 0 | 手机认证:[0,1](0未认证|1审核中|2已认证) |
| 7 | username | varchar | 16 | 0 | N | N | 用户名:[0,16]用户登录时所用的账户名称 | |
| 8 | nickname | varchar | 16 | 0 | Y | N | 昵称:[0,16] | |
| 9 | password | varchar | 64 | 0 | N | N | 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成 | |
| 10 | | varchar | 64 | 0 | Y | N | 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时 | |
| 11 | email_state | smallint | 5 | 0 | N | N | 0 | 邮箱认证:[0,1](0未认证|1审核中|2已认证) |
| 12 | avatar | varchar | 255 | 0 | Y | N | 头像地址:[0,255] | |
| 13 | open_id | varchar | 255 | 0 | Y | N | 针对获取用户信息字段 | |
| 14 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | user_check_in_id | int | 10 | 0 | N | Y | 用户打卡ID | |
| 2 | check_in_users | int | 10 | 0 | Y | N | 0 | 打卡用户 |
| 3 | user_name | varchar | 64 | 0 | Y | N | 用户姓名 | |
| 4 | check_in_date | date | 10 | 0 | Y | N | 打卡日期 | |
| 5 | check_in_notes | text | 65535 | 0 | Y | N | 打卡备注 | |
| 6 | create_time | datetime | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间 |
| 7 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间 |
| 编号 | 名称 | 数据类型 | 长度 | 小数位 | 允许空值 | 主键 | 默认值 | 说明 |
| 1 | group_id | mediumint | 8 | 0 | N | Y | 用户组ID:[0,8388607] | |
| 2 | display | smallint | 5 | 0 | N | N | 100 | 显示顺序:[0,1000] |
| 3 | name | varchar | 16 | 0 | N | N | 名称:[0,16] | |
| 4 | description | varchar | 255 | 0 | Y | N | 描述:[0,255]描述该用户组的特点或权限范围 | |
| 5 | source_table | varchar | 255 | 0 | Y | N | 来源表: | |
| 6 | source_field | varchar | 255 | 0 | Y | N | 来源字段: | |
| 7 | source_id | int | 10 | 0 | N | N | 0 | 来源ID: |
| 8 | register | smallint | 5 | 0 | Y | N | 0 | 注册位置: |
| 9 | create_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 创建时间: |
| 10 | update_time | timestamp | 19 | 0 | N | N | CURRENT_TIMESTAMP | 更新时间: |
第4章系统实现
4.1用户功能模块
4.1.1 用户注册界面
游客可以随时进入到系统中,对系统中的信息浏览,但是想要实现用户打卡、评论收藏等,就必须有这个系统的账号,如果没有账号的话,可以注册成注册用户进行相关的操作,同时用户还可以对个人信息以及操作的信息进行管控。用户注册界面如图5-1所示。

图5-1用户注册界面
注册关键代码如下:
/**
* 注册
* @param user
* @return
*/
@PostMapping("register")
public Map<String, Object> signUp(@RequestBody User user) {
// 查询用户
Map<String, String> query = new HashMap<>();
query.put("username",user.getUsername());
List list = service.select(query, new HashMap<>()).getResultList();
if (list.size()>0){
return error(30000, "用户已存在");
}
user.setUserId(null);
user.setPassword(service.encryption(user.getPassword()));
service.save(user);
return success(1);
}
/**
* 用户ID:[0,8388607]用户获取其他与用户相关的数据
*/
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "user_id")
private Integer userId;
/**
* 账户状态:[0,10](1可用|2异常|3已冻结|4已注销)
*/
@Basic
@Column(name = "state")
private Integer state;
/**
* 所在用户组:[0,32767]决定用户身份和权限
*/
@Basic
@Column(name = "user_group")
private String userGroup;
/**
* 上次登录时间:
*/
@Basic
@Column(name = "login_time")
private Timestamp loginTime;
/**
* 手机号码:[0,11]用户的手机号码,用于找回密码时或登录时
*/
@Basic
@Column(name = "phone")
private String phone;
/**
* 手机认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "phone_state")
private Integer phoneState;
/**
* 用户名:[0,16]用户登录时所用的账户名称
*/
@Basic
@Column(name = "username")
private String username;
/**
* 昵称:[0,16]
*/
@Basic
@Column(name = "nickname")
private String nickname;
/**
* 密码:[0,32]用户登录所需的密码,由6-16位数字或英文组成
*/
@Basic
@Column(name = "password")
private String password;
/**
* 邮箱:[0,64]用户的邮箱,用于找回密码时或登录时
*/
@Basic
@Column(name = "email")
private String email;
/**
* 邮箱认证:[0,1](0未认证|1审核中|2已认证)
*/
@Basic
@Column(name = "email_state")
private Integer emailState;
/**
* 头像地址:[0,255]
*/
@Basic
@Column(name = "avatar")
private String avatar;
/**
* 创建时间:
*/
@Basic
@Column(name = "create_time")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Timestamp createTime;
@Basic
@Transient
private String code;
}
4.1.2 用户登录界面
当用户注册完成后就可以登录了,输入用户名+密码,通过滑动图片验证后,点击“登录”按钮进行登录。
登录流程图如图5-2所示。

图5-2登录流程图
用户登录界面如图5-3所示。

图5-3用户登录界面
登录关键代码如下:
/**
* 登录
* @param data
* @param httpServletRequest
* @return
*/
@PostMapping("login")
public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {
log.info("[执行登录接口]");
String username = data.get("username");
String email = data.get("email");
String phone = data.get("phone");
String password = data.get("password");
List resultList = null;
Map<String, String> map = new HashMap<>();
if(username != null && "".equals(username) == false){
map.put("username", username);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(email != null && "".equals(email) == false){
map.put("email", email);
resultList = service.select(map, new HashMap<>()).getResultList();
}
else if(phone != null && "".equals(phone) == false){
map.put("phone", phone);
resultList = service.select(map, new HashMap<>()).getResultList();
}else{
return error(30000, "账号或密码不能为空");
}
if (resultList == null || password == null) {
return error(30000, "账号或密码不能为空");
}
//判断是否有这个用户
if (resultList.size()<=0){
return error(30000,"用户不存在");
}
User byUsername = (User) resultList.get(0);
Map<String, String> groupMap = new HashMap<>();
groupMap.put("name",byUsername.getUserGroup());
List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();
if (groupList.size()<1){
return error(30000,"用户组不存在");
}
UserGroup userGroup = (UserGroup) groupList.get(0);
//查询用户审核状态
if (!StringUtils.isEmpty(userGroup.getSourceTable())){
String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();
String res = String.valueOf(service.runCountSql(sql).getSingleResult());
if (res==null){
return error(30000,"用户不存在");
}
if (!res.equals("已通过")){
return error(30000,"该用户审核未通过");
}
}
//查询用户状态
if (byUsername.getState()!=1){
return error(30000,"用户非可用状态,不能登录");
}
String md5password = service.encryption(password);
if (byUsername.getPassword().equals(md5password)) {
// 存储Token到数据库
AccessToken accessToken = new AccessToken();
accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));
accessToken.setUser_id(byUsername.getUserId());
tokenService.save(accessToken);
// 返回用户信息
JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));
user.put("token", accessToken.getToken());
JSONObject ret = new JSONObject();
ret.put("obj",user);
return success(ret);
} else {
return error(30000, "账号或密码不正确");
}
}
4.1.3 用户首页界面
首页展示用户偏好食材的推荐菜谱,用户可以方便地通过首页的导航栏操作,浏览轮播图、查看网站公告、饮食资讯以及食谱信息推荐等。通过输入关键词,用户能够进行全网搜索,快速查找到感兴趣的菜谱或食材相关信息。用户首页界面如图5-4所示。

图5-4用户首页展示界面
4.1.4 食谱信息界面
用户可以查看推荐的各类食谱信息,了解每道菜的详细资料,如食谱名称、主要食材、菜谱口味及点赞数等。系统还支持通过输入食谱名称、主要食材、选择点赞数、点击数、收藏数和发布时间等多维度进行搜索。用户对喜欢的食谱可以进行点赞、收藏,或发表评论。评论后,用户还可对其评论进行回复、删除。界面如下图5-5所示:

图5-5食谱信息界面

图5-6 食谱信息详情界面
4.1.5 冰箱食材界面
用户可以录入自己冰箱中的食材,记录食材的名称、购买日期、保质期限、食材图片以及存放备注等信息,帮助用户更好地管理家中的食材,避免浪费。系统将提供相关提醒,确保用户及时使用即将过期的食材。界面如图5-7所示。

图5-7 冰箱食材界面
4.1.6 食物热量界面
用户可以查看各类食物的热量信息,包括食物名称、热量总值、营养成分等详细数据。系统支持通过输入食物名称、选择点赞数、点击数、收藏数等进行搜索,帮助用户选择适合自己饮食需求的食物。用户还可对食物热量信息进行点赞、收藏,或发表评论,回复和删除评论。界面如图5-8所示。

图5-8 食物热量界面
4.1.7 用户打卡界面
用户可以在系统中记录每日饮食打卡信息,查看打卡日期,并可输入备注进行提交,帮助用户追踪饮食习惯和健康状况,形成良好的饮食管理习惯。界面如图5-9所示。

图5-9 用户打卡界面
4.1.8 我的-食谱信息界面
用户可以通过输入食谱名称、主要食材等关键词进行搜索,快速查找感兴趣的食谱信息。系统还支持用户对食谱进行添加、重置、查询等操作,帮助用户管理和获取想要的菜谱。界面如图5-10所示。

图5-10 食谱信息界面

图5-11 添加食谱信息界面
4.2管理员模块的实现
4.2.1系统用户界面
管理员能够管理所有系统用户,包括注册用户和管理用户账号。管理员可以通过昵称搜索用户信息,对用户账号进行增删改查等操作,以确保用户数据的准确性和系统安全。如图5-12所示。
图5-12 系统用户界面
4.2.2食谱信息管理界面
管理员可查看所有食谱信息的详细资料,包括用户对食谱的评论和反馈。管理员通过搜索食谱名称和主要食材等关键词,能够进行精准的查询操作。对不合适的食谱或评论,管理员可进行删除,保持食谱推荐内容的高质量。同时,管理员也可以对食谱进行新增和更新。页面如图5-13所示。
图5-13食谱信息管理界面
4.2.3 食物热量管理界面
管理员可以查看各类食物的热量数据,包括食物名称、热量总值、营养成分等。管理员还可以通过输入食物名称进行搜索,管理食物热量信息的准确性与完整性。在此基础上,管理员也可以新增食物热量记录,完善系统信息库。界面如图5-14所示。
图5-14 食物热量管理界面
图5-15 添加食物热量界面
4.2.4 系统管理界面
管理员可管理轮播图信息,查看各轮播图的详情,并支持通过标题搜索,进行增删改查等操作。确保轮播图内容的实时更新和有效性。界面如图5-16所示。
图5-16系统管理界面
查询的关键代码如下:
@RequestMapping("/get_obj")
public Map<String, Object> obj(HttpServletRequest request) {
Query select = service.select(service.readQuery(request), service.readConfig(request));
List resultList = select.getResultList();
if (resultList.size() > 0) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("obj",resultList.get(0));
return success(jsonObject);
} else {
return success(null);
}
}
public Query select(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("select ");
sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");
sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));
if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){
sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");
}
if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){
sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");
}
if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){
int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;
int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;
sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);
}
log.info("[{}] - 查询操作,sql: {}",table,sql);
return runEntitySql(sql.toString());
}
4.2.5资源管理界面
管理员负责管理饮食资讯,包括查看各类饮食资讯的详情和用户评论。管理员可以通过标题、标签和分类进行搜索,管理资讯内容的准确性。对于不合适的资讯内容,管理员可以删除,保持系统内容的质量。界面如下图5-17所示。
图5-17资源管理界面
删除的关键代码如下:
@RequestMapping(value = "/del")
@Transactional
public Map<String, Object> del(HttpServletRequest request) {
service.delete(service.readQuery(request), service.readConfig(request));
return success(1);
}
@Transactional
public void delete(Map<String,String> query,Map<String,String> config){
StringBuffer sql = new StringBuffer("DELETE FROM ").append("`").append(table).append("`").append(" ");
sql.append(toWhereSql(query, "0".equals(config.get(FindConfig.GROUP_BY))));
log.info("[{}] - 删除操作:{}",table,sql);
Query query1 = runCountSql(sql.toString());
query1.executeUpdate();
}
第5章系统测试
5.1 平台测试用例
平台测试包括:用户登录功能、食谱信息查看功能、食谱信息添加功能、密码修改功能测试,如表5-1、5-2、5-3、5-4所示:
表5-1 用户登录功能测试表
| 用例名称 | 用户登录平台 |
| 目的 | 测试用户通过正确的用户名和密码可否登录功能 |
| 前提 | 未登录的情况下 |
| 测试流程 | 1) 进入登录页面 2) 输入正确的用户名和密码 |
| 预期结果 | 用户名和密码正确的时候,跳转到登录成功界面,反之则显示错误信息,提示重新输入 |
| 实际结果 | 实际结果与预期结果一致 |
食谱信息查看功能测试:
表5-2 食谱信息查看功能测试表
| 用例名称 | 食谱信息查看 |
| 目的 | 测试食谱信息查看功能 |
| 前提 | 用户登录 |
| 测试流程 | 点击首页的食谱信息 |
| 预期结果 | 可以查看到所有食谱信息 |
| 实际结果 | 实际结果与预期结果一致 |
食谱信息添加界面测试:
表5-3 食谱信息添加界面测试表
| 用例名称 | 食谱信息添加测试用例 | ||
| 目的 | 测试材料信息信息功能 | ||
| 前提 | 注册用户正常登录情况下 | ||
| 测试流程 | 1)用户点击食谱信息,然后点击添加进入页面填写信息。 2)点击进行提交。 | ||
| 预期结果 | 提交以后,平台首页会显示新的食谱信息 | ||
| 实际结果 | 实际结果与预期结果一致 | ||
| 实际结果 | 实际结果与预期结果一致 | ||
密码修改功能测试:
表5-4 密码修改功能测试表
| 用例名称 | 密码修改测试用例 |
| 目的 | 测试管理员密码修改功能 |
| 前提 | 管理员用户正常登录情况下 |
| 测试流程 | 1)管理员密码修改并完成填写。 2)点击进行提交。 |
| 预期结果 | 使用新的密码可以登录 |
| 实际结果 | 实际结果与预期结果一致 |
5.2 平台测试结果
通过编写智能菜谱系统的测试用例,已经检测完毕用户登录功能、食谱信息查看功能、食谱信息添加功能、密码修改功能测试,通过这4大模块的测试为智能菜谱系统的后期推广运营提供了强力的技术支撑。
第6章总结
智能菜谱系统结合了微信小程序的便捷性,为用户提供了一个高效、个性化的饮食管理平台。系统通过简单易用的界面,帮助用户管理食材、选择菜谱、记录每日饮食,满足了不同用户的饮食需求。通过对用户个人偏好和食材库存的分析,系统能够智能推荐菜谱,不仅提高了食材的使用效率,还有效减少了浪费。后台管理功能使得管理员能够实时监控系统状态、更新食谱内容、管理用户信息,确保平台的稳定运行。
在技术架构上,SpringBoot作为后端开发框架,提供了高效的开发和部署支持,使得系统具备了较强的可扩展性和稳定性。微信小程序的应用,使得用户能够随时随地访问系统,增加了系统的便捷性和灵活性。此外,数据安全性和系统稳定性得到了充分保障,通过加密技术、权限控制、负载均衡等手段,确保了系统在高并发情况下的可靠运行。整体设计充分考虑了用户体验与技术实现的平衡,确保了平台的易用性和高效性。
该系统不仅是一个菜谱推荐平台,更是一个综合的饮食管理工具,帮助用户更好地规划日常饮食,保持健康的生活方式。未来,随着用户需求的不断变化,系统可以进一步扩展功能,如智能购物清单、营养分析等,为用户提供更加全面的服务。总体而言,智能菜谱系统通过灵活的架构设计和精心的功能规划,提升了用户的饮食管理体验,为健康饮食提供了有效的支持。
参考文献
- 陈钱,兰全祥. Java Web中文件上传方法的研究与分析 [J]. 工业控制计算机, 2024, 37 (11): 72-74+77.
- 张占新,蒋磊,吴谢军,等. 多腔烹饪菜谱功效一致性研究[C]// 中国家用电器协会. 2024年中国家用电器技术大会论文集(4). 华帝股份有限公司;, 2024: 9.
- 刘炳宇,何巧云. 从“菜谱化调处”到“民生说和”的蝶变[N]. 宁夏法治报, 2023-12-20 (T14).
- 陈芳. 基于MySQL数据库的数据录入系统设计研究 [J]. 科技资讯, 2024, 22 (20): 35-37.
- 养生菜谱 [J]. 家庭医药.就医选药, 2024, (10): 85.
- 姜炳哲. 基于规则约束的菜谱生成技术研究与应用[D]. 济南大学, 2024.
- 李松娜. “三减政策”下菜谱式复合调味料开发中的技术探索 [J]. 食品工业, 2023, 44 (11): 147-150.
- 蒋东珣. 高校食堂菜谱推荐系统的数据建模优化设计研究 [J]. 电脑知识与技术, 2024, 20 (05): 62-65.
- 郑丽丽. I-STEM理念下的初中信息科技创新教学——以“设计营养菜谱”为例 [J]. 中小学信息技术教育, 2024, (04): 92-93.
- 王思佳,李晓燕. 定量描述分析法在菜谱式调料感官评定中的应用 [J]. 食品工业, 2023, 44 (12): 288-293.
- 欧阳怡芳. 家常菜谱篇章分析[D]. 上海师范大学, 2024.
- 高森孟,周睿. “互联网+”时代全媒体视域下的移动端菜谱可用性研究 [J]. 设计, 2023, 36 (22): 123-125.
- 陈蓓蕾,洪年松. 基于SpringBoot的数据库接口设计 [J]. 信息与电脑(理论版), 2023, 35 (16): 181-183.
- 孙惠. 面向家常菜谱的文本分类方法研究[D]. 中南民族大学, 2022.
- 田猛,高淑贤,李祝君,等. 一种便捷式的智能菜谱推荐系统的设计与实现 [J]. 电脑知识与技术, 2022, 18 (11): 55-57.
- 徐志. 基于网络爬虫的菜谱搜索和智能推荐方法研究[D]. 安徽建筑大学, 2022.
- 高宇,黄怡,乔灵凤. 家庭智能菜谱调料机 [J]. 科技与创新, 2020, (07): 127-128.
- 潘伟杰,冲蕾,李霖奇,等. 基于深度学习与百度 AI 的菜谱推荐与健康分析微信小程序设计 [J]. 智能计算机与应用, 2024, 14 (05): 257-264.
- Stokes D . Update or migrate? Planning for MySQL 5.7 EOL [J]. InfoWorld.com, 2023, 24 (03): 22-30.
- Sergey S . Microservices Design Patterns with Java:70+ patterns for designing, building, and deploying microservices (English Edition)[M]. BPB Publishers: 2024-05-24.
- Shao W ,Liu K . Design and Implementation of Online Ordering System Based on SpringBoot [J]. Journal of Big Data and Computing, 2024, 2 (3):
致谢
在这3个月的毕业设计过程中,指导教师的指导发挥了至关重要的作用,他们的认真负责的工作态度、谨慎的教学精神以及丰富的理论知识,为我的设计提供了强有力的支持,使得整个过程顺利进行。她的教学方式非常认真,让我印象深刻。我从她那里学到了很多知识,并在实践中不断提升。我对这位老师表示由衷的感谢。
此外,我还要感谢我班的同学们,他们既是我的同窗好友,又是我的良师益友。正是由于你们的支持和关怀,使得我在大学期间的学习和生活都变得异常充实。感谢那些在大学期间给予我帮助的所有老师和同学们,是你们给予了我在学业道路上的前进动力。
当然,我也不能忘记我的父母,是他们用无私的爱抚养我成人。你们的养育之恩我将永生难忘,将来我一定会用我的成绩回报你们。在成长的道路上,我会不断努力,不负众望,用实际行动来回报你们对我的期望。
经过对毕业设计的全面研究和开发,我的系统取得了重大突破,从需求分析到实现复杂功能,再到最终的测试和维护,使我对系统有了更加深刻的理解。此外,我还在实践中不断提升自己的技能,解决复杂问题,这是这次毕业设计最大的收获。
免费领取项目源码,请关注❥点赞收藏并私信博主+v,谢谢~

被折叠的 条评论
为什么被折叠?



