第1章 绪论
1.1 研究背景和意义
伴随着社会经济水平不断提高、居民生活观念不断变化,旅游业发展速度很快,是拉动经济增长的主要力量。现代游客对旅游体验个性化、便捷化的需求越来越大,这就给旅游服务提出了更高的要求1。传统的旅游推荐和咨询大多依靠人工的方式进行,不能迅速地满足用户多样化、个性化的兴趣和偏好,容易出现信息滞后、推荐内容雷同、人工失误频繁等状况,从而影响到整个旅游服务的效率以及用户的体验。伴随着信息技术的飞速发展,旅游行业也渐渐由原来的模式朝着智能化的方向转变,大数据、人工智能这些现代信息技术越发深入地发掘出用户的需求,进而提升服务质量。新一代个性化推荐系统依靠对大量的用户、旅游资源数据进行智能分析,从而达到高效匹配、精准推荐的目的,大大解决了传统模式下存在的信息瓶颈问题2。在此背景下,开发出一个高效智能的个性化旅游推荐系统就显得十分必要,一方面可以提高旅游行业的核心竞争力,另一方面也可以满足市场不断变化的服务需求。
相比于传统的依靠人工进行推荐的方法,基于SpringBoot和Vue开发出来的个性化旅游推荐系统具有前后端协同工作的特点,从而使得数据处理的速度变快、业务响应的速度也变快。系统对用户的行动及喜好数据展开智能分析之后,可以精准地推送出个性化的旅游方案,有效地削减了由于人工操作而产生的主观误差,提升了信息推送的速度以及契合度。该系统推广应用可以促进旅游产业信息化、智能化升级,有利于改善服务流程、提高游客满意度,有利于提高整个行业的整体服务水平。通过创建智能化推荐平台,不仅可以给游客提供更加有针对性的出行指导,也可以给旅游企业赋能数据驱动的精细化管理,从而提高市场竞争力,丰富社会大众多样化的出行选择,具有积极的社会和经济价值。
1.2 国内外研究现状
1.2.1 国内研究现状
国内个性化旅游推荐系统研究主要从用户兴趣建模、旅行场景理解、多源数据融合三个方面入手,方法体系也从原来的规则和内容匹配逐渐发展为协同过滤、知识图谱、深度学习三者结合的混合推荐。移动互联网的普及使得应用形态从单一的景点搜索变为行程规划、交通住宿联动、动态服务编排,推荐对象也由点状资源扩展成线性资源、主题性资源和时空序列。工程上Web前后端分离已成为主流的实现方式,SpringBoot支持服务化的接口以及业务的扩展,Vue加强了交互体验和组件化复用,数据处理从离线统计变为实时的特征计算、在线的召回排序。
国内相关应用最早是做信息聚合和景点搜索,主要功能是目的地词条的管理、地图的展示以及基本筛选,推荐依靠人工规则和热度排序,用户的画像大多由静态偏好组成,系统结构大多是单体应用,接口复用和并发支持的能力比较弱,不能满足复杂的行程组合需求。随着用户产生的内容和移动定位数据持续增长之后,兴趣挖掘也开始使用协同过滤以及内容特征融合的方法,将推荐的对象从景点拓展到酒店、餐饮和周边服务,并且形成了以城市为中心的多模块联动,业务侧也开始重视转化率和留存,推荐评估也从离线准确率向点击和下单这些在线指标扩展,数据管道表现出日志采集、清洗以及特征化工程化的趋势3。需求由原来的单个推荐变成现在的个性化行程规划之后,系统就应对了时空约束、预算约束以及拥挤度约束,推荐计算由简单的排序转变为召回、粗排、精排的分层结构,策略层加入多目标优化和规则兜底来控制风险,推荐结果的可解释表达被纳入到交互设计当中,页面展示由列表化向卡片化和路线视图转变,前端组件化提高了多终端适配和迭代速度4。数据驱动的运营模式加强之后,画像构建开始吸纳搜索、停留、收藏、评价等各方面的序列特征,冷启动场景加入内容语义表示和知识联系,旅游知识图谱用来展现景点的主题,地理邻接,开放时间以及适游季节这些联系,从而加强跨域关联推荐和约束校验的能力,推荐逻辑由单一模型转向混合策略协同5。工程侧以SpringBoot为微服务化拆分的主要技术,鉴权、用户、资源、推荐、订单等能力以接口的形式解耦,使用缓存和消息机制提高并发和稳定性,灰度发布和配置中心支持策略快速测试,前后端分离配合Vue的路由和状态管理提高交互的一致性,数据接口更注重幂等和可观测性6。在智能化服务不断深入的过程中,多模态内容以及大模型的语义理解被用作意图识别和对话式行程生成的手段,推荐系统重视即时反馈和在线学习,隐私和合规方面的匿名化、权限控制和审计机制成了工程约束,系统由单一的功能点发展成包含决策、预订和行中服务在内的综合性应用,个性化旅游推荐系统研究和实现更加重视端到端链路性能和可运营闭环7。
1.2.2 国外研究现状
国外对于个性化旅游推荐系统技术路线的形成,是以数据驱动和场景化为双轨的,在多源异构数据融合、序列行为建模、上下文感知、多目标推荐优化等方面都有所研究。系统应用模式重视跨渠道触达和全旅程服务编排,推荐不单是景点和内容的推荐,也是路线组合、活动时间、价格策略等各方面的推荐。技术上一般采用前后端分离和服务化架构,重视API治理、可观测性、实验平台的支撑,链路采用分层召回和排序的方式,用知识图谱加强约束推理和可解释的表现,交互侧更多地注重对话式的引导和可视化的行程编辑。
国外的相关平台最早是以目的地搜索和点评聚合为主,推荐依靠人群统计和相似用户的喜好来完成,主要资源管理集中在地点、标签以及评价文本上,伴随着移动端的普及以及定位能力的提升,推荐也开始加入上下文特征,把时间、天气、距离和出行方式加入到排序函数当中,为即时决策提供附近的体验和活动推送,形成了以位置为中心的轻量行程建议8。随着用户数量的增加,平台把推荐能力嵌入到预订链路当中,推荐对象同库存、价格、取消政策产生了耦合关系,模型的目标也从点击变为转化和收益,策略层使用多臂赌博和在线实验体系不断迭代,召回侧加入向量检索和表示学习来改善长尾覆盖,排序侧把用户生命周期和供给侧约束纳入考量范围,从而保持生态平衡9。多源数据融合越深,图结构数据就越能表达地点关系和主题联系,知识图谱以及图神经网络可以实现跨城市、跨主题的迁移,在冷启动和稀疏反馈的情况下仍然能够保持可用性,解释层用主题链路、相似路径和约束满足来增强用户的信任,行程推荐也渐渐具备了可编辑和可校验的结构化表现10。面对复杂行程需求的增长,平台创建了服务化推荐中台,把推荐、搜索、画像、特征和实验等各方面的功能用组件化的方式复用,接口契约和版本治理保证多终端接入,前端使用组件体系和状态管理完成路线编辑、地图联动、个性化内容编排,工程实践重视低延迟、容灾、弹性扩缩来应对高峰流量11。近几年对话式交互和生成式能力进入到推荐链路,系统把意图识别、约束提取、候选生成结合起来,生成结果经由规则校验和排序模型实施安全控制,反馈信号用作在线更新画像和策略,隐私保护和合规需求促使差分隐私、联邦学习和权限审计融入到数据处理流程当中,商业模式和产业生态在推荐输出中表现为广告竞价、内容分发以及供应链接入的统一编排12。
1.3 主要研究内容
本文主要研究个性化旅游推荐系统的设计和实现,试图解决用户面对海量旅游信息时很难找到符合自己兴趣爱好的景点、路线等问题,从而提高旅游信息获取的准确性、效率。核心工作就是对不同的用户主体进行旅游推荐、浏览、交流和后台管理等功能的系统开发。首先对旅游推荐系统业务需求进行分析,确定普通用户和管理员角色下各个功能模块及交互流程,然后根据系统整体架构的要求设计出前后端分离的系统。系统设计阶段按照需求把功能分为前端用Vue负责界面展示和用户交互,后端用Spring Boot实现业务逻辑处理和数据服务,数据持久化使用MySQL,重点放在个性化推荐算法和社区互动机制的设计上。系统实现部分,根据景点推荐算法,结合用户兴趣匹配以及浏览行为做动态推送,并且实现景点、路线、评论等模块的管理,丰富了旅游社区的交流和反馈。管理员端主要对景点类型、旅游路线、景点信息、交流权限等进行管理,保证平台数据安全、规范。系统测试阶段用核心功能集成和用户体验测试来检验平台推荐的准确性以及交互的流畅性。研究范围主要是对系统功能的设计和实现进行研究,不会涉及到景区大数据的采集以及第三方平台的深度集成等内容。最终完成基于SpringBoot和Vue的个性化旅游推荐服务平台,可以很好地满足不同的用户需求,为提高旅游信息服务的智能化水平提供了一种可行的方法。
第2章 相关技术介绍
Spring Boot框架
Spring Boot是面向企业级Java Web开发的框架,用自动装配机制来组织组件依赖,减少工程初始化和配置的复杂程度,使服务端把业务能力更多地放在领域建模和接口规范上。它自带的约定优于配置思想使得控制层、业务层和数据访问层的协作边界更加清楚,适合于创建旅游景点推荐这类高频读写场景的稳定REST风格接口。根据分层结构形成的统一异常处理、参数校验和日志链路,可以使得错误反馈和追踪信息有条理地被输出出来,从而提高接口的可观测性以及定位效率。系统运行阶段对于配置项的外部化管理更加直接,可以保证在不同的部署环境中有相同的运行行为。
在工程实践当中,Spring Boot将嵌入式容器以及启动流程融合起来之后,服务就以独立进程的形式被交付出去,并且还具备了健康检查以及优雅停机的功能,从而使得发布窗口对在线用户造成的干扰得以减小。安全控制层面可以和认证授权体系做可插拔集成,把管理员权限管理的策略用过滤链的方式放进统一入口中,削减横切逻辑对业务代码的入侵。依靠依赖管理以及版本对齐所形成起来的生态兼容性,使得常用中间件接入更加可控;该类框架化的组织方式,在相关研究中被归纳为提高开发效率和运维一致性的重要途径13。
Vue框架
Vue框架把响应式数据绑定作为核心,依靠依赖追踪来达成视图和状态的同步更新,让界面在数据变动的时候维持细粒度的渲染,削减不必要的DOM操作开销。其组件化模型把页面分成可以重复使用的功能模块,各个模块之间依靠单向的数据流以及事件机制来确定它们之间的交互界限,这对于旅游社区这类高交互页面来说,有着良好的状态管理能力。模板语法、指令系统可以提高视图的表达力,使开发人员用更接近业务语言的方式对界面结构进行描述,进而加快界面的更新速度并保证一致性。路由以及异步加载良好支持使页面切换更加平滑,减少首屏以及多页面模块之间资源负担。
在前后端分离的情况下,Vue会用API来驱动界面,围绕请求层、拦截器和统一错误提示来建立一个稳定的交互链路,使得评论管理等操作在网络波动的时候仍然可以得到预期的反馈14。配合使用编译优化和静态资源管理,在发布的时候可以对代码进行分割,并且可以设置缓存策略来控制更新。生态在工程化实践当中注重可维护和可测试,有关技术文献把这种以组件为单位的组织方式当作前端复杂度治理的关键手段,与系统要长期发展演变的界面架构目的相契合。
MySQL数据库
MySQL数据库属于成熟的关系型数据管理系统,可以对结构化的数据进行存储、查询以及事务控制,适用于承载旅游景点信息、路线要素、用户行为数据等有相关联约束的业务数据。其SQL查询功能可以完成多表关联以及聚合统计,在推荐计算和后台管理检索方面有着稳定的数据筛选和排序效果。InnoDB引擎使用行级锁以及崩溃恢复机制配合事务隔离级别可以降低并发写入带来的数据一致性风险,保证评论的写入和管理员的审核过程数据是可靠的。索引体系对于等值查询和范围查询的加速作用十分明显,以热点字段为依托创建组合索引可以加快列表页以及详情页的响应速度。相关研究对于MySQL在OLTP场景下事务能力以及索引优化路径做了系统的阐述15,给本系统的数据设计和性能调优提供理论基础。
2.4 前后端分离框架
前后端分离框架把接口契约当作协作中心,把界面渲染和业务服务分开,前端重在交互和状态呈现,后端重在规则计算和数据一致性,使得团队分工更加清晰。该模式下后端用统一的资源定位和方法语义来提供API,配合版本控制和统一返回结构,减少接口变更给页面带来的连锁影响,适合于旅游景点浏览等访问频繁的页面上保持稳定的交互协议。跨域访问、鉴权和会话管理一般用网关策略或者统一拦截器来实现,在链路入口处对登录态和权限边界进行约束。接口文档以及联调机制成了交付的重要环节,契约驱动可以缩减重复的沟通成本。
从运行的角度来说,前后端分离可以独立部署、弹性扩容,前端采用静态资源分发可以加快访问速度,后端根据业务压力来增加服务实例,系统的容量规划更加灵活。就接口层的限流、熔断和降级策略而言,可以将异常的影响范围控制在可控的范围内,从而提高系统的可用性。日志追踪在分离架构中更加依赖统一的链路标识和标准化错误码,使得问题定位可以跨越多个端口仍然保持一致。相关技术文献把该架构看作提高迭代效率、改善系统可维护性的工程实践范式16。
第3章 系统需求分析
3.1 可行性分析
3.1.1 技术可行性
本系统使用Spring Boot和Vue进行前后端分离的架构设计,可以使得系统结构更加清楚,模块开发更加独立,减少系统升级、维护的技术难度。所选择的技术栈都是成熟的,有稳定的开发环境和大量的技术支持。数据库层使用MySQL进行数据的存储,可以满足大量数据的快速处理。技术选型之间具有良好的配套部署环境,各个技术组件能够协同工作没有出现兼容性问题,给系统按照预期开发和顺利运行打下了坚实的基础。
3.1.2 操作可行性
本系统以普通用户、管理员为对象设计出简单的界面结构,结合操作流程优化以及功能分类,用户可以依靠导航条、模块入口来完成旅游景点浏览、推荐查询、路线管理、评论互动等基本操作。权限分级设计降低误操作概率,各个管理操作独立成体系,没有多余的步骤。界面交互符合大多数用户认知习惯,普通用户、管理者都可以在较短的时间内掌握系统的大部分功能,不会产生大的学习障碍,系统的使用方便性可以很好地满足日常需求。
3.1.3 经济可行性
本系统使用目前广泛使用的开源技术框架进行开发,减少了软件授权以及二次开发所造成的投入。前后端分离架构可以提高开发效率,对于人力、时间成本的消耗是合理的。系统功能结构清晰,在后续的扩展和维护过程中,资源投入较小,不容易造成由于体系过于复杂而产生的高额运维费用。整体开发、测试、维护流程都有较好的经济效益,投资回报期清楚,给项目的长久运行和持续改进打下了良好的根基。
3.2 功能需求分析
3.2.1 普通用户功能
普通用户可以获取到旅游景点推荐,按照自己的兴趣爱好来选择推荐的景点并查看推荐结果,在景点浏览页查看景点详情、图片信息和简介,查看旅游路线信息并选择一条适合自己的路线做为参照,旅游社区发布内容、参与话题讨论、查看他人动态,评论管理里发表评价、查看历史评论、维护已经发布过的评论。
普通用户用例图如图3-1所示。
图3-1普通用户用例图
3.2.2 管理员功能
管理员可以进入后台首页查看系统的运行概览和管理入口,在景点类型管理中保存景点的分类信息,在旅游景点管理中对景点的信息进行统一的维护和发布,在旅游路线管理中保存路线的信息以及展示的内容,在交流管理中对社区的交流内容进行管理与处理,在权限管理中设置账号的权限和角色的分配,保证管理端所能够使用的所有功能。
管理员用例图如图3-2所示。
图3-2管理员用例图
第4章 系统设计
4.1 协同过滤算法推荐设计
系统使用的是用户协同过滤算法,对用户历史行为数据(浏览、收藏、评论、点赞等)进行分析,得到用户和景点的评分矩阵,再用皮尔逊相关系数或者余弦相似度来计算用户之间的兴趣相似性。根据目标用户筛选出相似度最高的若干个邻居用户,从这些邻居用户中选择偏好高、目标用户没有交互过的景点作为推荐候选集。
为了防止冷启动以及新景点不能被推荐,系统使用了基于物品的协同过滤的方法,将景点的内容特征(地理位置、类型、热度)一同考虑进来进行混合推荐。在推荐生成的时候加入时间衰减因子,改变用户历史行为的权重,使得推荐结果更能体现出用户的近期兴趣变动。最后系统按照候选景点的相似度和质量评价的好坏对它们进行排序、筛选,保证推荐结果多样化、新颖。
该协同过滤算法模块单独作为一个推荐服务被封装起来,并且用Spring Boot来暴露RESTful接口,从而使得前端Vue组件可以自由地调用。推荐结果用懒加载和分页的方式显示,用Redis缓存高频推荐数据来提高响应速度。离线阶段系统利用全量行为数据来更新相似度矩阵,而在线阶段则是依靠用户反馈信息的收集来进行不断的改进推荐列表,从而达到高效的、准确的和可以解释的目的。
4.2 系统架构设计
系统使用的是前后端分离的分层结构。用户界面层用Vue来实现页面路由和组件渲染,给用户提供景点浏览、推荐展示、旅游路线查询、社区交流、评论操作的界面。应用服务层使用Spring Boot创建REST接口实现用户、管理员的业务功能,即景点类型管理、景点管理、路线管理、交流管理、权限管理,结合推荐计算和会话控制。数据持久层用MySQL来完成用户的存储、景点的存储、路线的存储、评论的存储、交流的存储、权限的存储等操作,采用ORM映射和事务控制来保证一致性17。系统支持层包含日志审计、参数校验、异常处理、鉴权拦截这些通用的功能。系统架构图如下图4-1所示。
图4-1系统架构图
4.3 系统结构功能设计
该系统主要针对普通用户和管理员两种角色。普通用户可以利用系统对旅游景点进行推荐、浏览景点、查看旅游路线、加入旅游社区交流和评论等核心功能来满足个性化旅游信息获取和互动的要求。管理员在系统后台对景点类型、旅游景点、旅游路线、交流、权限进行管理以保证系统更新内容和安全稳定的运行。两类用户功能分工明确,一方面可以提高用户体验,另一方面也可以提高平台的运营效率。该系统的功能结构如图4-2所示。
图4-2系统功能结构图
4.4 业务流程设计
4.4.1 旅游景点推荐流程设计
本流程是完成个性化景点推荐生成和呈现的流程。系统首先获取用户偏好和行为特征,判断特征是否充分来决定使用协同推荐还是热门补全策略,然后生成候选集并进行质量校验,根据推荐是否有效输出结果或者提示调整偏好信息,最后完成推荐列表的展示,旅游景点推荐流程图如图4-3所示
图4-3旅游景点推荐流程图
4.4.2 旅游路线规划流程设计
本流程根据用户出行需求产生可执行路线方案。系统汇总出行城市和天数预算等信息之后判断需求是否完整,完整就生成路线草案,不完整就给出默认方案;接着对路线可行性进行校验,根据是否可行输出可用路线或者提示调整约束条件,最后得到路线结果,旅游路线规划流程图如图4-4所示
图4-4旅游路线规划流程图
4.4.3 旅游社区发帖交流流程设计
本流程用以支持用户在旅游社区发布内容并实现传播。用户提交帖子后系统会判断内容是否合规,合则进入发布环节,不合则引导修改;发布后系统会判断是否有敏感信息,正常则入库、展示,异常则转人工复核、结束处理,保证社区内容质量,旅游社区发帖交流流程图如图4-5所示
图4-5旅游社区发帖交流流程图
4.4.4 评论管理流程设计
本流程为评论提交及质量控制。系统接收到评论内容之后判断信息是否完整,如果信息完整就进入发布环节,如果不完整则提示用户补充之后再提交;发布之后系统会对评论进行敏感检测,正常的评论直接展示并结束,异常的评论进入待处理状态并结束,以此来实现评论的有效沉淀和风险控制,评论管理流程图如图4-6所示

