淘宝客网站备案信息,厦门网站制作系统,免费咨询在线,地址一地址二在线发布页TOC
ssm773基于Java的民宿预订管理系统的设计与实现jsp
绪论
1.1课题研究背景意义
随着科技的发展#xff0c;计算机的应用#xff0c;人们的生活方方面面都和互联网密不可分。计算机的普及使得人们的生活更加方便快捷#xff0c;网络也遍及到我们生活的每个角落#x…TOC
ssm773基于Java的民宿预订管理系统的设计与实现jsp
绪论
1.1课题研究背景意义
随着科技的发展计算机的应用人们的生活方方面面都和互联网密不可分。计算机的普及使得人们的生活更加方便快捷网络也遍及到我们生活的每个角落为我们的学习、生活和工作带来了极大的方便。随着计算机技术的发展以及计算机网络的逐渐普及互联网成为人们查找信息的重要场所二十一世纪是信息的时代信息的交换和信息流通显得特别重要。
1.2设计目标
首先对系统所涉及到的相关计算机知识整体把握并进行基础的系统分析。系统分析是程序开发中的一个非常重要的环节为了能够使设计程序更好、更充分的被展现出来必须事先进行调查研究。在基础的调查的同时也要对新系统的功能进行详细的解析分析这样才能够研究开发出更加完整的系统设计。
在本次毕业设计中使用了JSP技术SSM框架MYSQL数据库进行系统的开发。构建了一个民宿预订管理系统软件。
无论哪个系统都应该有自己的设计目标。该民宿预订管理系统软件也具有重要的设计目标有如下几个
1.简洁性操作简便、界面良好简单明了的页面布局。
2.适用性系统设计可以实现数据信息查看、公告等具有良好的可用性。
3.即时可见实现信息即时发布、即时见效的功能。
1.3 设计原则
一个成功的网站应明确建设网站的目的确定网站的具体功能确定网站规模、投入费用进行必要的市场分析等。只有经过详细的策划才能避免在网站建设中出现的很多问题使网站建设能够顺利进行。同时一个大型的计算机网站系统必须有一个正确的设计思想并且通过合理的选择数据结构、网络结构、操作系统以及系统的开发环境逐步构成一个完善的网络结构系统只有这样才能充分使得计算机数据管理的优势发挥到最大。根据现实生活中扶贫的需求该民宿预订管理系统软件的开发按照以下原则进行。
1、有效性实际上这里所说的有效性包括了两个方面的意思即有用性和可用性。其中有用性是指的是站点能满足用户需求的潜在功能而可用性指的是能够通过站点来操作实现系统的体现功能。因此可以看出一个站点如果不能够恰当的运行或者是设计得非常不好那就不是一个好的站点。可用站点的效益应该非常高并易于学习在实现用户目标时令人满意而不出错。
2、高可靠性一个实用的网站同时必须是可靠的本设计通过合理而先进的网络设计以及软、硬件的优化选型可保证网站的可靠性与容错性。
3、高安全性在设计中将把网络软、硬件所能够提供的各种安全措施充分利用这样既能够保证用户资源的共享又能够充分考虑到系统以及数据资源的容灾、备份以及恢复的要求。为系统强大的数据库提供备份。以至于可以保证主要数据的安全性。同时操作权限级我们设置不同的角色来保证每一步的操作权限可以由管理员进行设置。
4、先进性采用目前国际上最先进的数据库技术使用JSP作为开发工具MVC模式MYSQL作为网站的数据库。本系统采用的这些技术完全基于微软平台进行开发从来有效的降低了系统的运营成本大大提高了该民宿预订管理系统软件的稳定性和易维护性。
5、采用标准技术本网站的所有设计遵循国际上现行的标准进行以提高系统的开放性。 系统开发环境
2.1 JSP技术
JSP程序使用了Java编程语言JSP技术可以对动态网页进行封装。通过tags和scriptlets网页还能访问存在于服务端的资源的应用逻辑。JSP可以分离网页逻辑与网页设计和显示对可重用的基于组件的开发进行支撑更容易的对基于Web的应用程序进行设计。
当Web服务器接收到访问JSP网页的请求时首先运行的程序段接下来将JSP文件中的HTML代码和运行效果一并返还给用户。通过Java文件的插入能够对数据库、网页多重定向等运行从而满足构建动态网页所需要的程序。JSP和Servle相同都可以通过服务器端运行。由于能够将一个HTML文本返回给用户端所以用户端具备浏览器就可以进行浏览。HTML程序和穿插在内部的Java程序可以构建JSP网页。在服务器被用户端访问时能够处理相应的Java代码然后将产生的HTML页面再返回给用户端的浏览器。JSP的设计关键是Servlet通常大型的Web应用程序的设计成果也通过Java Servlet和JSP的协作。JSP既拥有了方便快捷的Java程序又统统的面向用户既实现了平台的无关性危险还比较小可以具备互联网的全部优势。JSP技术的优点
1一次编写到处运行。除了系统之外代码无需做任何改动。
2系统的多平台支持。通常情况下能够在任何情况下的全部平台上进行设计能够安排在任何情况中也能够在任何情况下进行发展。相比ASP/.net来说优点是显而易见的。
3强大的可塑性。通过一个不大的Jar程序能够对Servlet/JSP进行运行也能够通过很多服务器进行集群和负载平衡甚至能够通过多台Application解决问题。单台服务器到多台服务器Java展现了一个强大的功能。
4具有强大和多样化的开发工具支持。Java已经有了很多的设计方法何况大部分工具都是没有花费的这中间有很多都在多种平台之下顺畅的进展。
(5)支持服务器端组件。只有很有力的服务器端组件才能支撑web运行因此开发者可以在调用web页面时通过另外的开发工具来达成纷乱效用的组件来加强系统的可操作性。JSP可以通过完善的JAVA BEANS 组件来达成纷乱的商务功能。
2.2 B/S结构
在三层体系结构的B/SBrowser/Server浏览器/服务器结构系统中用户可以通过浏览器向分布在网络上的众多服务器发出请求。B/S系统极大地简化了客户机的工作量客户机上只需要安装、配置少量的客户端运行软件即可服务器将担负大量的工作对数据库的访问以及应用程序的执行都将由服务器来完成。
B/S架构的不断成熟主要使用WWW浏览器技术结合多种浏览器脚本语言用通用浏览器需要实现原本复杂的专有软件来实现的强大功能并节约了开发成本是一种新的软件架构。
2.3 JAVA简介
Java非常适合于企业网络和Internet环境现在已成为Internet中最受欢迎、最有影响的编程语言之一。Java来自于Sun公司的一个叫Green的项目其原先的目的是为家用消费电子产品开发一个分布式代码系统这样我们可以把E-mail发给电冰箱、电视机等家用电器对它们进行控制和它们进行信息交流。他们用Java编制了HotJava浏览器得到了Sun公司首席执行官ScottMcNealy的支持触发了Java进军Internet。面向对象的程序设计很接近于我们人类自然的思维相对于面向过程的程序设计它具有更好的可扩展性和可维护性使我们编写的代码更健壮。
面向对象主要有四大特性封装、抽象、继承和多态。
封装在面向对象语言中封装特性是由类来体现的我们将现实生活中的一类实体定义成类其中包括属性和行为在Java中就是方法就好像人类可以具有name,sex,age等属性同时也具有eat(),sleep()等行为我们在行为中实现一定的功能也可操作属性这是面向对象的封装特性
抽象抽象就是将一类实体的共同特性抽象出来封装在一个抽象类中所以抽象在面向对象语言是由抽象类来体现的。比如鸟就是一个抽象实体因为抽象实体并不是一个真正的对象它的属性还不能完全描述一个对象所以在语言中体现为抽象类不能实例化
继承继承就像是我们现实生活中的父子关系儿子可以遗传父亲的一些特性在面向对象语言中就是一个类可以继承另一个类的一些特性从而可以代码重用其实继承体现的是is-a关系父类同子类在本质上还是一类实体。
多态多态就是通过传递给父类对象引用不同的子类对象从而表现出不同的行为多态可为程序提供更好的可扩展性同样也可以代码重用。
2.4 MYSQL数据库
2.4.1MySQL数据库简介
在软件项目中通过使用数据库来操作数据可以保证数据的独立性、一致性和安全性为系统提供有效地访问数据的方式同时为程序员减少了应用程序的开发时间。 常见的数据库无非分为两类一类是关系型数据库(OracleDB2MySQLSQL Server )和非关系型数据库(NoSql、MongeDB)。不同的数据库有各自的优缺点此处不做具体介绍。 MySQL支持多线程的特点可以方便的利用系统资源有效提高速度而且提供了TCP/IP、ODBC和JDBC等多种方式途径来连接数据库虽说其功能不够强大、规模也相对较小但是对于本系统来说足够了同时也可以进行二次开发的数据库表结构空间的扩展。使用MySQL建立系统数据库不仅有利于前期对数据的整合处理操作同时利于后期的二次开发的数据扩展操作对于有限级的数据处理MySQL可以很好的胜任 。
MySQL的海豚标志被称为“Sakila”这是一个很大的名称被称为“海豚”MySQL AB公司的创始人。
MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统它的有点有有功能强大、使用简单、管理方便、安全可靠性高。
2.4.2 MySQL特点特性
1C和C 中使用和测试以确保源代码的编译器的便携性和灵活性。
2支持多种操作系统AIX的FreeBSD下HP-UXLinux和Mac OS中Novell公司的NetwareOpenBSD系统OS/2裹时SolarisWindows等。
3提供了用于不同的编程语言的API。编程语言如C,, C Python和Java的的PerlPHP埃菲尔铁塔Ruby和Tcl的。
4以及使用的CPU资源来支持多线程。
5算法优化查询SQL切实提高搜索速度。
6网络上的客户端和服务器可以用来编程任何独立的编程环境也有中国GB2312BIG5日文写作一般基金用于支持多国语言并且可以嵌入在数据表和其他软件shift_jis访问柱可以用作的名称。
7TCP / IPODBC和JDBC数据库并提供连接到其他
8管理工具的管理控制和优化数据库的操作
9可以数以千万计的记录在一个大的数据库
2.4.3 MySQL数据库应用环境
如OracleDB2SQL Server小相对于其他主要数据库如MySQL有自己的缺点如有限MySQL集群是一个相对贫穷的效率但它并没有降低它的声誉。一般的个人消费者和中小型企业以及充足的空间和MySQL MySQL是一个开源软件因为它拥有一个非常降低成本。
目前互联网的结构来最流行的网站上的LAMPLinux操作系统Apache MySQL的 PHP使用的操作系统如Linux操作系统Apache Web服务器服务器端脚本解释器的MySQL数据库 PHP等四个免费软件或开源软件也因为可持续和可以创建一个免费的网站系统劳动力成本所以你的花费不大。
2.5 SSM框架介绍
2.5.1 SSM框架作用
SSM框架是spring MVC spring和mybatis框架的整合是标准的MVC模式将整个系统划分为表现层controller层service层DAO层四层
使用spring MVC负责请求的转发和视图管理
spring实现业务对象管理mybatis作为数据对象的持久化引擎
2.5.2 SSM框架原理
SpringMVC
1.客户端发送请求到DispacherServlet分发器
2.由DispacherServlet控制器查询HanderMapping找到处理请求的Controller
3.Controller调用业务逻辑处理后返回ModelAndView
4.DispacherSerclet查询视图解析器找到ModelAndView指定的视图
5.视图负责将结果显示到客户端 系统的需求分析
需求分析的任务是通过详细调查民宿预订管理系统软件所需的对象充分了解系统的工作概况明确功能实现的各种需求然后在此基础上确定系统的功能。系统必须充分考虑今后可能的扩充和改变。
3.1可行性分析
通过对系统实行的目的初步调查和分析提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。
3.1.1 技术可行性
1.硬件可行性分析
民宿预订管理系统系统的硬件要求方面不存在特殊的要求只需要在普通的硬件配置就能够轻松的实现只是需要确保系统的正常工作即可以及拥有较高的效率。如果有特别低的硬件它可以导致系统的低性能以及效率低从而导致整个网站的运行不顺畅。以目前普遍的个人计算机的配置而言这是十分容易实现的 。因此本系统的开发在硬件方面是可行的。
2.软件可行性分析
JSP技术提供了一个共同的机制类似的借口动态模型设计更集中。此外代码复用也可以很好的体现。因此考虑到系统的实际情况选择JSP技术作为本系统的开发技术。通过上述分析该系统的设计实现在软件方面是可行的。
3.1.2经济可行性
从经济许可上分析系统开发需求成本并不高,而且采用的都是开源码,降低了开发成本而且系统设计一旦完成就能为运行同时系统对计算机配置要求也不高即使是网吧淘汰下来的计算机也能够满足需要。因此从经济角度考虑此系统开发可行。
3.1.3操作可行性
本系统操作比较容易大部分输入信息页面选择的形式都是下拉框。在有些页面信息可以自动生成不需要输入。输入时间也采用了日历控件操作比较容易对用户的要求不高只需要熟练操作WINDOWS即可。
3.2系统设计原则
系统的架构设计要能够反映出用户与整个系统模块的接口之间存在有效互动而且应该是非常清楚的从而才能够保障在后期系统真正实现的时候数据的扩展性和安全性只有设计出的系统实现这个目标才能有一个更好的扩展空间以适应社会的的发展需求。
整个系统的设计中系统必须满足以下要求
1数据安全性
存储民宿预订管理系统的数据需要确保数据的安全性在网站设计时必须要采取安全防范措施以解决潜在的安全问题。
2易用性
在用户权限范围内可在一个统一风格的界面内即可完成相关的所有流程操作或者获取所有相关信息大大使用者的工作效率和易用性灵活应用本系统。
3柔软性
由于这个民宿预订管理系统主要针对新闻、公告等设计出的系统必须能够处理接受变化的能力。
3.3流程分析
3.3.1 系统开发流程
民宿预订管理系统开发中时首先进行需求分析进而对系统进行总体的设计规划设计系统功能模块数据库的选择等本系统的开发流程如图3-1所示 图3-1系统开发流程图
3.3.2 系统登录流程
用户要想进入系统必须首先通过正确的用户名、密码、权限和验证码进行登录系统。登录模块主要完成系统管理员和用户的登入输入账号、密码、权限和验证码系统自动验证数据的正确与否登录信息正确则进行对应用户主界面否则无权进行登录系统。系统流程图如图3-2所示 图3-2系统登录流程图
3.4系统设计规则与运行环境
无论哪个系统都应该有自己的设计规则。该系统也具有重要的设计标准有如下几个
1.简单在保证民宿预订管理系统能够成功实现的前提下并尽量使民宿预订管理系统更容易操作对于一个平台这是非常重要的。
2.针对性系统设计的重点是利于用户对相关信息的查看和管理员对信息的管理它具有针对性很强的特点。
3.适用范围适用范围广平台都可以使用。
4.操作环境
1硬件平台
CPU酷睿i3 -3.0GHZ 内存2G以上 硬盘320GB
2软件平台
5.操作系统Window XP 或Win 7或Win10均可
6.数据库 MYSQL数据库 系统的概要设计
4.1 系统结构设计
民宿预订管理系统主要分为管理员和用户两个主要用户角色本网站采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统结构图如图4-1所示
网络
管理员
用户
服务器和程序 图4-1 系统结构图
4.2 系统架构设计
4.2.1总体架构设计
系统架构的整体设计是一个将一个庞大的任务细分为多个小的任务的过程这些小的任务分段完成后组合在一起形成一个完整的任务。它具体的工作步骤是
1系统被分解多个子模块
2对各个子模块的功能进行预先的设计
3对各个子模块之间的逻辑关系进行设计
4对各个模块的界面以及模块间信息的传输进行设计
在整个设计过程以确定可能的具体方案达成每一个小的最终目标对于每一个小的目标而言我们必须先了解一些相关的需求分析的信息。然后对系统进行初步的设计并对其逐渐进行优化设计出一个具体可实现的系统框架。
如图4-2所示为系统的框架图。
民宿预订管理系统
系用户信息管理
商品评论管理
商品信息管理
民宿信息管理
民宿预订管理
帐用户信息修改
密用户信息新增
民宿预订添加
民宿预订删除
民宿预订修改
民宿信息添加
民宿信息修改
民宿信息删除
商品评论添加
商品评论删改
商品评论删除
商品信息添加
商品信息修改
商品信息删除
新闻资讯管理
新闻资讯修改
新闻资讯删除
新闻资讯添加 图4-2 系统框架图
4.2.2系统网络拓扑结构图
本民宿预订管理系统采用先进的B/S架构该架构具有开发简单、共享性强、维护简单方便等诸多优点。本系统的网络拓扑图如图4-3所示 图4-3 系统的网络拓扑图
4.3 数据库设计
开发一个系统也需要提前设计数据库。这里的数据库是相关数据的集合存储在一起的这些数据也是按照一定的组织方式进行的。目前数据库能够服务于多种应用程序则是源于它存储方式最佳具备数据冗余率低的优势。虽然数据库为程序提供信息存储服务但它与程序之间也可以保持较高的独立性。总而言之数据库经历了很长一段时间的发展从最初的不为人知到现在的人尽皆知其相关技术也越发成熟同时也拥有着坚实的理论基础。
4.3.1 数据库概念设计
这部分内容需要借助数据库关系图来完成也需要使用专门绘制数据库关系图的工具比如Visio工具就可以设计E-R图数据库关系图。设计数据库也需要按照设计的流程进行首先还是要根据需求完成实体的确定分析实体具有的特征还有对实体间的关联关系进行确定。最后才是使用E-R模型的表示方法绘制本系统的E-R图。不管是使用亿图软件还是Visio工具对于E-R模型的表示符号都一样通常矩形代表实体实体间存在的关系用菱形符号表示实体的属性也就是实体的特征用符号椭圆表示。最后使用直线将矩形菱形和椭圆等符号连接起来。接下来就开始对本系统的E-R图进行绘制。
1下图是用户实体和其具备的属性。 图4.1 用户实体属性图
2下图是商品信息实体和其具备的属性。 图4.2 商品信息实体属性图
3下图是字典表实体和其具备的属性。 图4.3 字典表实体属性图
4下图是新闻资讯实体和其具备的属性。 图4.4 新闻资讯实体属性图
5下图是购物车实体和其具备的属性。 图4.5 购物车实体属性图
6下图是房东实体和其具备的属性。 图4.6 房东实体属性图
7下图是民宿租赁实体和其具备的属性。 图4.7 民宿租赁实体属性图
8下图是商品收藏实体和其具备的属性。 图4.8 商品收藏实体属性图
9下图是商品评价实体和其具备的属性。 图4.9 商品评价实体属性图
10下图是商品订单实体和其具备的属性。 图4.10 商品订单实体属性图
11下图是用户表实体和其具备的属性。 图4.11 用户表实体属性图
12下图是民宿信息实体和其具备的属性。 图4.12 民宿信息实体属性图
13下图是收货地址实体和其具备的属性。 图4.13 收货地址实体属性图
4.3.4 数据库表
本系统数据库的功能主要是存储网站中所有数据以便进行操作。
表4.1收货地址表
序号列名数据类型说明允许空1IdIntid否2yonghu_idInteger创建用户是3address_nameString收货人是4address_phoneString电话是5address_dizhiString地址是6isdefault_typesInteger是否默认地址是7insert_timeDate添加时间是8update_timeDate修改时间是9create_timeDate创建时间是
表4.2购物车表
序号列名数据类型说明允许空1IdIntid否2yonghu_idInteger所属用户是3shangpin_idInteger商品是4buy_numberInteger购买数量是5create_timeDate添加时间是6update_timeDate更新时间是7insert_timeDate创建时间是
表4.3字典表表
序号列名数据类型说明允许空1IdIntid否2dic_codeString字段是3dic_nameString字段名是4code_indexInteger编码是5index_nameString编码名字是6super_idInteger父字段id是7beizhuString备注是8create_timeDate创建时间是
表4.4房东表
序号列名数据类型说明允许空1IdIntid否2fangdong_nameString房东姓名是3fangdong_id_numberString身份证号是4fangdong_phoneString手机号是5fangdong_photoString照片是6create_timeDate创建时间是
表4.5民宿信息表
序号列名数据类型说明允许空1IdIntid否2minsu_nameString民宿名称是3fagwu_typesInteger房屋类型是4minsu_new_moneyBigDecimal价格/天是5minsu_photoString房屋图片是6minsu_addressString地址是7fwstate_typesInteger房屋状态是8fangdong_idInteger所属房东是9minsu_contentString具体信息是10create_timeDate创建时间是
表4.6民宿租赁表
序号列名数据类型说明允许空1IdIntid否2minsu_idInteger民宿是3yonghu_idInteger租赁用户是4ruzhu_timeDate入住时间是5tuifang_timeDate退房时间是6create_timeDate创建时间是
表4.7新闻资讯表
序号列名数据类型说明允许空1IdIntid否2news_nameString新闻资讯名称是3news_typesInteger新闻类型是4news_photoString新闻资讯图片是5insert_timeDate新闻资讯时间是6news_contentString新闻资讯详情是7create_timeDate创建时间是
表4.8商品信息表
序号列名数据类型说明允许空1IdIntid否2shangpin_nameString商品名称是3shangpin_typesInteger商品类型是4shangpin_photoString商品照片是5shangpin_kucun_numberInteger商品库存是6shangpin_old_moneyBigDecimal商品原价是7shangpin_new_moneyBigDecimal现价是8shangpin_clicknumInteger点击次数是9shangpin_contentString商品简介是10create_timeDate创建时间是
表4.9商品收藏表
序号列名数据类型说明允许空1IdIntid否2shangpin_idInteger商品是3yonghu_idInteger用户是4insert_timeDate收藏时间是5create_timeDate创建时间是
表4.10商品评价表
序号列名数据类型说明允许空1IdIntid否2shangpin_idInteger商品是3yonghu_idInteger用户是4shangpin_commentback_textString评价内容是5reply_textString回复内容是6insert_timeDate评价时间是7update_timeDate回复时间是8create_timeDate创建时间是
表4.11商品订单表
序号列名数据类型说明允许空1IdIntid否2shangpin_order_uuid_numberString订单号是3address_idInteger收获地址是4shangpin_idInteger商品是5yonghu_idInteger用户是6buy_numberInteger购买数量是7shangpin_order_true_priceBigDecimal实付价格是8shangpin_order_typesInteger订单类型是9shangpin_order_payment_typesInteger支付类型是10insert_timeDate订单创建时间是11create_timeDate创建时间是
表4.12用户表
序号列名数据类型说明允许空1IdIntid否2yonghu_nameString用户姓名是3yonghu_id_numberString身份证号是4yonghu_phoneString手机号是5yonghu_photoString照片是6create_timeDate创建时间是
表4.13用户表表
序号列名数据类型说明允许空1IdIntid否2roleString角色是3addtimeDate新增时间是 系统的实现
5.1用户信息管理
如图5.1显示的就是用户信息管理页面此页面提供给管理员的功能有用户信息的查询管理可以删除用户信息、修改用户信息、新增用户信息
还进行了对用户名称的模糊查询的条件 图5.1 用户信息管理页面
5.2 民宿预订管理
如图5.2显示的就是民宿预订管理页面此页面提供给管理员的功能有查看已发布的民宿预订数据修改民宿预订民宿预订作废即可删除。 图5.2 民宿预订管理页面
5.3商品信息管理
如图5.3显示的就是商品信息管理页面此页面提供给管理员的功能有根据商品信息进行条件查询还可以对商品信息进行新增、修改、查询操作等等。 图5.3 商品信息管理页面
5.1新闻资讯管理
如图5.4显示的就是新闻资讯管理页面此页面提供给管理员的功能有根据新闻资讯进行新增、修改、查询操作等等。 图5.4 新闻资讯管理页面 系
AddressController.java
package com.controller;import java.io.File;
import java.math.BigDecimal;
import java.net.URL;
import java.text.SimpleDateFormat;
import com.alibaba.fastjson.JSONObject;
import java.util.*;
import org.springframework.beans.BeanUtils;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import com.service.TokenService;
import com.utils.*;
import java.lang.reflect.InvocationTargetException;import com.service.DictionaryService;
import org.apache.commons.lang3.StringUtils;
import com.annotation.IgnoreAuth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.entity.*;
import com.entity.view.*;
import com.service.*;
import com.utils.PageUtils;
import com.utils.R;
import com.alibaba.fastjson.*;/*** 收货地址* 后端接口* author* email
*/
RestController
Controller
RequestMapping(/address)
public class AddressController {private static final Logger logger LoggerFactory.getLogger(AddressController.class);Autowiredprivate AddressService addressService;Autowiredprivate TokenService tokenService;Autowiredprivate DictionaryService dictionaryService;//级联表serviceAutowiredprivate YonghuService yonghuService;/*** 后端列表*/RequestMapping(/page)public R page(RequestParam MapString, Object params, HttpServletRequest request){logger.debug(page方法:,,Controller:{},,params:{},this.getClass().getName(),JSONObject.toJSONString(params));String role String.valueOf(request.getSession().getAttribute(role));if(StringUtil.isEmpty(role))return R.error(511,权限为空);else if(用户.equals(role))params.put(yonghuId,request.getSession().getAttribute(userId));if(params.get(orderBy)null || params.get(orderBy)){params.put(orderBy,id);}PageUtils page addressService.queryPage(params);//字典表数据转换ListAddressView list (ListAddressView)page.getList();for(AddressView c:list){//修改对应字典表字段dictionaryService.dictionaryConvert(c, request);}return R.ok().put(data, page);}/*** 后端详情*/RequestMapping(/info/{id})public R info(PathVariable(id) Long id, HttpServletRequest request){logger.debug(info方法:,,Controller:{},,id:{},this.getClass().getName(),id);AddressEntity address addressService.selectById(id);if(address !null){//entity转viewAddressView view new AddressView();BeanUtils.copyProperties( address , view );//把实体数据重构到view中//级联表YonghuEntity yonghu yonghuService.selectById(address.getYonghuId());if(yonghu ! null){BeanUtils.copyProperties( yonghu , view ,new String[]{ id, createDate});//把级联的数据添加到view中,并排除id和创建时间字段view.setYonghuId(yonghu.getId());}//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put(data, view);}else {return R.error(511,查不到数据);}}/*** 后端保存*/RequestMapping(/save)public R save(RequestBody AddressEntity address, HttpServletRequest request){logger.debug(save方法:,,Controller:{},,address:{},this.getClass().getName(),address.toString());String role String.valueOf(request.getSession().getAttribute(role));if(StringUtil.isEmpty(role))return R.error(511,权限为空);else if(用户.equals(role))address.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute(userId))));WrapperAddressEntity queryWrapper new EntityWrapperAddressEntity().eq(yonghu_id, address.getYonghuId()).eq(address_name, address.getAddressName()).eq(address_phone, address.getAddressPhone()).eq(address_dizhi, address.getAddressDizhi()).eq(isdefault_types, address.getIsdefaultTypes()).eq(insert_time, address.getInsertTime()).eq(update_time, address.getUpdateTime());logger.info(sql语句:queryWrapper.getSqlSegment());AddressEntity addressEntity addressService.selectOne(queryWrapper);if(addressEntitynull){address.setInsertTime(new Date());address.setCreateTime(new Date());Integer isdefaultTypes address.getIsdefaultTypes();if(isdefaultTypes 2 ){//如果当前的是默认地址把当前用户的其他改为不是默认地址ListAddressEntity addressEntitys addressService.selectList(new EntityWrapperAddressEntity().eq(isdefault_types,2));if(addressEntitys ! null addressEntitys.size()0){for(AddressEntity a:addressEntitys)a.setIsdefaultTypes(1);addressService.updateBatchById(addressEntitys);}}addressService.insert(address);return R.ok();}else {return R.error(511,表中有相同数据);}}/*** 后端修改*/RequestMapping(/update)public R update(RequestBody AddressEntity address, HttpServletRequest request){logger.debug(update方法:,,Controller:{},,address:{},this.getClass().getName(),address.toString());String role String.valueOf(request.getSession().getAttribute(role));if(StringUtil.isEmpty(role))return R.error(511,权限为空);else if(用户.equals(role))address.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute(userId))));//根据字段查询是否有相同数据WrapperAddressEntity queryWrapper new EntityWrapperAddressEntity().notIn(id,address.getId()).andNew().eq(yonghu_id, address.getYonghuId()).eq(address_name, address.getAddressName()).eq(address_phone, address.getAddressPhone()).eq(address_dizhi, address.getAddressDizhi()).eq(isdefault_types, address.getIsdefaultTypes()).eq(insert_time, address.getInsertTime()).eq(update_time, address.getUpdateTime());logger.info(sql语句:queryWrapper.getSqlSegment());AddressEntity addressEntity addressService.selectOne(queryWrapper);address.setUpdateTime(new Date());if(addressEntitynull){// String role String.valueOf(request.getSession().getAttribute(role));// if(.equals(role)){// address.set// }Integer isdefaultTypes address.getIsdefaultTypes();if(isdefaultTypes 2 ){//如果当前的是默认地址把当前用户的其他改为不是默认地址ListAddressEntity addressEntitys addressService.selectList(new EntityWrapperAddressEntity().eq(isdefault_types,2));if(addressEntitys ! null addressEntitys.size()0){for(AddressEntity a:addressEntitys)a.setIsdefaultTypes(1);addressService.updateBatchById(addressEntitys);}}addressService.updateById(address);//根据id更新return R.ok();}else {return R.error(511,表中有相同数据);}}/*** 删除*/RequestMapping(/delete)public R delete(RequestBody Integer[] ids){logger.debug(delete:,,Controller:{},,ids:{},this.getClass().getName(),ids.toString());addressService.deleteBatchIds(Arrays.asList(ids));return R.ok();}/*** 批量上传*/RequestMapping(/batchInsert)public R save( String fileName){logger.debug(batchInsert方法:,,Controller:{},,fileName:{},this.getClass().getName(),fileName);try {ListAddressEntity addressList new ArrayList();//上传的东西MapString, ListString seachFields new HashMap();//要查询的字段Date date new Date();int lastIndexOf fileName.lastIndexOf(.);if(lastIndexOf -1){return R.error(511,该文件没有后缀);}else{String suffix fileName.substring(lastIndexOf);if(!.xls.equals(suffix)){return R.error(511,只支持后缀为xls的excel文件);}else{URL resource this.getClass().getClassLoader().getResource(static/upload/ fileName);//获取文件路径File file new File(resource.getFile());if(!file.exists()){return R.error(511,找不到上传文件请联系管理员);}else{ListListString dataList PoiUtil.poiImport(file.getPath());//读取xls文件dataList.remove(0);//删除第一行因为第一行是提示for(ListString data:dataList){//循环AddressEntity addressEntity new AddressEntity();
// addressEntity.setYonghuId(Integer.valueOf(data.get(0))); //创建用户 要改的
// addressEntity.setAddressName(data.get(0)); //收货人 要改的
// addressEntity.setAddressPhone(data.get(0)); //电话 要改的
// addressEntity.setAddressDizhi(data.get(0)); //地址 要改的
// addressEntity.setIsdefaultTypes(Integer.valueOf(data.get(0))); //是否默认地址 要改的
// addressEntity.setInsertTime(date);//时间
// addressEntity.setUpdateTime(new Date(data.get(0))); //修改时间 要改的
// addressEntity.setCreateTime(date);//时间addressList.add(addressEntity);//把要查询是否重复的字段放入map中//电话if(seachFields.containsKey(addressPhone)){ListString addressPhone seachFields.get(addressPhone);addressPhone.add(data.get(0));//要改的}else{ListString addressPhone new ArrayList();addressPhone.add(data.get(0));//要改的seachFields.put(addressPhone,addressPhone);}}//查询是否重复//电话ListAddressEntity addressEntities_addressPhone addressService.selectList(new EntityWrapperAddressEntity().in(address_phone, seachFields.get(addressPhone)));if(addressEntities_addressPhone.size() 0 ){ArrayListString repeatFields new ArrayList();for(AddressEntity s:addressEntities_addressPhone){repeatFields.add(s.getAddressPhone());}return R.error(511,数据库的该表中的 [电话] 字段已经存在 存在数据为:repeatFields.toString());}addressService.insertBatch(addressList);return R.ok();}}}}catch (Exception e){return R.error(511,批量插入数据异常请联系管理员);}}/*** 前端列表*/IgnoreAuthRequestMapping(/list)public R list(RequestParam MapString, Object params, HttpServletRequest request){logger.debug(list方法:,,Controller:{},,params:{},this.getClass().getName(),JSONObject.toJSONString(params));// 没有指定排序字段就默认id倒序if(StringUtil.isEmpty(String.valueOf(params.get(orderBy)))){params.put(orderBy,id);}PageUtils page addressService.queryPage(params);//字典表数据转换ListAddressView list (ListAddressView)page.getList();for(AddressView c:list)dictionaryService.dictionaryConvert(c, request); //修改对应字典表字段return R.ok().put(data, page);}/*** 前端详情*/RequestMapping(/detail/{id})public R detail(PathVariable(id) Long id, HttpServletRequest request){logger.debug(detail方法:,,Controller:{},,id:{},this.getClass().getName(),id);AddressEntity address addressService.selectById(id);if(address !null){//entity转viewAddressView view new AddressView();BeanUtils.copyProperties( address , view );//把实体数据重构到view中//级联表YonghuEntity yonghu yonghuService.selectById(address.getYonghuId());if(yonghu ! null){BeanUtils.copyProperties( yonghu , view ,new String[]{ id, createDate});//把级联的数据添加到view中,并排除id和创建时间字段view.setYonghuId(yonghu.getId());}//修改对应字典表字段dictionaryService.dictionaryConvert(view, request);return R.ok().put(data, view);}else {return R.error(511,查不到数据);}}/*** 前端保存*/RequestMapping(/add)public R add(RequestBody AddressEntity address, HttpServletRequest request){logger.debug(add方法:,,Controller:{},,address:{},this.getClass().getName(),address.toString());WrapperAddressEntity queryWrapper new EntityWrapperAddressEntity().eq(yonghu_id, address.getYonghuId()).eq(address_name, address.getAddressName()).eq(address_phone, address.getAddressPhone()).eq(address_dizhi, address.getAddressDizhi()).eq(isdefault_types, address.getIsdefaultTypes());logger.info(sql语句:queryWrapper.getSqlSegment());AddressEntity addressEntity addressService.selectOne(queryWrapper);if(addressEntitynull){address.setInsertTime(new Date());address.setCreateTime(new Date());// String role String.valueOf(request.getSession().getAttribute(role));// if(.equals(role)){// address.set// }Integer isdefaultTypes address.getIsdefaultTypes();if(isdefaultTypes 2 ){//如果当前的是默认地址把当前用户的其他改为不是默认地址ListAddressEntity addressEntitys addressService.selectList(new EntityWrapperAddressEntity().eq(isdefault_types,2));if(addressEntitys ! null addressEntitys.size()0){for(AddressEntity a:addressEntitys)a.setIsdefaultTypes(1);addressService.updateBatchById(addressEntitys);}}addressService.insert(address);return R.ok();}else {return R.error(511,表中有相同数据);}}}
ShangpinServiceImpl.java
package com.service.impl;import com.utils.StringUtil;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.util.*;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import com.utils.PageUtils;
import com.utils.Query;
import org.springframework.web.context.ContextLoader;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import com.dao.ShangpinDao;
import com.entity.ShangpinEntity;
import com.service.ShangpinService;
import com.entity.view.ShangpinView;/*** 商品信息 服务实现类*/
Service(shangpinService)
Transactional
public class ShangpinServiceImpl extends ServiceImplShangpinDao, ShangpinEntity implements ShangpinService {Overridepublic PageUtils queryPage(MapString,Object params) {if(params ! null (params.get(limit) null || params.get(page) null)){params.put(page,1);params.put(limit,10);}PageShangpinView page new QueryShangpinView(params).getPage();page.setRecords(baseMapper.selectListView(page,params));return new PageUtils(page);}}
声明 本博客适用于广泛的学术和教育用途包括但不限于个人学习、开发设计产品设计。仅供学习参考旨在为读者提供深入理解和学术研究的材料。