如何使用ssm实现旅游信息管理系统
@TOC
10905ssm旅游信息管理系统
第1章 概述
1.1 研究背景
随着现代网络技术的发展, 目前该系统处于网络快速发展的阶段, 因此对其要求也更为严格。应从该系统的功能特点及会员实际需求出发制定开发策略, 借助现代网络技术和通讯技术的深度融合将给用户提供便利。便于管理员通过网络平台进行系统管理, 同时还可以通过这些技术和手段实现对旅游信息管理系统的发布与维护等操作。如今互联网发展速度极快, 与此同时国内电子商务体系也在蓬勃发展。这种发展模式深刻影响着长期依赖互联网的社会习惯, 在这种环境下开发一套适合每位会员操作且简单易用、功能完善的旅游信息管理系统前景广阔。
作为一个典型的管理平台,在其发展过程中涉及了从数据库设计到功能实现等多个环节,并结合用户的实际操作需求形成了一个完整的旅游信息管理系统
1.2 研究目的
为了更好地解决这一旅游信息管理系统的问题,并且能够在其中有效维护出现的各种问题;同时也能让会员正确地了解本系统的运作机制。从而设计本系统。
本系统主要基于管理人员需求进行功能设计,并优化会员在线查询与管理旅游信息系统服务;其后台管理模块涵盖了管理员数据管理和系统功能模块等。从该系统的操作流程来看,支持高效的用户操作流程实现包括添加、修改、查询和删除功能,并能实现一定程度上的自动化操作流程设计以提升整体运营效率水平。最终,我们期望通过建设旅游信息系统平台达到提升用户体验及运营效率的目标
提高旅游信息管理系统的管理效率,实现管理上的井井有条。
促进会员利用计算机平台系统定期更新或自动同步旅游信息管理系统中的各项数据,并优化其管理流程以确保数据的准确性和完整性。
解决传统旅游信息管理系统存在的弊端。
1.3 研究内容
目前所使用的主要软件开发工作主要基于Java语言,在旅游信息管理系统开发中具有重要意义。具体而言,该系统的功能目标是:
该系统所处的网络环境主要是旨在帮助用户掌握多种业务需求及流程,并明确各角色的功能问题;同时对每个业务和技术进行了深入了解。
(2)对于这系统的整个程序应用做出高效的升级、扩展和维护。
(3)具备系统规划的整体架构能力,在充分满足会员服务需求的前提下实现相应的功能模块配置,并通过优化设计确保各层级功能模块间的协调运作以完成整体功能目标;同时保证该程序架构具备高度的独立性,并且各级模块间具有紧密的关联性。
(4)在整个系统框架的设计过程中, 我们需要深入研究和构建一个灵活且具备扩展性的系统架构, 同时不断提升系统的安全性, 并充分满足会员的实际需求。
从该旅游信息管理系统来看,则主要针对会员需求展开设计,并在此基础上深入研究相关问题。就本系统而言,则需要对旅游信息管理系统的背景、选题意义、市场需求以及数据库资源分析等方面进行较为全面的研究,并具体介绍其功能模块以及所采用的关键技术等开展开发与阐述工作。最后则需对系统运行情况进行测试结果分析与总结
``第二章 开发技术介绍
2.1 Java技术
Java是一种简单易学且适用的服务器语言。开发过程中只需要少量的知识就能建立一个真正的交互站点。对于这个教程来说无需深入掌握这种语言。只要能快速融入Web站点即可,并且还可以进行一些基础编程。
在现代社会中广泛使用的是基于Java语言的动态网页生成技术。这种技术之所以被广泛采用的主要原因在于其编写脚本相对简单易懂以及具备一定的安全性和跨平台特性功能。同时该技术能够直接支持分布式网络应用并带来更高的效率水平。其特点使得开发过程更加便捷并且能够通过灵活组合实现多种功能满足不同需求的特点使其成为编程领域中的重要工具之一。特别是在软件开发过程中这种可扩展性和灵活性使其展现出独特的优势进而成为当前主流的技术选择之一
Java编程语言以其丰富而多样的一系列特点著称:它具备跨平台独立运行的能力并采用面向对象的设计理念;其安全性机制得到了充分实现能够处理多种不同的任务类型并且提供了丰富的编程范式可供选择。相较于现有的低级编程语言和高级编程语言体系而言,在性能与应用潜力方面存在显著的优势。此外该技术在个人计算机设备大数据分析以及大型游戏开发等多个重要领域展现出广阔的前景
Java语言不仅具备面向对象的核心特点,并且整体上较为简单易学。换言之,在计算机科学中,“对象”本质上指的是任何一种实体或现象;特别地,在我们的日常生活中——比如人类本身——也属于这一范畴。采用面向过程编程的核心理念来解析和处理现实世界中的各种问题时,则能够显著提升系统设计的有效性和实用性。
2.2 Mysql数据库
MySQL是一个支持多用户与多线程的服务器系统,在其后端开发中通常采用基于SQL的标准数据库体系。这种关系型数据库以MySQL为核心构建了一个可靠且安全稳定的管理平台,并且具备高效的查询处理能力。它不仅提供强大的功能特性还能确保操作简便和管理便捷的特点,在数据存储与检索方面表现出色,并且能够快速响应查询需求。此外MySQL还具备良好的扩展性并能够适应多种操作系统环境的应用需求;其完全网络化的设计使得数据在不同节点之间传输更加顺畅和高效;同时MySQL以其优秀的稳定性成为Web站点或其他类型应用程序后端数据库的理想选择,在实际应用中得到了广泛认可和发展
MySQL 数据库具有诸多优势。例如其操作简便易懂 功能强大且信息存储容量高 这种特性使得它受到广泛的应用 在许多设计中都会采用 MySQL 作为基础数据库 MySQL 通常用于数据编码与查询 在编写简单的代码即可实现对常规数据的查询与组合 这种高效便捷的特点使得 MySQL 成为数据分析与处理的重要工具 数据库实际上相当于计算机中的存储容器 它将数据按固定格式组织存储 以便于管理和检索
为了确保数据库系统正常运行 需要相关人员进行必要的管理 工作 包括建立数据表 管理表中的数据以及更新现有数据 数据表的建立允许我们对表中的元数据进行调整 对现有数据进行重新组合甚至重构 从而保障系统的稳定性和安全性
2.3 B/S结构
BROWSER/SERVER程序架构方法配置好的浏览器应用实现了在线访问。相较于C/S架构结构不需要额外安装即可直接使用。BROWSER/SERVER工作原理是远端服务器上部署一个服务供所有接入互联网的设备调用。该开发模式为会员提供了极大便利,在线或离线均可方便地调用开发好的系统。
在B/S架构下,会员可以在方便上网的地方使用系统提供的各种功能,并不受地域或时间限制。B/S架构将程序完整部署于计算机网络的服务器端,在通过互联网为用户提供全面的网络服务。在三层体系架构的B/S系统中,会员通过浏览器向服务器提交多个请求以获取服务资源,并依赖于Web服务器的强大功能来优化业务流程。Web服务器不仅能够管理数据库、运行应用程序以及处理事务处理任务等核心业务操作,并且能够自动处理大量日常事务工作而无需直接操作客户端设备
系统主要包含三个部分:数据层、控制逻辑层和视图层。该系统利用视图层将控制逻辑与数据 layer 连接起来以实现信息传递各组件之间各自独立运行以确保系统的稳定便于管理确保系统的安全性各组件之间通过互相调用实现高效的协同工作
2.4 SSM框架
如今备受推崇的SSM组合架构由Spring、SpringMVC与MyBatis组成,并被广泛应用于Web开发领域。该架构体现了团队协作的优势:各成员分工明确协同运作使整体系统性能得以显著提升。在Web项目中使用的数据源通常较为简单;其中的核心组件包括一个轻量级反转控制框架IoC容器与一个面向对象编程(AOP)技术具有较高的抽象能力;而另一个关键组件则是分类处理功能模块的设计理念;这种设计使得业务逻辑处理单元得以独立实现从而提升了系统的灵活性与可维护性;该架构还支持普通SQL查询的同时允许对存储过程进行高级映射以优化数据处理;通过采用该架构企业能够有效降低开发成本并提高系统性能从而解决了大型Java Web应用在开发成本高昂且在维护与功能扩展方面存在诸多挑战的问题
第三章 系统分析
整个系统的功能模块主要承担各项目元组的组合、分解以及替代单元,并据此形成一套简洁明了的设计原则。系统总体架构则以满足会员需求为核心展开。为了更有效地满足会员需求,一方面需要围绕旅游信息管理系统的建设进行功能规划;另一方面则需确保内部数据流与该系统的功能保持高度一致性。因此,在具体实施过程中应尽量避免同一代码块在不同组件间重复调用以及各类子系统间的过度依赖。
3.1 可行性分析
可行性分析主要是针对本项目开发是否有意义及其实质价值而进行的一项全面研究,在这一过程中我们发现本系统存在一定的局限性。就例如本次旅游信息管理系统的设计与开发工作是特别为会员群体服务的,在这一过程中我们主要针对的是那些希望便捷地发布及管理旅游信息的会员群体。通过这样的设计与实施工作我们最终能够实现为会员提供一套操作简便的信息管理系统。为了评估该系统的可行性和有效性我们需要计算其建设成本与其带来的经济效益之间的关系。只有当后者显著超过前者时才能认为这项开发工作具有较高的商业价值并值得投入资源进行推进。因此开展可行性研究与分析工作是确保本系统成功研发的重要前提条件之一。从整个项目文件来看需要从以下几个方面展开分析:第一部分我们将重点考察项目的经济可行性第二部分则是技术可行性第三部分则是社会可行性这些内容构成了项目成功研发的关键要素
技术可行性分析:就技术层面而言,在现有掌握的技术基础之上,我们是否能够利用现有的技术和能力来实现最初设定的目标?
经济上的可行性:此次系统开发及设计过程中投入的资金其规模是否超过了对其价值影响程度?
操作便捷性:系统在会员使用过程中是否便捷且易于操作,并能否满足大多数会员的操作需求
3.1.1 技术可行性
对开发该系统的相关技术开展可行性分析的主要目的是对其性能进行全面评估。就旅游信息管理系统而言,在任何地点都可以方便地进行操作与维护。基于我们现有的程序开发能力和语言基础介绍以上的技术来构建该系统是较为合理的选择。同时,在选择数据库时必须确保该系统的数据完整性和安全性得到充分保障。
3.1.2 经济可行性
经济可行性主要在于判断该系统是否存在价值以及其潜在的发展前景。其中最基础的是初期阶段的成本控制;整个项目的研发工作完全由个人独立承担,并在此过程中不仅积累了一定的技术经验;个人的专业视野也得到了显著提升。若项目的投入产出比低于预期水平;导致投资成本与预期收益之间存在显著差异,则该系统在整个生命周期中的价值难以实现。经过全面的成本效益分析后发现项目的整体收益超过了预期成本;因此可以认为该系统具备较高的商业潜力与技术可行性。
3.1.3 操作可行性
旅游信息管理系统的核心功能模块包括登录界面的设计与实现。该系统采用B/S架构、Java技术和MySQL数据库等核心组件进行开发设计,并通过智能化算法优化用户体验。本次系统采用B/S架构、Java技术和MySQL数据库等核心组件进行开发设计,并通过智能化算法优化用户体验。因此我们设计的人机交互界面充分考虑了用户体验需求
经过以上的叙述,所以开发此系统在经济上、技术上是满足开发条件的。
3.2 系统性能分析
为了实现对前后台处理的结构清晰管理要求通常会选择B/S架构来进行系统的构建这种设计模式不仅有助于提高用户体验还能确保后台服务能够高效运行
在系统开发与设计方面我们应遵循普遍适用的技术要求这将显著提升系统的适用性和实用性对于一个系统而言一个良好的软件架构至关重要这样的架构将显著提升系统的稳定性和效率
在系统界面上也需要开发一个简便易用且快速操作的登录界面以便于优化会员的操作性和适用性
在系统模块设计当中,我们要对各个模块进行优化整合与规划,通过这样的方式能够有效提升系统的使用性
在软件设计程序中进行系统的全面测评与测试工作是十分重要的。因此,在软件开发过程中我们需要特别注重确保系统运行效率高、响应速度快等关键性能指标达到最佳状态。
在分析该系统时我们应着重考察新开发的系统架构它具备哪些创新点与优势随后我们将致力于优化该系统使其更好地适应会员需求
3.3 系统功能需求分析
对于任何一个新建立的网站而言,在开发过程中必须进行系统的需求分析。这一过程的质量高低将直接影响该网站的意义所在。众所周知,“一个好开头是成功的一半”,就拿开发这个旅游信息管理系统来说吧,在前期阶段进行任务分析显得尤为重要。因此进行任务分析将直接决定了该系统的开展以及设计。这样一来就可以确保会员使用满意度得到保障了。
任务的核心要素它能够起到关键作用于这个系统开发过程中的一个重要环节因此在这一阶段的质量就显得至关重要因为我们在系统的实际应用过程中可能会遇到各种潜在的问题所以我们必须重视对系统的全面分析因为它能够直接影响到系统的功能与需求的实现
本课题要求开发并实现一套完整的旅游信息管理系统。该系统主要包含以下功能:管理员端负责系统管理;首页提供便捷服务入口;个人中心为用户管理个人信息;会员模块支持会员相关操作;景点信息管理模块提供景点信息查询与维护;酒店信息管理模块集中酒店资源信息;公告信息管理部分用于信息发布与通知;留言板模块设立用户反馈渠道;购物车功能方便用户商品选购与收藏;后台管理系统负责系统后台运行与维护等功能。
(1)管理员用例需求如图3-1所示:

