@TOC
ssm011线上旅行信息管理系统ssm+vue
绪论
1.1 研究背景
时代的发展,我们迎来了数字化信息时代,它正在渐渐的改变着人们的工作、学习以及娱乐方式。计算机网络,Internet扮演着越来越重要的角色,人们已经离不开网络了,大量的图片、文字、视频冲击着我们的视觉。
随着社会生产力的发展,人们的生活水平越来越高。旅游,越来越成为人们一种休闲娱乐的方式。喧嚣的都市,高强度的工作与生活,让很多人身心疲惫。而旅游,则可以调节身心、恢复疲惫和增加人们的阅历。在旅游度假区,既可以了解当地的人文情怀,又可以在碧水蓝天间忘却烦恼。所以,旅游越来越受人民的欢迎。根据联合国世界旅游组织最新发布的《世界旅游晴雨表》,2015年国际游客人数相比2014年增长了4.4%,达到11.84亿人次。随着社会和经济的发展,旅游业已成长为世界经济中发展势头最强劲和规模最大的产业之一。
因此,为了给用户提供一个便利的查看旅行信息、景点购票、酒店预订的平台,开发了本线上旅行信息管理系统。
1.2 设计原则
在开始开发项目之前,必须要先考虑项目的实用性、科学性,以及该项目是否能够真正让用户受益并尽可能的发挥项目的作用。因此,在开发前,通过以下几条原则对项目进行判断:
(1)可行性原则。项目需要保证经济可行性和技术可行性,这包括了项目在浏览端、服务端等方面上的经济和技术上是可以达成的。
(2)适应性原则。项目要保证可维护性和可扩展性,这是每个非短期项目都需要考虑的,并且不论是维护还是扩展,都必须要建立在适应用户的正常需求的基础上。
(3)安全性及保密性原则。要充分保证用户信息的安全性和保密性,不能因为开发上的疏忽,导致用户的信息泄露。
(4)系统工程原则。为了确保项目的整体性,在项目调查、项目分析、项目设计、项目开发的过程中,都需遵从项目工程的方法和步骤逐步进行。
(5)统一规划、分期实施、逐步完善原则。项目开发的过程中,要按照规划、分期实施,特别是要注意在项目开发过程中要有条理,从点到面,一步步完善,不要贪图进度,要循环渐进的对项目进行开发。
1.3 论文组织结构
本线上旅行信息管理系统在开发技术的选择上,使用JSP技术、Java编程语言开发。后台数据库使用MYSQL,存储数据。本论文的组织结构如下:
第1章绪论。阐述论文的研究背景以及设计原则。
第2章系统关键技术介绍。介绍构建线上旅行信息管理系统的相关技术。
第3章系统分析。分析线上旅行信息管理系统的需求,包括可行性分析、性能分析、功能分析以及流程分析等。
第4章系统的总体设计。根据需求分析对系统进行功能模块划分,并阐述从大模块到各个小模块的具体功能,然后依照理论知识和实践学习知识,设计数据库。
第5章系统详细设计与实现。对系统功能模块的主要功能进行界面展示。
第6章系统测试。对系统进行测试工作,发现系统bug,进行修改,确保系统正常稳定的运行。
第7章结论。总结论文的主要工作,提出进一步完善线上旅行信息管理系统的目标和明确方向。
2 系统关键技术
2.1JSP技术
JSP的全名为JAVA SERVER PAGE,是一家硅谷的公司在90年代发布的。之后,JSP被推为一种动态网页的技术标准。作为一种开发技术,它将Java的代码被其嵌入静态页面中,让网页的静态变为动态。作为一个框架,JSP在HTML网页文件插入了Java 程序片段(Scriptlet)[4],这样就可以控制数据库并且根据客户端的请求生成对应的HTML、XML及其他的网页文件给客户端。Java编程语言就是它的脚本语言,因为它的特性,我们可以建立以Java作为编程语言的安全的、能多平台执行的动态网页。
JSP是一种动态网页技术,使用java作为它的脚本语言,它为web页面的动态显示提供了更加便捷的方法,它可以减少网页的请求次数,同时可以在多平台上开发,拥有更好的兼容性[7][8]。*.jsp是JSP的文件后缀 ,它可以响应来自客户机的请求,同时动态生成HTML、XML或其他文档格式。是一种典型的Web网页技术标准[9]。它有着Java技术简单易用,以工作流为导向,安全可靠,不升级到平台,是以Java编写脚本的,可以在页面通过<% %>插入Java代码,方便使用。Web页面JSP在整个Java服务器应用程序HTTP中提供了与库单元的接口。
其特性可简述为以下:
(1)相比以前的技术,能有效的添加动态网页的内容;
(2)拥有和Java一样的在多平台被开发的优势,基本上不受环境的限制,也就是说不用因为平台环境的因素而对代码进行修改;
(3)由于是根据Java语言来作为脚本的,所以拥有它的相对易用性;
(4)它具有JavaBean和标签库的可被多次反复的利用的功能代码;
(5)被功能强且性能良好的工具所支持。
JSP以Java servlet作为技术基础,JSP和Java servlet相配合可完成大中型的Web应用程序的开发[8]。与Java一样,完全面向对象,主要面对了近年因特网发展的特点。由于其兼容性和安全可靠,企业间还可以通过它使用Java技术相互配合,实现分层开发。
2.2 JAVA技术
Java是一种非常常用的编程语言,在全球编程语言排行版上总是前三。在方兴未艾的计算机技术发展历程中,Java的身影无处不在,并且拥有旺盛的生命力[2]。Java的跨平台能力十分强大,只需一次编译,任何地方都可以运行。除此之外,它还拥有简单的语法和实用的类库,让编程人员可以尽可能将精力集中在问题的求解上,并且许多开源项目和科研成果都是采用它实现的。
在1995年这一年的5月份,著名的Sun Microsystems公司在程序开发设计上面郑重推出一种面向对象开发的程序设计语言——Java,最开始的时候Java是由詹姆斯.高斯林这位伟大的JAVA之父来进行主导[1],但是在后来由于各种原因,让甲骨文公司这个针对商业程序创建了oracle大型数据库的公司收购了Java。Java的平台总共算下来有3个,分别为javaME和javaSE以及javaEE这3个java平台。下面将对其进行分别介绍。
(1)在电脑桌面程序的开发上面需要选择JavaME,这个用得也比较多。
(2)企业也会根据工作以及业务需要开发各种软件,那么就会选用JavcEE这个支持企业版软件的开发的Java平台,JavcEE主攻运用在企业领域上面的web应用,JavcEE也在javaSE的基础上获得了比如jsp技术 ,Servlet技术等程序开发技术的支持[15]。
(3)现在生活中手机的普及化,也使得手机端这样的移动设备的软件的兴起,JavaME这个迷你版java平台就能运用于移动端的软件开发操作。
2.3 B/S结构
此次设计的网络结构模式B/S结构(Browser/Server)。B/S架构也称为B/S模式,是一种服务器以及浏览器架构模式[13]。B/S的工作模式都是先由浏览器请求,服务器再响应。B/S体系结构解决了异构系统中的连接难题,大大改善了系统的开放性,让系统的扩展和维护更加简单;同时,B/S体系结构操作也比较容易,界面全都为浏览器模式,容易分发数据的捕获程序。只要安装通用的浏览器(如WWW浏览器)就能通过Web服务器与数据库进行数据交互。此结构的好处之一在于由于它使用的统一的浏览器,使其可以在不同的地方且不需要用专门的软件进行操作,实现了不论你使用怎样的接入网的方式都可以对公共的数据进行调用和浏览。
相对于C/S模式,B/S模式是对C/S模式应用的扩展,B/S模式不用对不同的计算机安装不同应用程序,还有安全性的要求及对模式上手难度都比前者更好。B/S模式可以让客户机的压力大大减轻,工作的负荷被合理的分配了。其B/S架构图如下图所示:
图2-1 B/S模式架构图
2.4 MYSQL数据库
MySQL是典型的关系数据库系统,拥有开源免费、稳定、高效等特点,一直是中小型web项目的最佳数据库选择。MySQL作为当今IT领域使用人数最多的开源关系型数据库软件之一,在2018年的数据库使用率排名中位居第二,仅次于目前为止最成功的商业版数据库Orcle[2]。MySQL最大的优势之一就是无偿使用,这也是它成功的关键。
MySQL支持标准化数据库查询语言SQL。MySQL是一款非常适合个人开发者或小型组织开发团体的数据库管理系统,因为它是开源并且免费的,体积小、速度快、成本低以及其最重要的一点开放源码,深受程序设计人员的喜爱,这也让它成为了许许多多中小型开发网站数据库的首选,同时提供了多种开发的连接API。MySQL将数据的存放按照记录之间的关系存放到了不同的表中,减少了数据的冗余并且提高了开发的工作效率。MySQL支持开发中需要用的大型数据库,并能处理数以万计的记录。因为MySQL是开源的软件,所以在项目的预算中的时候不用花费额外的资金,大大降低了开发的总体成本,这也是MySQL数据库在中小型企业和独立的开发者中广泛流行的原因[5]。
3 系统分析
3.1 可行性分析
可行性分析是该平台系统进行投入开发的基础第一步,必须对其进行可行性分析才能够降低不必要的需要从而使资源合理利用,更具有性价比和降低成本,同时也是系统平台的成功的未雨绸缪的一步[1]。
3.1.1 技术可行性
本系统可运用SSM框架,结构清晰明了,网页采用的是JSP进行开发,相比Html更适合。系统使用Java语言编写,JAVA语言有着庞大的用户以及学习群体。数据库采用MySQL。这些都是比较基础,使用较为广泛的技术,因此具有技术可行性。
3.1.2 操作可行性
本系统操作不复杂且比较容易上手,对于初次接触本系统的来说,不许要接受什么培训就可以操作本系统。用户不需要什么特定的软件,只需要安装大众所使用的浏览器即可进行系统的访问。本系统采用可视化窗口,面向大众,有效的避免了繁琐的操作。而且,本系统将各个功能都详细设计,各模块功能逻辑清晰,对用户非常友好。因此,本系统具有操作可行性。
3.1.3 经济可行性
本线上旅行信息管理系统在普通的PC就能够良好的运行,所以对系统的硬件要求并不是很高,现在电脑已经普及并且价钱都很便宜,即使是网吧淘汰下来的计算机也能够满足需要。所以本网站虽然功能强大,但还算是物美价廉,在经济上也是可行性的。
3.1.4 法律可行性
本线上旅行信息管理系统开发的所有技术资料都为合法,知识产权问题不会发生在开发过程中,而且没有抄袭其他相关系统,不会有侵犯版权的问题。所以在开发过程中不会涉及法律责任。
从上面几个部分的可行性分析得出,这次开发的线上旅行信息管理系统在开发上面没有什么大问题,值得开发。
3.2系统功能分析
本线上旅行信息管理系统主要分管理员和用户两大功能模块,下面将详细介绍管理员以及用户分别实现的功能。
3.2.1管理员功能分析
管理员登录后可对系统进行全面管理操作,管理员主要实现的功能模块包括个人中心、用户管理、景点分类管理、景点信息管理、购票信息管理、酒店信息管理、客房类型管理、客房信息管理、客房预订管理、退房评价管理、留言板管理以及系统管理,管理员用例图如图3-1所示。
图3-1 管理员用例图
3.2.2用户功能分析
用户可进入系统前台查看系统信息,包括首页、景点信息、酒店信息、客房信息、景点资讯以及留言反馈等,注册登录后主要功能模块包括个人中心、购票信息管理、客房预订管理、退房评价管理以及我的收藏管理,用户用例图如图3-2所示。
图3-2 用户用例图
3.3系统性能分析
达到如以下的性能需求指标,可以保证系统的安全性、可靠性、稳定性,需要:
(1)系统响应的精确性和实时性
这是本系统必要的性能。考虑到未来系统可能承受的工作量,需要能够承担得起企业级的信息处理需求。实时性是该系统的生命线,因此需采用软实时系统来进行保证。
(2)系统的开放性和系统的可扩充性
本系统是一个较为初期的一个雏形,以后势必会根据的用户需求的扩大或转变。这就要求本系统需要提供足够的开放型和可扩充性,只要符合本系统的设计准则都可以将新的模块加入。通过这样的升级、维护来完成本系统后期的生命周期。
(3)系统的易用性和易维护性
系统要求不论是熟悉或不熟悉计算机的用户都可以对系统进行有效的人机交互。因此提供给用户一个友好、漂亮的图形接口是非常重要的。这可以通过发一些纸质和实际的界面模型问卷调查来获得最佳的效果。此外,也考虑到维护本系统的操作人员,有效的手段的数据备份、管理和错误检测、恢复需要被提供给相关的人员。
(4)系统的响应速度
要求系统在任何情况下的平均响应速度达到秒级,具有软实时性,可以及时反馈信息。一是为了保证了系统的工作效率,二为了防止系统因同一时间段大量的用户进入系统而造成错误、瘫痪。
3.4 系统流程分析
3.4.1开发流程
线上旅行信息管理系统的开发也是有对应的流程,开发之前必须要进行用户功能需求的分析,最后根据功能需求进行网站设计还有数据库相关数据的设计工作,此次开发的线上旅行信息管理系统开发流程如图3-3所示。
![D:\用户目录\Documents\Tencent Files\736505925\FileRecv\DSH}__@$MA6E_EYBHK0`JA.png
图3-3 开发流程图
3.4.2登录流程
登录模块主要完成了用户、管理员的权限登录,登录流程图如图3-4所示
图3-4登录流程图
3.4.3添加信息流程
管理员和用户在登录成功之后,均可进行添加信息操作,添加信息流程图如图3-5所示。
图3-5添加信息流程图
4 系统设计
4.1系统结构设计
系统的设计和划分是系统的核心研究问题,以确定整体结构和功能模块。该系统的结构化设计的思想,是自顶向下的方式将系统分成若干个子系统,以及反过来的子系统分成模块,其被划分成子模块,层划分各计算机可执行模块可迄今用作一个单独的程序。
本线上旅行信息管理系统结构图如图4-1所示。
图4-1系统功能模块图
4.2 数据库E-R图设计
E-R图是一种描述显示数据类型间的关系的数据描述方法,E-R图可以完整地映射出现实模型的关系。E-R图中的三个最为重要的元素就是实体、属性、关系。E-R图即由这三点组成。
实体:E-R图中数据的实体,用矩形表示上面为实体名,下面为实体属性,实体包含主外键等关系。
属性:E-R图中的属性,是指实体的属性,实体由多条属性所构成,属性拥有自己的数据类型,数据大小。属性的优劣决定了E-R图中实体的健全性、完整性。
关系:E-R图中的关系是指实体之间的关系,用菱形来表示实体间的关系,这些菱形关系的联系上有着一对多或多对多的数据联系,这些构成了E-R图的关系,E-R图的关系紧密连接了实体,使实体间的关联性更加的显著、易懂。本线上旅行信息管理系统的E-R图如下所示:
(1)购票信息实体属性E-R图如图4-2所示:
图4-2 购票信息实体E-R图
(2)景点信息实体属性E-R图如图4-3所示:
图4-3 景点信息实体属性E-R图
(3)酒店信息实体属性E-R图如图4-4所示:
图4-4 酒店信息实体属性E-R图
(4)客房信息实体属性E-R图如图4-5所示:
图4-5 客房信息实体属性E-R图
(5)客房预订信息实体属性E-R图如图4-6所示:
图4-6 客房预订信息实体属性E-R图
(6)用户信息实体属性E-R图如图4-7所示:
图4-7 用户信息实体属性E-R图
4.3 数据库表设计
本线上旅行信息管理系统采用了MYSQL数据库管理系统,主要数据库表详细信息如下:
表4-1 goupiaoxinxi购票信息表
字段名 | 数据类型 | 是否允许空 | 字段含义 |
---|---|---|---|
id` | bigint(20) | NOT NULL | 编号 |
addtime | timestamp | NULL | 创建时间 |
dingdanbianhao | varchar(200) | NULL | 订单编号 |
jingdianmingcheng | varchar(200) | NULL | 景点名称 |
jingdianfenlei | varchar(200) | NULL | 景点分类 |
jingdiandizhi | varchar(200) | NULL | 景点地址 |
menpiaojiage` | int(11) | NULL | 门票价格 |
shuliang | int(11) | NULL | 数量 |
zongjine | varchar(200) | NULL | 总金额 |
goupiaoriqi | date | NULL | 购票日期 |
yonghuming | varchar(200) | NULL | 用户名 |
shenfenzheng | varchar(200) | NULL | 身份证 |
lianxidianhua | varchar(200) | NULL | 联系电话 |
sfsh | varchar(200) | NULL | 是否审核 |
shhf | longtext | NULL | 审核回复 |
ispay | varchar(200) | NULL | 是否支付 |
表4-2 jingdianxinxi景点信息表
字段名 | 数据类型 | 是否允许空 | 字段含义 |
---|---|---|---|
id` | bigint(20) | NOT NULL | 编号 |
addtime | timestamp | NULL | 创建时间 |
jingdianmingcheng | varchar(200) | NULL | 景点名称 |
jingdianfenlei | varchar(200) | NULL | 景点分类 |
jingdiantupian | varchar(200) | NULL | 景点图片 |
jingdiandengji | varchar(200) | NULL | 景点等级 |
jingdiandizhi | varchar(200) | NULL | 景点地址 |
menpiaojiage` | int(11) | NULL | 门票价格 |
kaifangshijian | varchar(200) | NULL | 开放时间 |
zhuyishixiang | longtext | NULL | 注意事项 |
jingdianjieshao | longtext | NULL | 景点介绍 |
clicktime | datetime | NULL | 最近点击时间 |
clicknum` | int(11) | NULL | 点击次数 |
表4-3 jiudianxinxi酒店信息表
字段名 | 数据类型 | 是否允许空 | 字段含义 |
---|---|---|---|
id` | bigint(20) | NOT NULL | 编号 |
addtime | timestamp | NULL | 创建时间 |
jiudianmingcheng | varchar(200) | NULL | 酒店名称 |
tupian | varchar(200) | NULL | 图片 |
xingji | varchar(200) | NULL | 星级 |
jiudianleixing | varchar(200) | NULL | 酒店类型 |
jiudiandizhi | varchar(200) | NULL | 酒店地址 |
lianxidianhua | varchar(200) | NULL | 联系电话 |
`jiudianjieshao | longtext | NULL | 酒店介绍 |
表4-4 kefangxinxi客房信息表
字段名 | 数据类型 | 是否允许空 | 字段含义 |
---|---|---|---|
id` | bigint(20) | NOT NULL | 编号 |
addtime | timestamp | NULL | 创建时间 |
kefangmingcheng | varchar(200) | NULL | 客房名称 |
kefangleixing | varchar(200) | NULL | 客房类型 |
kefangtupian | varchar(200) | NULL | 客房图片 |
kefangsheshi | varchar(200) | NULL | 客房设施 |
kefangjiage | int(11) | NULL | 客房价格 |
`kefangzhuangtai | varchar(200) | NULL | 客房状态 |
kefangjieshao | longtext | NULL | 客房介绍 |
jiudianmingcheng` | varchar(200) | NULL | 酒店名称 |
jiudianleixing | varchar(200) | NULL | 酒店类型 |
jiudiandizhi | varchar(200) | NULL | 酒店地址 |
表4-5 kefangyuding客房预订信息表
字段名 | 数据类型 | 是否允许空 | 字段含义 |
---|---|---|---|
id` | bigint(20) | NOT NULL | 编号 |
addtime | timestamp | NULL | 创建时间 |
dingdanbianhao | varchar(200) | NULL | 订单编号 |
kefangmingcheng | varchar(200) | NULL | 客房名称 |
kefangleixing | varchar(200) | NULL | 客房类型 |
kefangzhuangtai | varchar(200) | NULL | 客房状态 |
jiudianmingcheng | varchar(200) | NULL | 酒店名称 |
kefangjiage | int(11) | NULL | 客房价格 |
yudingtianshu | int(11) | NULL | 预订天数 |
zongjiage | varchar(200) | NULL | 总价格 |
xiadanshijian` | date | NULL | 下单时间 |
ruzhushijian | datetime | NULL | 入住时间 |
yonghuming | varchar(200) | NULL | 用户名 |
lianxidianhua | varchar(200) | NULL | 联系电话 |
`shenfenzheng | varchar(200) | NULL | 身份证 |
`sfsh | varchar(200) | NULL | 是否审核 |
shhf` | longtext | NULL | 审核回复 |
ispay` | varchar(200) | NULL | 是否支付 |
表4-6 users用户信息表
字段名 | 数据类型 | 是否允许空 | 字段含义 |
---|---|---|---|
Id | bigint(20) | NOT NULL | 编号 |
username | varchar(100) | NULL | 用户名 |
`password | varchar(100) | NULL | 密码 |
role` | varchar(100) | NULL | 角色 |
addtime | timestamp | NULL | 新增时间 |
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.1.4景点信息管理界面
管理员可以增删改查景点信息,景点信息管理界面展示如图5-4所示。
图5-4 景点信息管理界面
5.1.5酒店信息管理界面
管理员可增删改查酒店信息,酒店信息管理界面展示如图5-5所示。
图5-5 酒店信息管理界面
5.1.6客房信息管理界面
管理员可添加、修改和删除客房信息,客房信息管理界面展示如图5-6所示。
图5-6 客服信息管理界面
5.1.7购票信息管理界面
管理员能够查看、审核、修改和删除购票信息,购票信息管理界面展示如图5-7所示。
图5-7 购票信息管理界面
5.2用户功能模块的实现
5.2.1系统主界面
用户在系统前台可查看系统信息,包括首页、景点信息、酒店信息以及客房信息等,系统主界面展示如图5-8所示。
图5-8系统主界面
5.2.2用户登录界面
用户要登录界面可输入用户名、密码,点击登录按钮进行登录系统,用户登录界面展示如图5-9所示。
图5-9 用户登录界面
5.2.3用户注册界面
没有账号的用户可进入注册界面进行注册操作,用户注册界面展示如图5-10所示。
图5-10 用户注册界面
5.2.4酒店详情界面
用户可选择酒店查看详情信息,登录后可进行预订操作,酒店详情界面展示如图5-11所示。
图5-11 酒店详情界面
5.2.5酒店预订界面
用户登录后可选择酒店进行预订操作,酒店预订界面展示如图5-12所示。
图5-12 酒店预订界面
5.2.6景点详情界面
用户可选择景点查看详情信息,登录后可进行购票操作,景点详情界面展示如图5-13所示。
图5-13 景点详情界面
5.2.7景点购票界面
用户登录后可选择景点进行购票操作,景点购票界面展示如图5-14所示。
图5-14 景点购票界面
系统
DiscussjiudianxinxiServiceImpl.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.DiscussjiudianxinxiDao;
import com.entity.DiscussjiudianxinxiEntity;
import com.service.DiscussjiudianxinxiService;
import com.entity.vo.DiscussjiudianxinxiVO;
import com.entity.view.DiscussjiudianxinxiView;
@Service("discussjiudianxinxiService")
public class DiscussjiudianxinxiServiceImpl extends ServiceImpl<DiscussjiudianxinxiDao, DiscussjiudianxinxiEntity> implements DiscussjiudianxinxiService {
@Override
public PageUtils queryPage(Map<String, Object> params) {
Page<DiscussjiudianxinxiEntity> page = this.selectPage(
new Query<DiscussjiudianxinxiEntity>(params).getPage(),
new EntityWrapper<DiscussjiudianxinxiEntity>()
);
return new PageUtils(page);
}
@Override
public PageUtils queryPage(Map<String, Object> params, Wrapper<DiscussjiudianxinxiEntity> wrapper) {
Page<DiscussjiudianxinxiView> page =new Query<DiscussjiudianxinxiView>(params).getPage();
page.setRecords(baseMapper.selectListView(page,wrapper));
PageUtils pageUtil = new PageUtils(page);
return pageUtil;
}
@Override
public List<DiscussjiudianxinxiVO> selectListVO(Wrapper<DiscussjiudianxinxiEntity> wrapper) {
return baseMapper.selectListVO(wrapper);
}
@Override
public DiscussjiudianxinxiVO selectVO(Wrapper<DiscussjiudianxinxiEntity> wrapper) {
return baseMapper.selectVO(wrapper);
}
@Override
public List<DiscussjiudianxinxiView> selectListView(Wrapper<DiscussjiudianxinxiEntity> wrapper) {
return baseMapper.selectListView(wrapper);
}
@Override
public DiscussjiudianxinxiView selectView(Wrapper<DiscussjiudianxinxiEntity> wrapper) {
return baseMapper.selectView(wrapper);
}
}
GoupiaoxinxiController.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.format.annotation.DateTimeFormat;
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.GoupiaoxinxiEntity;
import com.entity.view.GoupiaoxinxiView;
import com.service.GoupiaoxinxiService;
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-04-01 14:03:08
*/
@RestController
@RequestMapping("/goupiaoxinxi")
public class GoupiaoxinxiController {
@Autowired
private GoupiaoxinxiService goupiaoxinxiService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,GoupiaoxinxiEntity goupiaoxinxi,
HttpServletRequest request){
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("yonghu")) {
goupiaoxinxi.setYonghuming((String)request.getSession().getAttribute("username"));
}
EntityWrapper<GoupiaoxinxiEntity> ew = new EntityWrapper<GoupiaoxinxiEntity>();
PageUtils page = goupiaoxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, goupiaoxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,GoupiaoxinxiEntity goupiaoxinxi, HttpServletRequest request){
EntityWrapper<GoupiaoxinxiEntity> ew = new EntityWrapper<GoupiaoxinxiEntity>();
PageUtils page = goupiaoxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, goupiaoxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( GoupiaoxinxiEntity goupiaoxinxi){
EntityWrapper<GoupiaoxinxiEntity> ew = new EntityWrapper<GoupiaoxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( goupiaoxinxi, "goupiaoxinxi"));
return R.ok().put("data", goupiaoxinxiService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(GoupiaoxinxiEntity goupiaoxinxi){
EntityWrapper< GoupiaoxinxiEntity> ew = new EntityWrapper< GoupiaoxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( goupiaoxinxi, "goupiaoxinxi"));
GoupiaoxinxiView goupiaoxinxiView = goupiaoxinxiService.selectView(ew);
return R.ok("查询购票信息成功").put("data", goupiaoxinxiView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
GoupiaoxinxiEntity goupiaoxinxi = goupiaoxinxiService.selectById(id);
return R.ok().put("data", goupiaoxinxi);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
GoupiaoxinxiEntity goupiaoxinxi = goupiaoxinxiService.selectById(id);
return R.ok().put("data", goupiaoxinxi);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody GoupiaoxinxiEntity goupiaoxinxi, HttpServletRequest request){
goupiaoxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(goupiaoxinxi);
goupiaoxinxiService.insert(goupiaoxinxi);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody GoupiaoxinxiEntity goupiaoxinxi, HttpServletRequest request){
goupiaoxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(goupiaoxinxi);
goupiaoxinxiService.insert(goupiaoxinxi);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody GoupiaoxinxiEntity goupiaoxinxi, HttpServletRequest request){
//ValidatorUtils.validateEntity(goupiaoxinxi);
goupiaoxinxiService.updateById(goupiaoxinxi);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
goupiaoxinxiService.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<GoupiaoxinxiEntity> wrapper = new EntityWrapper<GoupiaoxinxiEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
String tableName = request.getSession().getAttribute("tableName").toString();
if(tableName.equals("yonghu")) {
wrapper.eq("yonghuming", (String)request.getSession().getAttribute("username"));
}
int count = goupiaoxinxiService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
DiscussjiudianxinxiController.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.format.annotation.DateTimeFormat;
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.DiscussjiudianxinxiEntity;
import com.entity.view.DiscussjiudianxinxiView;
import com.service.DiscussjiudianxinxiService;
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-04-01 14:03:08
*/
@RestController
@RequestMapping("/discussjiudianxinxi")
public class DiscussjiudianxinxiController {
@Autowired
private DiscussjiudianxinxiService discussjiudianxinxiService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,DiscussjiudianxinxiEntity discussjiudianxinxi,
HttpServletRequest request){
EntityWrapper<DiscussjiudianxinxiEntity> ew = new EntityWrapper<DiscussjiudianxinxiEntity>();
PageUtils page = discussjiudianxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, discussjiudianxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,DiscussjiudianxinxiEntity discussjiudianxinxi, HttpServletRequest request){
EntityWrapper<DiscussjiudianxinxiEntity> ew = new EntityWrapper<DiscussjiudianxinxiEntity>();
PageUtils page = discussjiudianxinxiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, discussjiudianxinxi), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( DiscussjiudianxinxiEntity discussjiudianxinxi){
EntityWrapper<DiscussjiudianxinxiEntity> ew = new EntityWrapper<DiscussjiudianxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( discussjiudianxinxi, "discussjiudianxinxi"));
return R.ok().put("data", discussjiudianxinxiService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(DiscussjiudianxinxiEntity discussjiudianxinxi){
EntityWrapper< DiscussjiudianxinxiEntity> ew = new EntityWrapper< DiscussjiudianxinxiEntity>();
ew.allEq(MPUtil.allEQMapPre( discussjiudianxinxi, "discussjiudianxinxi"));
DiscussjiudianxinxiView discussjiudianxinxiView = discussjiudianxinxiService.selectView(ew);
return R.ok("查询酒店信息评论表成功").put("data", discussjiudianxinxiView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
DiscussjiudianxinxiEntity discussjiudianxinxi = discussjiudianxinxiService.selectById(id);
return R.ok().put("data", discussjiudianxinxi);
}
/**
* 前端详情
*/
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
DiscussjiudianxinxiEntity discussjiudianxinxi = discussjiudianxinxiService.selectById(id);
return R.ok().put("data", discussjiudianxinxi);
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody DiscussjiudianxinxiEntity discussjiudianxinxi, HttpServletRequest request){
discussjiudianxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(discussjiudianxinxi);
discussjiudianxinxiService.insert(discussjiudianxinxi);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody DiscussjiudianxinxiEntity discussjiudianxinxi, HttpServletRequest request){
discussjiudianxinxi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(discussjiudianxinxi);
discussjiudianxinxiService.insert(discussjiudianxinxi);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody DiscussjiudianxinxiEntity discussjiudianxinxi, HttpServletRequest request){
//ValidatorUtils.validateEntity(discussjiudianxinxi);
discussjiudianxinxiService.updateById(discussjiudianxinxi);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
discussjiudianxinxiService.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<DiscussjiudianxinxiEntity> wrapper = new EntityWrapper<DiscussjiudianxinxiEntity>();
if(map.get("remindstart")!=null) {
wrapper.ge(columnName, map.get("remindstart"));
}
if(map.get("remindend")!=null) {
wrapper.le(columnName, map.get("remindend"));
}
int count = discussjiudianxinxiService.selectCount(wrapper);
return R.ok().put("count", count);
}
}
IndexAsideSub.vue
<template>
<el-submenu v-if="menu.list && menu.list.length >= 1" :index="menu.menuId + ''">
<template slot="title">
<span>{{ menu.name }}</span>
</template>
<sub-menu
v-for="item in menu.list"
:key="item.menuId"
:menu="item"
:dynamicMenuRoutes="dynamicMenuRoutes"
></sub-menu>
</el-submenu>
<el-menu-item v-else :index="menu.menuId + ''" @click="gotoRouteHandle(menu)">
<span>{{ menu.name }}</span>
</el-menu-item>
</template>
<script>
import SubMenu from "./IndexAsideSub";
export default {
name: "sub-menu",
props: {
menu: {
type: Object,
required: true
},
dynamicMenuRoutes: {
type: Array,
required: true
}
},
components: {
SubMenu
},
methods: {
// 通过menuId与动态(菜单)路由进行匹配跳转至指定路由
gotoRouteHandle(menu) {
var route = this.dynamicMenuRoutes.filter(
item => item.meta.menuId === menu.menuId
);
if (route.length >= 1) {
if (route[0].component != null) {
this.$router.replace({ name: route[0].name });
} else {
this.$router.push({ name: "404" });
}
}
}
}
};
</script>
声明
本博客适用于广泛的学术和教育用途,包括但不限于个人学习、开发设计,产品设计。仅供学习参考,旨在为读者提供深入理解和学术研究的材料。