图4-6评论管理流程图
4.4.5 旅游景点管理流程设计
本流程是管理员对景点数据进行新增、发布的控制。管理员提交景点信息之后,系统会判断数据是否完整,如果数据完整就进入审核环节,如果不完整就退回完善;审核阶段判断是否通过,通过则发布入库并结束,未通过则返回修改后再次进入发布链路,保证景点信息的准确性、可用性,旅游景点管理流程图如图4-7所示

图4-7旅游景点管理流程图
4.5 数据库设计
4.5.1 概念模型设计
概念模型是把现实世界抽象成信息世界的模型,即识别出系统中包含的实体、属性、联系等,把旅游内容发布、互动交流、用户行为等主要业务对象结构化地表示出来,用E-R图统一地展示数据间的约束关系。用户账户属于业务参与主体,它围绕论坛、文章这两种内容载体展开评论等过程数据,并且用户还能创建普通用户扩展信息并发布旅游景点、旅游路线等业务数据,从而形成一个由内容生产到互动反馈的闭环。概念模型设计阶段,以数据库表结构为基础来提取实体及关键属性,整理出实体之间的主从、关联关系,保证数据的一致性以及可扩展性,同时使用统一的主键命名和属性筛选来提高模型的可实现性和可维护性。该模型可以为后面逻辑结构的设计、查询优化和功能实现提供依据,也与文献18的方法一致。全局的E-R模型如图4-8所示。
图4-8全局ER图
根据系统分析可知,系统主要的实体有文章、评论、论坛、旅游景点、旅游路线、用户账户、普通用户,各个实体具体的属性如图所示。
(1)文章实体主要包括文章id、标题、正文、文章描述等。文章实体属性如图4-9所示。
图4-9文章实体属性图
(2)评论实体主要包括评论id、内容、创建时间、评论人ID等。评论实体属性如图4-10所示。
图4-10评论实体属性图
(3)论坛实体主要包括论坛id、标题、正文、论坛分类等。论坛实体属性如图4-11所示。
图4-11论坛实体属性图
(4)旅游景点实体主要包括旅游景点id、景点名称、所在城市、景点类型等。旅游景点实体属性如图4-12所示。
图4-12旅游景点实体属性图
(5)旅游路线实体主要包括旅游路线id、路线标题、路线起点、路线终点等。旅游路线实体属性如图4-13所示。
图4-13旅游路线实体属性图
(6)用户账户实体主要包括用户账户id、用户名、密码、账户状态等。用户账户实体属性如图4-14所示。
图4-14用户账户实体属性图
(7)普通用户实体主要包括普通用户id、用户ID、用户姓名、审核状态等。普通用户实体属性如图4-15所示。
图4-15普通用户实体属性图
4.5.2 数据库逻辑设计
数据库逻辑设计在概念模型的基础上,把文章、评论、论坛、旅游景点、旅游路线、用户账户、普通用户等实体映射成关系表结构,确定各个表的主键和核心外键,建立用户与内容、内容与评论之间的关联约束,保证数据的一致性以及查询的效率。字段选取以核心业务为优先原则,保留关键的描述字段、状态类型字段和必要的时间字段,考虑数据可扩展性以及存储冗余控制,在此基础上统一字段命名和类型长度的标准,便于后续索引的设计以及接口的对接,和文献19中提出的逻辑结构化方法一致。
(1)文章表主要是用来存储旅游文章内容与发布信息。主要包括文章id、标题、正文、创建时间、文章分类、来源地址等字段。文章表如表4-1所示。
表4-1文章表
| 序号 | 字段名 | 类型 | 长度 | 备注 |
|---|---|---|---|---|
| 1 | article_id | bigint | 20 | 文章id |
| 2 | title | varchar | 100 | 标题 |
| 3 | content | varchar | 500 | 正文 |
| 4 | create_time | datetime | - | 创建时间 |
| 5 | article_desc | varchar | 200 | 文章描述 |
| 6 | cover_img | varchar | 200 | 封面图 |
| 7 | like_count | int | 11 | 点赞数 |
| 8 | click_count | int | 11 | 点击数 |
| 9 | source | varchar | 100 | 来源 |
| 10 | tags | varchar | 255 | 标签 |
| 11 | category | varchar | 100 | 文章分类 |
| 12 | source_url | varchar | 200 | 来源地址 |
(2)评论表主要是用来记录用户在论坛、文章、旅游景点与旅游路线下的评论与回复信息。主要包括评论id、内容、创建时间、回复评论ID、来源字段、评论人ID等字段。评论表如表4-2所示。
表4-2评论表
| 序号 | 字段名 | 类型 | 长度 | 备注 |
|---|---|---|---|---|
| 1 | comment_id | bigint | 20 | 评论id |
| 2 | avatar_url | varchar | 200 | 头像地址 |
| 3 | content | varchar | 500 | 内容 |
| 4 | create_time | datetime | - | 创建时间 |
| 5 | is_hidden | varchar | 10 | 是否隐藏 |
| 6 | nickname | varchar | 50 | 昵称 |
| 7 | reply_comment_id | bigint | 20 | 回复评论ID |
| 8 | source_field | varchar | 50 | 来源字段 |
| 9 | source_id | bigint | 20 | 来源ID |
| 10 | source_table | varchar | 50 | 来源表 |
| 11 | is_top | varchar | 10 | 是否置顶 |
| 12 | commenter_id | bigint | 20 | 评论人ID |
(3)论坛表主要是用来存储用户发布的论坛帖子及其展示信息。主要包括论坛id、标题、正文、创建时间、论坛分类、用户ID等字段。论坛表如表4-3所示。
表4-3论坛表
| 序号 | 字段名 | 类型 | 长度 | 备注 |
|---|---|---|---|---|
| 1 | forum_id | bigint | 20 | 论坛id |
| 2 | title | varchar | 100 | 标题 |
| 3 | content | varchar | 500 | 正文 |
| 4 | create_time | datetime | - | 创建时间 |
| 5 | forum_desc | varchar | 200 | 描述 |
| 6 | cover_img | varchar | 200 | 封面图 |
| 7 | visit_count | int | 11 | 访问数 |
| 8 | like_count | int | 11 | 点赞数 |
| 9 | is_top | varchar | 10 | 是否置顶 |
| 10 | tags | varchar | 255 | 标签 |
| 11 | category | varchar | 100 | 论坛分类 |
| 12 | user_id | bigint | 20 | 用户ID |
(4)旅游景点表主要是用来管理用户创建的旅游景点信息及其交互数据。主要包括旅游景点id、景点名称、所在城市、景点类型、景点地址、创建用户ID等字段。旅游景点表如表4-4所示。
表4-4旅游景点表
| 序号 | 字段名 | 类型 | 长度 | 备注 |
|---|---|---|---|---|
| 1 | scenic_spot_id | bigint | 20 | 旅游景点id |
| 2 | scenic_name | varchar | 100 | 景点名称 |
| 3 | city | varchar | 50 | 所在城市 |
| 4 | scenic_type | varchar | 50 | 景点类型 |
| 5 | scenic_address | varchar | 200 | 景点地址 |
| 6 | ticket_price | double | - | 景点票价 |
| 7 | open_time | varchar | 100 | 开放时间 |
| 8 | scenic_img | varchar | 200 | 景点图片 |
| 9 | create_user_id | bigint | 20 | 创建用户ID |
| 10 | create_time | datetime | - | 创建时间 |
| 11 | like_count | int | 11 | 点赞数 |
| 12 | update_time | datetime | - | 更新时间 |
(5)旅游路线表主要是用来存储用户发布的旅游路线信息及其互动指标。主要包括旅游路线id、路线标题、路线起点、路线终点、路线介绍、创建用户ID等字段。旅游路线表如表4-5所示。
表4-5旅游路线表
| 序号 | 字段名 | 类型 | 长度 | 备注 |
|---|---|---|---|---|
| 1 | travel_route_id | bigint | 20 | 旅游路线id |
| 2 | route_title | varchar | 100 | 路线标题 |
| 3 | route_start | varchar | 100 | 路线起点 |
| 4 | route_end | varchar | 100 | 路线终点 |
| 5 | route_intro | varchar | 255 | 路线介绍 |
| 6 | route_length | varchar | 50 | 路线长度 |
| 7 | route_img | varchar | 200 | 路线图片 |
| 8 | pass_scenic | varchar | 255 | 经过景点 |
| 9 | create_user_id | bigint | 20 | 创建用户ID |
| 10 | create_time | datetime | - | 创建时间 |
| 11 | like_count | int | 11 | 点赞数 |
| 12 | update_time | datetime | - | 更新时间 |
(6)用户账户表主要是用来存储系统用户登录账户与认证状态等信息。主要包括用户账户id、用户名、密码、邮箱、手机号码、账户状态等字段。用户账户表如表4-6所示。
表4-6用户账户表
| 序号 | 字段名 | 类型 | 长度 | 备注 |
|---|---|---|---|---|
| 1 | user_account_id | bigint | 20 | 用户账户id |
| 2 | username | varchar | 50 | 用户名 |
| 3 | password | varchar | 50 | 密码 |
| 4 | nickname | varchar | 50 | 昵称 |
| 5 | avatar_url | varchar | 200 | 头像地址 |
| 6 | varchar | 100 | 邮箱 | |
| 7 | email_verified | varchar | 10 | 邮箱认证 |
| 8 | phone | varchar | 20 | 手机号码 |
| 9 | phone_verified | varchar | 10 | 手机认证 |
| 10 | account_status | varchar | 20 | 账户状态 |
| 11 | user_group | varchar | 50 | 所在用户组 |
| 12 | create_time | datetime | - | 创建时间 |
(7)普通用户表主要是用来存储普通用户扩展信息及其审核状态。主要包括普通用户id、用户ID、用户姓名、用户手机、审核状态、创建时间等字段。普通用户表如表4-7所示。
表4-7普通用户表
| 序号 | 字段名 | 类型 | 长度 | 备注 |
|---|---|---|---|---|
| 1 | normal_user_id | bigint | 20 | 普通用户id |
| 2 | user_id | bigint | 20 | 用户ID |
| 3 | user_name | varchar | 50 | 用户姓名 |
| 4 | user_phone | varchar | 20 | 用户手机 |
| 5 | audit_status | varchar | 20 | 审核状态 |
| 6 | create_user_id | bigint | 20 | 创建用户ID |
| 7 | create_time | datetime | - | 创建时间 |
| 8 | update_time | datetime | - | 更新时间 |
第5章 系统实现
5.1 普通用户功能实现
5.1.1 旅游景点推荐功能实现
旅游景点推荐功能就是对旅行偏好数据进行分析处理后,给用户发出个性化的推荐结果。普通用户可以查看系统推送的旅游景点目录,从而达到有针对性地浏览资源的目的。本功能把用户的各项行为数据做综合处理并实时更新。图5-1为旅游景点推荐界面。
图5-1旅游景点推荐界面
5.1.2 浏览旅游景点功能实现
浏览旅游景点功能主要为用户提供景点资源的信息展示和浏览操作,普通用户可以获取各种景点的相关信息以及资料。该功能可以实现访客对于景点信息的查询,也可以完成展示逻辑的处理。系统给每次访问提供数据流转以及页面内容的同步。游览旅游景点界面如图5-2所示。
图5-2浏览旅游景点界面
5.1.3 旅游路线功能实现
旅游路线功能主要是对自定义线路信息进行展示和选择,普通用户可以根据自己的需求选择合适的旅行路线。实现了多条旅游路径逻辑的管理与切换。系统根据用户的选择来更新历史记录以及状态信息。旅游路线界面如图5-3所示。
图5-3旅游路线界面
旅游社区功能实现
旅游社区功能主要是用户之间发布主题内容、互动作业,普通用户可以参与社区话题讨论并分享经验。在该模块中,可实现动态信息收集与社区内容聚合。系统同步用户发布的内容以及评论数据。旅游社区界面如图5-4所示。
图5-4旅游社区界面
5.1.4 评论管理功能实现
评论管理功能就是对用户发表的评论内容进行收集、展示、整合。当前功能实现对不同旅游资源下用户评论的统一管理。普通用户可以查看和发表所有的评论反馈。系统按照所设策略对评论内容进行有效关联并实时刷新。评论管理界面如图5-5所示。
图5-5评论管理界面
5.2 管理员功能实现
5.2.1 后台首页功能实现
后台首页功能主要是对管理模块入口以及状态总览进行可视化展示,管理员可以浏览系统核心数据摘要和管理入口。在该功能里可以完成高频数据的汇总并实时同步。系统会自动更新数据面板和模块导航的内容。后台首页界面如下图5-6所示。
图5-6后台首页界面
5.2.2 景点类型管理功能实现
景点类型管理功能主要对旅游景点的分类进行维护、修改和调整。管理员可以管理已经存在的类别,新增或者修改类型结构。该模块实现类型信息的存储、修改以及逻辑关联。系统自动对类型类别数据实现一致性保障。景点类型管理界面如图5-7所示。
图5-7景点类型管理界面
5.2.3 旅游景点管理功能实现
旅游景点管理功能主要就是集中维护景点信息并加以控制。管理员能够编辑、删除或调整多项景点信息数据。系统对管理操作实现数据结构更新和信息一致化处理。该模块完成景点状态的改变以及持久化存储。旅游景点管理界面如图5-8所示。
图5-8旅游景点管理界面
5.2.4 旅游路线管理功能实现
旅游路线管理功能就是对旅游线路资源进行集中管理、合理调配。管理员可以对旅行路线进行添加、修改、删除等操作,从而达到对路线的层次及细节进行管理的目的。本模块把线路内容逻辑分块并实现数据同步。系统对于路线信息的完整性、可用性做定期检查。旅游路线管理界面图5-9。
图5-9旅游路线管理界面
5.2.5 交流管理功能实现
交流管理功能就是对旅游社区的内容进行集中整合和监管。管理员能够审核、调整或清理不符合规范的交流内容。此功能可以对动态、评论等社交信息进行集中管理以及管控。系统对交流内容实行统一归档、权限处理。交流管理界面如图5-10所示。
图5-10交流管理界面
5.2.6 权限管理功能实现
权限管理功能主要是对系统各个角色的操作权限进行划分与维护。管理员可以设置或者修改角色的权限范围来达到多级访问的目的。系统可以进行权限参数的调整以及角色信息的联动处理。该模块对权限分配数据实现实时存储与更新。权限管理界面如下图5-11所示。
图5-11权限管理界面
第6章 系统测试
6.1 系统测试目的
系统测试是对个性化旅游推荐系统的设计实现和业务逻辑进行全方位的检验,考察各个功能模块在各种情况下是否具有较好的鲁棒性、稳定性,保证整个链条的数据一致性以及交互的准确性,从而减少系统上线时出现的风险20。以较高的模块解耦度、平台稳定为目标,对功能闭环做有效的校验,保证系统在复杂环境下可以正常工作,各个模块之间的协作关系符合设计预期。
6.2 系统测试的原则与方法
系统测试遵照全面性、独立性准则,就全部重要业务流程及边界情况展开有效的检验,包含核心功能和异常处理路径。使用黑盒测试和白盒测试相结合的方式对用户端和管理端进行系统级的验证,用不同的输入条件和预期的操作来检验系统的功能是否完整、输出的数据是否正确。各项测试活动重视实用性,从用户体验、安全性、性能表现等各方面对系统进行全面的评价,保证测试结论的科学性、可靠性。
6.3 测试用例
6.3.1 旅游景点推荐功能
旅游景点推荐功能按照用户的兴趣爱好来产生个性化的推荐列表,旅游景点推荐功能测试结果如表6-1所示。
表6-1旅游景点推荐功能测试表
| 测试内容 | 测试步骤 | 预期结果 | 实际结果 |
|---|---|---|---|
| 推荐列表展示 | 登录用户,查看景点推荐页面 | 推荐景点准确展示 | 符合预期 |
| 数据更新及时性 | 用户修改兴趣标签后刷新推荐 | 推荐内容发生相应变化 | 符合预期 |
| 无偏好行为处理 | 无设置标签时访问推荐 | 展示通用热门景点 | 符合预期 |
6.3.2 旅游路线功能
旅游路线功能给用户预定或者自定义组合路线,旅游路线功能测试结果如表6-2所示。
表6-2旅游路线功能测试表
| 测试内容 | 测试步骤 | 预期结果 | 实际结果 |
|---|---|---|---|
| 路线列表展示 | 访问旅游路线页面 | 展示所有可选路线信息 | 符合预期 |
| 详情信息一致性 | 查看特定路线详情 | 展示路线详细内容 | 符合预期 |
| 路线组合生成 | 用户自定义添加景点生成路线 | 正确生成新路线 | 符合预期 |
6.3.3 旅游社区功能
旅游社区功能实现用户的社区交流、发布动态等,在表6-3中给出了详细的测试用例。
表6-3旅游社区功能测试表
| 测试内容 | 测试步骤 | 预期结果 | 实际结果 |
|---|---|---|---|
| 发布动态 | 用户发布新的社区动态 | 动态内容及时展示 | 符合预期 |
| 浏览社区内容 | 用户访问社区页面 | 可浏览所有社区内容 | 符合预期 |
| 内容审核机制 | 发布违禁信息内容 | 内容未显示 | 符合预期 |
6.3.4 评论管理功能
评论管理功能可以供用户对景点以及其它内容发表评论,评论管理功能测试见表6-4。
表6-4评论管理功能测试表
| 测试内容 | 测试步骤 | 预期结果 | 实际结果 |
|---|---|---|---|
| 添加评论 | 用户对景点进行评价 | 新评论被记录并展示 | 符合预期 |
| 评论删除 | 用户删除本人评论 | 评论内容被清除 | 符合预期 |
| 评论审核 | 用户评论包含敏感词 | 评论上传被拦截 | 符合预期 |
6.3.5 景点管理功能
景点管理功能主要是对后台的景点数据进行增删改查,完成后台的数据维护,景点管理功能测试结果见表6-5。
表6-5景点管理功能测试表
| 测试内容 | 测试步骤 | 预期结果 | 实际结果 |
|---|---|---|---|
| 景点信息添加 | 管理员新增景点信息 | 新景点可在前台展示 | 符合预期 |
| 景点信息编辑 | 管理员修改景点数据 | 信息被更新且准确反映 | 符合预期 |
| 景点删除 | 管理员删除景点记录 | 景点下线不再展示 | 符合预期 |
6.4 测试结果分析
经过对系统的各个模块进行详细的测试之后发现,各个模块具有较好的稳定性能,各个模块的业务逻辑与设计需求基本一致,功能链路实现了闭环。用户端、管理端的各项功能都达到了预期的目的,数据交互和更新传递准确,界面响应流畅。测试过程中没有出现系统性错误,基本符合系统上线运行的各项要求,给系统优化、升级提供了一定的参考依据。