图3-1管理员用例需求图
- 会员用例需求如图3-2所示:

图3-2会员用例图
- 前台首页用例需求如图3-3所示:

图3-3前台首页用例图
3.4 业务流程分析
在系统流程分析中进行调查分析时发现其扮演着十分关键的角色。由于在该系统中每一个业务流程都会与之相关联,在整个系统的规划阶段需要特别注意这一核心环节的重要性。为了确保旅游信息管理系统中各环节的信息能够正确无误地输入和输出,并且确保数据存储过程的完整性,同时结合实际操作步骤绘制出了详细的过程图示。如图3-4所示:

图3-4系统开发流程图
3.4.1登录流程
为了确保系统的安全性, 会员欲进入旅游信息管理系统必须先完成相应的登录流程, 如图3-5所示

图3-5 登录流程图
``第四章 系统设计
4.1 系统的功能结构图
通过系统需求分析阶段的深入研究与分析设计工作,本旅游信息管理系统旨在提供全方位的服务支持.该系统主要实现的功能包括:管理员界面;个人中心用于用户管理;首页为游客提供便捷入口;会员管理模块;景点信息管理子系统;酒店信息管理系统;公告发布与更新管理部分;留言板用于用户互动反馈;后台订单处理功能等.其功能架构图如图4-1所示

