毕业设计基于SpringBoot+AI大模型的旅游推荐系统(前后端源码)

发布时间:2026/10/22 13:13:55
毕业设计基于SpringBoot+AI大模型的旅游推荐系统(前后端源码)
基于SpringBootAI大模型的旅游推荐系统本系统旨在构建一个集智能推荐、在线预订、社区互动于一体的综合性旅游服务平台。通过引入人工智能推荐算法和大语言模型技术为用户提供个性化的景点推荐服务通过前后端分离的现代化Web架构为管理员提供高效的业务管理后台实现旅游资源的数字化管理和智能化运营。为用户提供景点浏览、智能推荐、在线购票、住宿预订、旅游攻略等一站式服务为管理员提供用户管理、内容管理、订单管理、数据统计等后台管理功能通过AI大语言模型和协同过滤算法实现个性化的景点推荐构建安全可靠、性能优良、易于维护的现代化Web应用系统。层级技术选型版本说明后端框架Spring Boot3.4.3主应用框架开发语言Java17后端开发语言安全框架Spring Security6.x认证与授权ORM框架MyBatis-Plus3.x数据持久化数据库MySQL8.x关系型数据库缓存Redis6.x数据缓存与会话管理AI服务Spring AI OpenAI1.0.0-SNAPSHOT大语言模型集成API文档Knife4j4.x接口文档生成支付集成Alipay SDK最新支付宝在线支付工具库Hutool5.xJava工具集前端框架Vue3.x前端主框架UI组件库Element Plus2.x前端UI组件状态管理Pinia2.x前端状态管理路由管理Vue Router4.x前端路由HTTP客户端Axios1.x前后端数据交互富文本编辑器WangEditor5.x攻略内容编辑普通用户功能模块功能描述用户注册支持用户名密码邮箱注册前端表单校验后端唯一性校验用户登录支持用户名/密码登录登录成功返回JWT Token和用户信息邮箱验证支持邮箱验证码发送与校验用于注册和密码重置密码管理支持修改密码、忘记密码邮箱验证重置个人信息查看和修改个人资料昵称、头像、性别、手机号功能描述景点列表分页展示景点信息支持按分类筛选、关键词搜索景点详情查看景点详细信息包括图片、价格、地址、描述、分类景点搜索支持按景点名称、地址、描述等关键词模糊搜索分类导航按景点分类自然风光、人文古迹、主题公园等浏览景点收藏收藏/取消收藏感兴趣的景点查看我的收藏列表功能描述智能对话推荐用户输入自然语言需求如推荐适合亲子游的景点AI返回匹配的景点列表推荐理由展示AI为每个推荐景点生成个性化的推荐理由推荐结果验证后端验证AI返回的景点ID是否真实存在过滤无效结果推荐信息补全自动补充景点的完整信息图片、标题、分类等前端可直接渲染推荐历史保存用户的AI推荐会话历史支持多轮对话功能描述个性化推荐基于用户历史行为浏览、收藏、购买的协同过滤算法推荐景点热门推荐根据全站用户的收藏和订单数据统计热门景点推荐缓存推荐结果缓存到Redis提高响应速度功能描述门票查询查看景点可售门票列表包括票价、库存、有效期在线下单选择门票、填写游客信息、选择数量生成订单订单支付集成支付宝沙箱/正式环境实现在线支付订单管理查看我的订单列表包括待支付、已支付、已取消、已完成状态订单取消未支付订单支持取消释放库存功能描述住宿查询按景点查询周边住宿信息支持按类型酒店、民宿等筛选住宿详情查看住宿详细信息包括价格、评分、特色服务、图片住宿评价对住过的住宿进行评分和文字评价评价管理查看自己发表的评价支持修改和删除功能描述攻略浏览浏览其他用户发布的旅游攻略支持分页和搜索攻略发布使用WangEditor富文本编辑器编写和发布攻略支持上传封面图攻略管理查看自己发布的攻略支持编辑和删除攻略互动查看攻略详情增加浏览量统计功能描述发表评论对景点、攻略等内容发表评论支持回复他人评论楼中楼评论点赞对喜欢的评论进行点赞/取消点赞评论管理查看自己的评论记录支持删除内容收藏收藏喜欢的攻略内容管理员功能模块功能描述数据统计展示系统核心数据指标用户总数、景点总数、订单总数、收入统计快捷入口提供各管理模块的快捷导航功能描述用户列表分页展示所有用户信息支持按用户名、昵称、性别、角色筛选用户编辑修改用户基本信息昵称、邮箱、手机号、状态用户禁用/启用控制用户账号状态禁用后无法登录用户删除删除违规用户账号逻辑删除或物理删除角色管理查看和修改用户角色USER/ADMIN功能描述景点列表分页展示所有景点支持按分类、名称筛选景点新增添加新景点设置分类、名称、价格、地址、描述、上传图片景点编辑修改景点信息更新图片和描述景点删除删除景点需处理关联数据分类管理管理景点分类支持新增、编辑、删除分类功能描述门票列表查看所有门票信息包括关联景点、票价、库存门票新增为景点添加门票类型设置价格、库存、有效期门票编辑修改门票信息调整价格和库存门票删除下架或删除门票功能描述订单列表分页展示所有用户订单支持按订单号、用户、状态筛选订单详情查看订单详细信息包括游客信息、支付信息订单状态管理手动更新订单状态如确认完成、退款处理订单统计按时间统计订单数量和金额功能描述住宿列表分页展示所有住宿信息住宿新增添加住宿信息关联景点、设置类型、价格、特色服务住宿编辑修改住宿信息住宿删除删除住宿信息评价管理查看用户对住宿的评价可删除违规评价功能描述攻略管理查看所有用户发布的攻略支持编辑和删除违规内容评论管理查看所有用户评论支持删除违规评论轮播图管理管理首页轮播图设置展示顺序和链接收藏管理查看用户收藏记录功能描述文件管理管理系统上传的文件图片等缓存管理查看和清理Redis缓存接口文档通过Knife4j查看和测试API接口参考代码package org.example.springboot.AiService;import jakarta.annotation.Resource;import lombok.extern.slf4j.Slf4j;import org.example.springboot.service.AiChatSessionService;import org.springframework.ai.chat.client.ChatClient;import org.springframework.ai.chat.memory.ChatMemory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.stereotype.Service;import reactor.core.publisher.Flux;import java.time.LocalDateTime;/*** AI景点推荐服务** 功能提供智能景点推荐的AI服务** 使用场景* - 用户在首页输入旅游需求* - AI理解需求并推荐合适的景点* - 支持多轮对话保持上下文** author AI Assistant*/Slf4jServicepublic class ScenicRecommendationService {AutowiredQualifier(open-ai)private ChatClient chatClient;Autowiredprivate ChatMemory chatMemory;Resourceprivate AiChatSessionService aiChatSessionService;Resourceprivate Tools tools;Resourceprivate org.example.springboot.service.ScenicSpotService scenicSpotService;/*** 获取结构化的景点推荐列表** 特点* - 返回结构化数据包含景点ID和推荐理由* - 不返回对话式文本* - 适合前端直接展示** param userMessage 用户需求描述* return 结构化的推荐列表*/public StructOutPut.RecommendationList getRecommendations(String userMessage) {log.info( 开始AI景点推荐 );log.info(用户需求: {}, userMessage);try {// 预处理用户消息String processedMessage preprocessUserMessage(userMessage);log.info(预处理后消息: {}, processedMessage);// 获取数据库中景点总数long totalScenicSpots scenicSpotService.count();log.info(数据库景点总数: {}, totalScenicSpots);// 使用包含统计信息的动态PromptString systemPrompt PromptManage.getScenicRecommendationPrompt(totalScenicSpots);log.info(调用AI服务工具已注入: {}, tools ! null);// 调用AI服务获取结构化输出StructOutPut.RecommendationList result chatClient.prompt().system(systemPrompt).user(processedMessage).tools(tools).call().entity(StructOutPut.RecommendationList.class);log.info(AI返回推荐数量: {},result.recommendations() ! null ? result.recommendations().size() : 0);if (result.recommendations() ! null) {result.recommendations().forEach(r -log.info(推荐景点ID: {}, 理由: {}, r.scenicSpotId(), r.reason()));}log.info( AI景点推荐完成 );return result;} catch (Exception e) {log.error( AI景点推荐失败 );log.error(错误信息: {}, e.getMessage(), e);throw new RuntimeException(AI推荐服务调用失败: e.getMessage(), e);}}/*** 预处理用户消息** 用途* - 转换相对时间表达如今天、周末转为具体日期* - 清理特殊字符* - 补充上下文信息** param userMessage 原始用户消息* return 处理后的消息*/private String preprocessUserMessage(String userMessage) {// 这里可以添加日期转换、关键词规范化等预处理逻辑// 目前暂时直接返回原消息return userMessage;}/*** 清除会话记忆** param sessionId 会话ID*/public void clearSessionMemory(String sessionId) {log.info(清除AI景点推荐会话记忆会话ID: {}, sessionId);try {chatMemory.clear(sessionId);log.info(会话记忆清除成功会话ID: {}, sessionId);} catch (Exception e) {log.error(清除会话记忆失败: {}, e.getMessage(), e);}}/*** 获取会话历史消息** param sessionId 会话ID* return 消息列表*/public java.util.ListStructOutPut.ChatMessage getSessionHistory(String sessionId) {log.info(获取AI景点推荐会话历史会话ID: {}, sessionId);try {return aiChatSessionService.getSessionMessages(sessionId);} catch (Exception e) {log.error(获取会话历史失败: {}, e.getMessage(), e);throw new RuntimeException(获取会话历史失败, e);}}}