图4-1 系统功能图
4.2 系统数据库设计
``4.2.1 数据库E-R图
在该系统的相关信息中, 基于 DB 的支持, 我们可以执行数据收集 整理 更新 和 加工 等操作 在 DB 的存储能力极为强大的前提下, 它已经成为计算机系统 中不可或缺 的一部分 每个 DB 的优劣直接决定了整个系统 的质量与效能 每个系统 中都需要建立 DB, 并且它们的作用至关重要 通过先前完成 的系统分析, 我们可以规划出本系统中将使用的 主要 entities 下面将设计出这几个关键实体间的实体关系图
(1)会员信息实体E-R图如图4-2所示:

图4-2会员信息实体图
(2)景点信息实体E-R图如图4-3所示:

图4-3景点信息实体图
(3)酒店信息实体E- R图,如图4-4所示:

图4-4酒店信息实体图
4.2.2 数据表字段设计
每个数据库的使用均相互独立。当这些数据库在程序运行时,在运行时它们会在自己的协议下与客户端进行通信。系统会自动生成相应的数据连接配置。若要深入了解某一特定数据库的功能,请选择该功能模块并点击进入查看详细说明内容。点击完成按钮后会自动弹出数据源名称供后续操作选择正确的账号与密码完成登录流程。根据系统的功能设计要求以及模块划分原则旅游信息管理系统涉及多个核心的数据表结构需要逐一设计实现具体包括以下主要部分:首先是介绍各主要功能模块的设计目标其次是具体实现的技术方案最后是对整个系统的测试优化工作进行了全面规划。
表4-1 gonggaoxinxi表
| 列名 | 数据类型 | 长度 | 约束 |
|---|---|---|---|
| id | int | 11 | NOT NULL |
| username | varchar | 50 | ``default NULL |
| gonggaobianhao | varchar | 50 | ``default NULL |
| gonggaobiaoti | varchar | 50 | ``default NULL |
| xiangguantupian | varchar | 50 | ``default NULL |
| gonggaoneirong | varchar | 50 | ``default NULL |
| faburiqi | varchar | 50 | ``default NULL |
表4-2 jingdianxinxi表
| 列名 | 数据类型 | 长度 | 约束 |
|---|---|---|---|
| id | int | 11 | NOT NULL |
| addtime | varchar | 50 | default NULL |
| jingdianbianhao | varchar | 50 | default NULL |
| jingdianmingcheng | varchar | 50 | default NULL |
| jingdianxinxi | varchar | 50 | default NULL |
| jingdiantupian | varchar | 50 | default NULL |
| xianluxinxi | varchar | 50 | default NULL |
| faburiqi | varchar | 50 | default NULL |
表4-3:jiudianxinxi表
| 列名 | 数据类型 | 长度 | 约束 |
|---|---|---|---|
| id | ``int | 11 | NOT NULL |
| addtime | varchar | 50 | default NULL |
| jiudianbianhao | varchar | 50 | default NULL |
| jiudianmingcheng | varchar | 50 | default NULL |
| jiudianxinxi | varchar | 50 | default NULL |
| jiudiantupian | varchar | 50 | default NULL |
| jiudianweizhi | varchar | 50 | default NULL |
| faburiqi | varchar | 50 | default NULL |
表4-4 huiyuan表
| 列名 | 数据类型 | 长度 | 约束 |
|---|---|---|---|
| id | int | 11 | NOT NULL |
| addtime | varchar | 50 | default NULL |
| zhanghao | varchar | 50 | default NULL |
| mima | varchar | 50 | default NULL |
| xingming | varchar | 50 | default NULL |
| xingbie | varchar | 50 | default NULL |
| shenfenzhenghaoma | varchar | 50 | default NULL |
| shoujihaoma | varchar | 50 | default NULL |
| xiangpian | varchar | 50 | default NULL |
第五章 系统功能实现
5.1登录
管理员登录的过程如下:用户需要通过输入用户名、密码以及角色等必要的信息资料,在填写完整后选择"登录"按钮即可实现成功接入功能,在线访问旅游信息管理系统平台(如图5-1所示)。

图5-1管理员登录界面图
5.2管理员功能实现
5.2.1 景点信息管理
系统管理员负责完成景点信息管理模块的各项操作。该模块主要功能包括录入景区编号、景区名称以及景区详细信息,并上传景区图片;除此之外还包括线路规划与优化配置等核心功能模块;其中包含详情操作(包括内容展示和数据查询功能)、删除功能(支持删除非活跃项目)、修改功能(可实时更新项目状态)以及查看评论等功能项;系统还提供相关统计报表生成及数据备份还原等辅助功能;系统运行界面设计参考图5-2所示的效果图

图5-2景点信息管理界面图
5.2.2 酒店信息管理
管理员对酒店信息管理模块可执行查询所有详细信息项如酒店编号名称图片位置发布日期价格等数据项并提供删除编辑功能以供管理员管理维护。效果展示:如图5-3所示。

图5-3酒店信息管理界面图
5.2.3会员管理
系统管理员在会员管理系统中进行设置时,请您完成以下账号信息配置:包括但不限于账号名称的绑定与管理(ID)、密码的设置与维护(Password)、用户名的绑定与管理(Username)、性别信息的录入与更新(Sex)、身份证号码的绑定与验证(IDCard)、电话号码的绑定与变更(Phone)以及照片文件名的指定与保存(ImageFileName)。这些配置均需配合详细说明文档中的相关指引执行,请确保各项数据的一致性与完整性。会员管理效果图如图5-4所示

图5-4会员管理界面图
5.2.4 公告信息管理
在公告信息管理系统中进行编辑,在系统中对公告编号、标题、相关图片以及发布日期等信息完成详情显示、数据删除以及内容修改并查看评论功能。

图5-5公告信息管理界面图
5.2.5 留言板管理
管理员负责对留言板管理模块中的用户名、用户反馈以及系统反馈等信息进行详细信息、删除操作和修改功能的设置。如图5-6所示为留言板管理模块的界面效果图。

图5-6留言板管理界面图
5.2.6订单管理
系统管理员通过订单管理模块对各项信息进行更新:包括但不限于订单编号的调整、商品名称设置、商品图片配置以及客户下单数量的录入等基础数据的补充与修正工作;并对交易金额及积分记录展开优惠折扣方案的应用;同时完成累计交易金额及积分统计以及优惠后的总价计算工作;并根据需要对结算方式设置以及配送地址配置及关联信息调整等操作以实现功能模块间的无缝对接与数据统一。具体效果如图5-7所示

图5-7订单管理界面图
5.3前台首页功能实现
旅游信息管理系统 frontend interface 中,在 前端 首页 可以 浏览 旅行 信息 系统 的 各类 内容 包括 首页 信息 景点 介绍 酒店 服务 公告 文章 用户 评价 个人 中心 和 购物 区等 如 图5-8 所示

图5-8前台首页界面图
5.3.1登录、会员注册
完成登录和会员注册流程。会员需填入账号信息(如用户名)、口令(Password)、姓名以及身份证号码和手机号码等必要信息来完成会员注册,并在确认无误后完成登录操作。


图5-9登录、会员注册界面图
5.3.2景点信息
录入景区相关信息完成登记。具体操作包括录入景点编号及基本要素如名称描述与位置标注等其余相关信息。系统会自动匹配并生成完整的信息条目随后您可以选择将其加入购物车列表立即下单或进行收藏操作参考附图5-10

图5-10景点信息界面图
5.3.3酒店信息
位于该酒店信息页面上,请录入以下内容:填写酒店编号、详细的信息、位置地址以及发布日期和价格等详细内容,并完成加入购物车列表或直接下单购买的操作。如图5-11所示。

图5-11酒店信息界面图
5.3.4购物车
在购物车页面上,用户可以通过该模块完成商品的录入(包括名称、价格、数量及总价),并选择点击完成购买或删除

图5-12购物车界面图
5.4会员功能实现
5.4.1景点信息
会员访问景点信息时可浏览其编号、名称、详细资料以及相关的图片、线路规划和定价等信息。其中景点信息的图形展示图如图5-13所示。

图5-13景点信息界面图
5.4.2我的收藏管理
用户在我的收藏管理模块中执行访问收藏名称和图片等具体操作。我的收藏管理效果图如图5-14所示。

图5-14我的收藏管理界面图
DiscussgonggaoxinxiController.java
package com.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.DiscussgonggaoxinxiEntity;
import com.entity.view.DiscussgonggaoxinxiView;
import com.service.DiscussgonggaoxinxiService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
/** * 公告信息评论表
* 后端接口
* @author
* @email
* @date 2021-03-03 10:34:37
*/
@RestController
@RequestMapping("/discussgonggaoxinxi")
public class DiscussgonggaoxinxiController {
@Autowired
private DiscussgonggaoxinxiService discussgonggaoxinxiService;
/** * 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,DiscussgonggaoxinxiEntity discussgonggaoxinxi, HttpServletRequest request){
EntityWrapper<DiscussgonggaoxinxiEntity> ew = new EntityWrapper<DiscussgonggaoxinxiEntity>();
PageUtils page = discussgonggaoxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, discussgonggaoxinxi), params), params));
return R.ok().put("data", page);
}
/** * 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,DiscussgonggaoxinxiEntity discussgonggaoxinxi, HttpServletRequest request){
EntityWrapper<DiscussgonggaoxinxiEntity> ew = new EntityWrapper<DiscussgonggaoxinxiEntity>();
PageUtils page = discussgonggaoxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, discussgonggaoxinxi), params), params));
return R.ok().put("data", page);
}
/** * 列表
*/
@RequestMapping("/lists")
public R list( DiscussgonggaoxinxiEntity discussgonggaoxinxi){
EntityWrapper<DiscussgonggaoxinxiEntity> ew = new EntityWrapper<DiscussgonggaoxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( discussgonggaoxinxi, "discussgonggaoxinxi"));
return R.ok().put("data", discussgonggaoxinxiService.selectListView(ew));
}
/** * 查询
*/
@RequestMapping("/query")
public R query(DiscussgonggaoxinxiEntity discussgonggaoxinxi){
EntityWrapper< DiscussgonggaoxinxiEntity> ew = new EntityWrapper< DiscussgonggaoxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( discussgonggaoxinxi, "discussgonggaoxinxi"));
DiscussgonggaoxinxiView discussgonggaoxinxiView = discussgonggaoxinxiService.selectView(ew);
return R.ok("查询公告信息评论表成功").put("data", discussgonggaoxinxiView);
}
/** * 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
DiscussgonggaoxinxiEntity discussgonggaoxinxi = discussgonggaoxinxiService.selectById(id);
return R.ok().put("data", discussgonggaoxinxi);
}
/** * 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
DiscussgonggaoxinxiEntity discussgonggaoxinxi = discussgonggaoxinxiService.selectById(id);
return R.ok().put("data", discussgonggaoxinxi);
}
/** * 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody DiscussgonggaoxinxiEntity discussgonggaoxinxi, HttpServletRequest request){
discussgonggaoxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(discussgonggaoxinxi);
discussgonggaoxinxiService.insert(discussgonggaoxinxi);
return R.ok();
}
/** * 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody DiscussgonggaoxinxiEntity discussgonggaoxinxi, HttpServletRequest request){
discussgonggaoxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(discussgonggaoxinxi);
discussgonggaoxinxiService.insert(discussgonggaoxinxi);
return R.ok();
}
/** * 修改
*/
@RequestMapping("/update")
public R update(@RequestBody DiscussgonggaoxinxiEntity discussgonggaoxinxi, HttpServletRequest request){
//ValidatorUtils.validateEntity(discussgonggaoxinxi);
discussgonggaoxinxiService.updateById(discussgonggaoxinxi);//全部更新
return R.ok();
}
/** * 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
discussgonggaoxinxiService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/** * 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<DiscussgonggaoxinxiEntity> wrapper = new EntityWrapper<DiscussgonggaoxinxiEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = discussgonggaoxinxiService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
AddressController.java
package com.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import com.utils.ValidatorUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.annotation.IgnoreAuth;
import com.entity.AddressEntity;
import com.entity.view.AddressView;
import com.service.AddressService;
import com.service.TokenService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.CommonUtil;
/** * 地址
* 后端接口
* @author
* @email
* @date 2021-03-03 10:34:37
*/
@RestController
@RequestMapping("/address")
public class AddressController {
@Autowired
private AddressService addressService;
/** * 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,AddressEntity address, HttpServletRequest request){
if(!request.getSession().getAttribute("role").toString().equals("管理员")) {
address.setUserid((Long)request.getSession().getAttribute("userId"));
}
EntityWrapper<AddressEntity> ew = new EntityWrapper<AddressEntity>();
PageUtils page = addressService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, address), params), params));
return R.ok().put("data", page);
}
/** * 前端列表
*/
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,AddressEntity address, HttpServletRequest request){
if(!request.getSession().getAttribute("role").toString().equals("管理员")) {
address.setUserid((Long)request.getSession().getAttribute("userId"));
}
EntityWrapper<AddressEntity> ew = new EntityWrapper<AddressEntity>();
PageUtils page = addressService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, address), params), params));
return R.ok().put("data", page);
}
/** * 列表
*/
@RequestMapping("/lists")
public R list( AddressEntity address){
EntityWrapper<AddressEntity> ew = new EntityWrapper<AddressEntity>();
ew.allEq(MPUtil.allEQMapPre( address, "address"));
return R.ok().put("data", addressService.selectListView(ew));
}
/** * 查询
*/
@RequestMapping("/query")
public R query(AddressEntity address){
EntityWrapper< AddressEntity> ew = new EntityWrapper< AddressEntity>();
ew.allEq(MPUtil.allEQMapPre( address, "address"));
AddressView addressView = addressService.selectView(ew);
return R.ok("查询地址成功").put("data", addressView);
}
/** * 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
AddressEntity address = addressService.selectById(id);
return R.ok().put("data", address);
}
/** * 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
AddressEntity address = addressService.selectById(id);
return R.ok().put("data", address);
}
/** * 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody AddressEntity address, HttpServletRequest request){
address.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(address);
address.setUserid((Long)request.getSession().getAttribute("userId"));
Long userId = (Long)request.getSession().getAttribute("userId");
if(address.getIsdefault().equals("是")) {
addressService.updateForSet("isdefault='否'", new EntityWrapper<AddressEntity>().eq("userid", userId));
}
address.setUserid(userId);
addressService.insert(address);
return R.ok();
}
/** * 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody AddressEntity address, HttpServletRequest request){
address.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(address);
address.setUserid((Long)request.getSession().getAttribute("userId"));
Long userId = (Long)request.getSession().getAttribute("userId");
if(address.getIsdefault().equals("是")) {
addressService.updateForSet("isdefault='否'", new EntityWrapper<AddressEntity>().eq("userid", userId));
}
address.setUserid(userId);
addressService.insert(address);
return R.ok();
}
/** * 修改
*/
@RequestMapping("/update")
public R update(@RequestBody AddressEntity address, HttpServletRequest request){
//ValidatorUtils.validateEntity(address);
if(address.getIsdefault().equals("是")) {
addressService.updateForSet("isdefault='否'", new EntityWrapper<AddressEntity>().eq("userid", request.getSession().getAttribute("userId")));
}
addressService.updateById(address);//全部更新
return R.ok();
}
/** * 获取默认地址
*/
@RequestMapping("/default")
public R defaultAddress(HttpServletRequest request){
Wrapper<AddressEntity> wrapper = new EntityWrapper<AddressEntity>().eq("isdefault", "是").eq("userid", request.getSession().getAttribute("userId"));
AddressEntity address = addressService.selectOne(wrapper);
return R.ok().put("data", address);
}
/** * 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
addressService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/** * 提醒接口
*/
@RequestMapping("/remind/{columnName}/{type}")
public R remindCount(@PathVariable("columnName") String columnName, HttpServletRequest request,
@PathVariable("type") String type,@RequestParam Map<String, Object> map) {
map.put("column", columnName);
map.put("type", type);
if(type.equals("2")) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
Date remindStartDate = null;
Date remindEndDate = null;
if(map.get("remindstart")!=null) {
Integer remindStart = Integer.parseInt(map.get("remindstart").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindStart);
remindStartDate = c.getTime();
map.put("remindstart", sdf.format(remindStartDate));
}
if(map.get("remindend")!=null) {
Integer remindEnd = Integer.parseInt(map.get("remindend").toString());
c.setTime(new Date());
c.add(Calendar.DAY_OF_MONTH,remindEnd);
remindEndDate = c.getTime();
map.put("remindend", sdf.format(remindEndDate));
}
}
Wrapper<AddressEntity> wrapper = new EntityWrapper<AddressEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
if(!request.getSession().getAttribute("role").toString().equals("管理员")) {
wrapper.eq("userid", (Long)request.getSession().getAttribute("userId"));
}
int count = addressService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
DiscussgonggaoxinxiServiceImpl.java
package com.service.impl;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.List;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.utils.PageUtils;
import com.utils.Query;
import com.dao.DiscussgonggaoxinxiDao;
import com.entity.DiscussgonggaoxinxiEntity;
import com.service.DiscussgonggaoxinxiService;
import com.entity.vo.DiscussgonggaoxinxiVO;
import com.entity.view.DiscussgonggaoxinxiView;
@Service("discussgonggaoxinxiService")
public class DiscussgonggaoxinxiServiceImpl extends ServiceImpl<DiscussgonggaoxinxiDao, DiscussgonggaoxinxiEntity> implements DiscussgonggaoxinxiService {
@Override
public PageUtils queryPage(Map<String, Object> params) {
Page<DiscussgonggaoxinxiEntity> page = this.selectPage(
new Query<DiscussgonggaoxinxiEntity>(params).getPage(),
new EntityWrapper<DiscussgonggaoxinxiEntity>()
);
return new PageUtils(page);
}
@Override
public PageUtils queryPage(Map<String, Object> params, Wrapper<DiscussgonggaoxinxiEntity> wrapper) {
Page<DiscussgonggaoxinxiView> page =new Query<DiscussgonggaoxinxiView>(params).getPage();
page.setRecords(baseMapper.selectListView(page,wrapper));
PageUtils pageUtil = new PageUtils(page);
return pageUtil;
}
@Override
public List<DiscussgonggaoxinxiVO> selectListVO(Wrapper<DiscussgonggaoxinxiEntity> wrapper) {
return baseMapper.selectListVO(wrapper);
}
@Override
public DiscussgonggaoxinxiVO selectVO(Wrapper<DiscussgonggaoxinxiEntity> wrapper) {
return baseMapper.selectVO(wrapper);
}
@Override
public List<DiscussgonggaoxinxiView> selectListView(Wrapper<DiscussgonggaoxinxiEntity> wrapper) {
return baseMapper.selectListView(wrapper);
}
@Override
public DiscussgonggaoxinxiView selectView(Wrapper<DiscussgonggaoxinxiEntity> wrapper) {
return baseMapper.selectView(wrapper);
}
}
HomeProgress.vue
<template>
<div class="home-progress">
<div class="title">月访问量</div>
<div class="tip">同上期增长</div>
<el-progress
class="progress"
:text-inside="true"
:stroke-width="24"
:percentage="20"
status="success"
></el-progress>
<div class="title">月用户量</div>
<div class="tip">同上期增长</div>
<el-progress
class="progress"
:text-inside="true"
:stroke-width="24"
:percentage="50"
status="success"
></el-progress>
<div class="title">月收入</div>
<div class="tip">同上期减少</div>
<el-progress
class="progress"
:text-inside="true"
:stroke-width="24"
:percentage="28"
status="exception"
></el-progress>
</div>
</template>
<script>
export default {};
</script>
<style lang="scss">
.home-progress {
background: #ffffff;
height: 400px;
padding: 20px;
.title {
color: #666666;
font-weight: bold;
font-size: 20px;
margin-top: 10px;
}
.tip {
color: #888888;
font-size: 16px;
margin-top: 10px;
}
.progress {
margin-top: 10px;
}
}
</style>
声明
该博客专为多样化的学术与教育领域而设立。
涵盖范围包括但不限于个人学习、技术开发以及产品设计相关的主题。
其内容主要面向深度解析与实践应用的目的。
