版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于JAVA的线上图书商城系统设计目录TOC\o"1-3"\h\u3947基于JAVA的线上图书商城系统设计 1275921绪论 322281.1课题研究的背景 365511.2课题研究的意义 3304471.3国内外现状 466761.4课题研究的目标 4321411.5课题的组织结构 4125661.6本章小结 5283052相关技术简介 561612.1SSM简介 5305082.2Bootstrap简介 76972.3JSP简介 7292872.4MySQL简介 814212.5本章小结 866453需求分析 9219883.1可行性分析 9201173.1.1硬件以及技术的可行性 9223213.1.2市场的可行性 9155543.1.3经济可行性 9183273.1.4运行可行性分析 919033.2需求描述 9117903.3面向对象分析 10128423.3.1游客的用例分析 10324143.3.2普通用户的用例分析 1032943.3.3管理员用例分析 11198333.4本章小结 12140834系统设计 12286794.1概要设计 12156214.2前台功能详细设计 1389854.2.1用户登录功能设计 13107894.2.2修改个人密码功能设计 14183934.2.3购物车功能设计 14312684.2.4订单管理功能设计 1554384.3后台功能详细设计 16290414.3.1后台管理总流程 16189474.3.2用户管理功能设计 17224604.3.3图书管理功能设计 1729324.3.4订单管理功能设计 18123064.4数据库设计 18162754.4.1数据库概念结构设计 1889484.4.2数据库逻辑结构设计 20259454.4.3数据库表结构设计 21128034.5本章小结 23174485系统功能 23190035.1前台功能实现 23214195.1.1查看主页功能实现 23124975.1.2修改个人密码功能实现 2519625.1.3购物车功能实现 26266715.2后台功能实现 27183415.2.1用户管理功能实现 27219235.2.2图书管理功能实现 29225845.3本章小结 3230141结束语 3327788参考文献 34绪论课题研究的背景在互联网高度发展的现在,互联网可以提高了人们的生活质量,网购已经变为一种人们的固有的消费模式。现在各种网上商店如雨后春笋一般的蓬勃发展,各种品类商品在网上开起了网店。在这种背景下,每个人尤其是年轻人每人都离不开互联网,现在人人都喜欢在网上购物。许多电商网站如拼多多、唯品会等都是卖的各种各样的商品,商品的质量也都参差不齐,所以就想能是否可以有一个电商网站只做一种商品的修改[1]。经过调查发现年轻人占网上购物的百分之九十,而年轻人在学识上比起年纪稍大的人更需要知识的灌溉。而图书是人们获取知识的重要途径。突发奇想,那么可以做一个图书商城网站,一个只售卖图书的平台。这就是我想做一个图书网站的初衷。课题研究的意义在课题确定下来之后,便开始构思本系统对消费者的意义。首先我认为这个网站可以以BS为基础架构的网站[2]。因为BS是浏览器服务架构的,换而言之就是只要能访问浏览器的机器,都能够浏览我们的网站,也就是代表适配性强。本网站的针对性很强,面向的就是年轻人。所以这个网站有先天的受众,然后,网上商城对比与以往的实体书店更加快捷方便。实体书店需要人们到店自己找书籍一般来说都是有了比较感兴趣的书籍再去针对性买书,而且一个实体书店每天接待的人有限,对于书店中的服务人员来说,他们需要去帮客人去找到自己对应的想要购买的书籍,还要对顾客找书时搞乱的书籍整理归位。所以制作图书网站也是很有必要的。本课题的图书商城也是为了解决这个问题所以产生的,现在电商平台即使早已成熟,但是网上只针对与图书或者单一种商品的电商网站还很少,而我的图书商城可以填补这方面的空白。国内外现状随着我国国力的不断发展和中国人民生活的富裕化、小康化,互联网的发展在我国的综合国力的推动下也在飞速发展,由此可知网上购物肯定会有两种模式,其中有一种会是走低端廉价的路线,像平价商店一样走薄利多销的路线;另一种就是针对精英人士走精品路线。网上购物作为新兴的购物模式,正受到年轻人的依赖。在当前互联网环境下互联网正与越来越多的方面像勾连从原来只是发电子邮件、浏览新闻,到如今网上购物,人们开始在网上发展了一种新的生活方式。人们对于崭新的事物总是想要尝试的,如果对于人们的生活有帮助,那么对于人们来说就可以接受这个新鲜事物。在当下的发展趋势下,互联网的发展一定向改变人们的生活方式发展的。所以网上购物即将成为年轻人们的购物常态。网上购物对比传统购物方式有许多优势,比如方便,节省时间成本,商品的种类更多,效率更高。而这几项正是年轻人追求的目标。课题研究的目标本课题的功能主要为了实现图书的线上销售,本系统的核心思想与当前已有的电商网站大同小异,但是简单的种类相比较种类繁多的其它电商平台来说更加容易管理。本项目的特色也在于此,简单大方正是本系统的目标,这也与年轻人追求简便快捷的思想不谋而合。在有着简单大方的前端页面的同时,本系统也要有功能完善的后台系统。希望后台管理员登录后的首页就可以看到同类图书的价格折线图。通过图来对比同类书籍的价格,帮助管理员在给图书定价时更快、更准的制定合理的价格。在后台系统中,在对于图书的管理之外,还有有对于用户以及订单的管理,这是为了方便管理员及时处理客户的订单。总而言之,本系统是一套成熟完善的线上图书售卖系统。课题的组织结构论文一共由五个章节构成,其中五个章节的概要描述分别如下:第一章是绪论。主要是介绍本系统研究的背景,研究本课题的实际意义,国内以及国外本课题的现状,课题研究的目标,和本课题的组织结构。第二章是相关技术简介。详细介绍本课题开发是遇到的技术和所需环境。第三章是需求分析。需求分析是对于本系统需要的功能的实现进行分析,包括需求描述和对于可行性、面向对象、功能性需求、非功能性需求的分析。第四章是系统设计。系统设计是对本系统的实体、各个模块的的详细设计第五章是系统实现。系统实现具体的介绍了模块的各个功能以及如何实现这些功能,并将页面截图和主要的代码展示出来。本章小结本章从本系统的研究背景,系统研究的意义,如今此系统国内外的发展现状、研究的目标、以及组织架构五个方面来说明研发一个界面简单大方、操作简单的图书商城系统对于现在人们来说是具有意义的。相关技术简介图书商城系统是以Java作为蓝本,使用Idea作为集成开发的工具,BS为前端的整体布局做整合SSM框架作为后台的整体框架,使用MySQL作为持久化数据的数据库,使用Navicat作为管理MySQL的工具。本系统使用Java作为开发语言的原因是Java作为当前应用较为广泛的开发语言,有着免费开源,代码规范清楚,与浏览器的适配性强的优点。而使用SSM框架的原因是其对于Java操作数据库进行了简化,是开发人员更简单的去操作数据库,BS则是前端框架中较为稳定的框架,这就是我选择以上开发语言的原因。具体的开发环境见下表2-1。表2-1系统开发环境表开发平台Windows10集成开发环境Idea开发语言Java,Sql,JS数据库MySQL前端技术BootstrapWeb框架LayUiSSM简介Spring是一个面向切面编程的框架,其中的bean工厂方便对于程序进行监控和解耦合等等功能。SpringBean的生命周期如图2-1所示。图2-1SpringBean生命周期原理图SpringMVC把开发中控制器、对象、分派器进行了分离,是各个模块不但操作简单而且耦合度较低。其核心是servlet将请求通过拦截器拦截下来之后,通过的请求会转发到对应的方法。会,再通过方法对于持久化的数据进行操作[3]。SpringMVC原理图如图2-2所示。Mybatis对于操作数据库进行了高度的封装,让使用者对于数据库的操作变得简单易操作[4]。因为Spring有控制反转的特性,开发者可以使用其对代码进行简化开发以及将代码的耦合度降低。由于Spring是面向切面编程的,也可借此来实现对项目中、事物、日志等的控制。Mybatis可以识别用户使用的复杂的SQL语句,使用xml文件减低了代码的耦合度,使代码更加容易维护和修改。由于以上几点优点,在选择数据库操作技术时,选择了Mybatis技术作为本系统的数据操作工具。SpringMVC原理图如图图2-2所示。图2-2SpringMVC原理图Bootstrap简介Bootstrap是现如今被广泛应用的前端框架[5]。通过定义的class引用相应的样式和组件,来实现页面的渲染。Bootstrap在不同的屏幕上会自动调节展示画面,自适应的能力很强。Bootstrap具有大量的web插件,符合大部分开发人员的要求[6]。Bootstrap架构图如图2-3所示。图2-3Bootstrap架构图JSP简介JSP可以在与javaBeans进行结合后分离页面显示与业务逻辑,使得开发时更加高效,优化了开发的流程。JSP会在服务器上会将JSP转化为HTML页面的形式发送服务器[7]。JSP技术的基础是开元、强扩展性以及可以建立动态页面。被广泛应用于开发可移植的应用程序。而可移植是在服务器上忽略某些特定的开发工具的前提。Jsp1.0版本中一些特点,尤其添加了XML的语法和输出缓存等的功能,来减少重定向的BUG[8]。JSP1.1会提供自定义语法标记的机制,可以在任何支持JSP语法的浏览器上运行。[9]。JSP架构如图2-4所示。图2-4JSP架构图MySQL简介MySql在各个大厂商的数据持久化方面被大量的运用。在开发方面,许多人认为MySQL是对于WEB开发中最好的关系型数据库,由此可见MySQL数据库对于开发人员来说确实是相当好的数据持久化工具[10]。关系型数据库为了提高操作数据的灵活性和效率,将不同数据存入不同的表内。而MySQL由于其操作方便成本小的优点,被许多小型网站使用[11]。MySQL中对数据创建索引的方式[12]。使查询数据的操作更加快捷方便。MySQL工作原理图如图2-5所示。2-5MySQL工作原理图本章小结本章介绍了图书管理系统使用到的关键技术SSM、BS、MySQL介绍相关技术的优点,使读者对与技术有相关了解,从而理解使用以上技术的原因。需求分析可行性分析硬件以及技术的可行性普通配置的Linux服务器,对于本系统是足够用了,而技术层面,本系统选择的都是已经成熟的技术,在技术和硬件方面都不存在开发瓶颈。市场的可行性而在二十一世纪,处于互联网时代的各位,对于知识和精神物质的追求也越来越多,而对于新新人类,网上购物也已经是生活常态。对于本系统来说,大大消减这些年轻人消费的时间成本。对于时间观念越来越中的年轻人来说网上购物也必将成为他们购物的首要选择,由此可见,本系统在市场上必将获取年轻人们的喜爱,发展壮大的可能性很高。经济可行性本系统的开发成本并不高,使用的技术也是市面上主流技术,能进行开发的人员选择很多。对于系统刚开始的运营来说,需要的成本也并不高。所以从经济层面来说,本系统的可行性也很高。运行可行性分析本系统的设计也考虑到用户的水平良莠不齐,所以对于操作方式也进行了简单化,使用户更易上手使用。所有运行起来受众群体广,受众面积大,从而运行起来难度并不大。运行可行性高。需求描述为实现本系统的最终目标,把现在市场的同类型的网站了解之后。制定了可行性很高的设计方案,确定系统的设计目标。下面是对本系统所开发的功能进行分析:(1)用户登录需求分析进行购买图书操作之前,需要先通过账号密码进行登录,在注册时会将用户输入的密码通过加密的方式得到密文,为了保护用户的隐私,前端在登录时会将密码加密,后端会加密后的密文,与数据库中的密文进行比较,在账号和密码全部正确后对于用户的操作放行,如果没有完全相同就放行用户的浏览主页面,和注册功能,将其他功能通过拦截器拦截下来,不予通过。(2)修改密码需求分析虽然密码是加密之后放入数据库的,但是一直使用一个密码,在安全性上依旧存在隐患。所以本系统设计时,加入了修改密码功能,从而提高用户账号的安全性。(3)购物车需求分析用户在使用过程中也许会有多本图书想买,所以在设计时加入购物车模块,用来存储用户感兴趣的书,是用户在使用本系统时,有更好的体验,同是为了防止,用户误操作。加入自己不想买的书,对购物车中的图书,添加了删除功能。在用户进入购物车列表页面,确认购物车中图书信息后,可以使用清空购物车或者添加订单功能将购物车提交到订单模块。(4)订单需求分析在用户将购物成为提交到订单页面之后,用户可以在订单页面进行支付,以购买图书。面向对象分析本系统的功能简单的描述,有用户的注册登录,图书、购物车,订单、类别的增删改,主页面的浏览游客的用例分析用户在未注册前可作为游客浏览主页面,想进行图书的购买操作时,需要先注册成为用户,所以对于游客可以进行注册和查看主页面的操作游客用例图如图3-2所示。图3-1游客用例图普通用户的用例分析在进行登录之后,作为用户可以进行,查看主页面修改页面,购物车的管理页面,对自己订单的管理。用户用例图如图3-1所示。图3-2用户用例图用户登录用例分析:登录时前段获取用户登录时输入的密码,加密后传给后端,后端会进行数据库的查询,查询出用户名相同的用户后,将数据库中的密码与前端传过来加密后密码进行对比,如果两者相同,认定登陆成功,没查到相同的用户或者用户密码不正确,认定为失败查看主页用例分析:在主页面通过数据库中的图书创建时间来获取最新图书,将最新图书展示出来,以供用户购买。修改密码用例分析:在用户登录之后,点击修改密码按钮后,前端自动跳转到修改密码界面,进行密码的修改,来保障用户账号的安全性。购物车的用例分析:用户登录后,可以将多本想买书放入购物车中一起购买,从而节省拥护的时间。订单用例描述:订单中主要包含了用户这个订单所购买的图书信息,而且是用户维权的依据。管理员用例分析管理员在登陆之后,主要是为了图书、类别的增删改,和对用户已付款的订单发货。管理员用例图如图3-3所示。图3-3管理员用例图管理员登录用例分析:如果账户名和密码全部相同,认定登陆成功,没查到相同的管理员或者管理员密码不正确,认定为失败,不允许操作。管理员管理用户信息用例分析:管理员可查看用户的基本信息。管理员管理图书信息用例分析:管理员登录后,可以对图书和类别进行操作。管理员管理订单信息用例分析:管理员登录后可以查看所有用户的订单信息,进行发货操作,但不允许对订单进行删除操作。本章小结需求分析是软件开发过程中不可或缺的一部分,在本章对本系统的需求进行了细化,方便进行后续的开发工作。系统设计概要设计概要设计是为了进一步的完善需求分析中的需求,将功能在进行细化。完成各个模块中的各个功能设计将功能模块细分为前台和后台,以及分别包含了那些功能。系统功能模块图如图4-1所示。图4-1总体功能模块图前台功能详细设计在需求分析完成后,需要进一步的对系统进行设计,应对不可控场景下带来的需求标本变更,然后对其作出更细化的分析与调整。在反复考虑以及结合现实生活之后,出于对用户账号的安全性加强,进行用户名和密码双重验证后登录,并对密码进行加密操作。并设计密码修改功能,进一步保护账号安全。为了方便送货上门,会存储用户的基本信息,用户需要保证信息的真实性和有效性。用户登录功能设计登录功能:用户输入账号密码,前端在进行加密后将用户名和密码封装为对象,传递给后端。后端收到对应数据之后,以用户名对数据库进行查询操作,若未查出用户则视为用户名输入错误,若密码不正确,则返回前端提示密码不正确,不允许登录。用户登录流程图如图4-3所示。图4-3用户登录流程图修改个人密码功能设计在修改密码时,当前端发起请求后,后端验证当前是否有用户登录,如判断用户处于未登录状态,不允许修改密码,若用户已登录的话,允许修改。修改密码是前段获取输入框中两次输入是否一致,一致则将新密码传递给后端,不一样提示密码不同。修改完成后默认用户已退出登录,需要重新登陆。用户修改密码流程图如图4-4所示。图4-4用户修改密码流程图购物车功能设计用户在浏览图书界面时将图书添加到购物车中,然后点击我的购物车,进入购物车页面。后端通过当前用户信息,通过购物车表与用户表中的关联信息来查找此用户的相关购物车信息,并将其封装为对象返回前端。前端在列表中展示相关图书信息,用户可以选择删除购物车,清空购物车,和提交订单。在购物车列表中,会展示此购物车的相关图书信息,图书数量,总价。购物车管理流程图如图4-5所示。图4-5购物车管理流程图订单管理功能设计用户登录后可以使用订单的查看和提交订单功能。后端通过当前用户信息,通过用户表与订单表中的关联信息来查找此用户的相关订单信息,并将其封装为对象返回前端。前端在列表中展示相关图订单信息,用户可以选择是否提交订单。订单管理流程图如图4-7所示。图4-7订单管理流程图后台功能详细设计后台管理总流程管理员在登录成功后,进入后台管理系统主页面,然后选择要管理的模块,可管理的模块有用户、图书模块,或者查看订单模块,为用户发货。管理员后台管理流程图如图4-8所示。图4-8后台系统流程图用户管理功能设计管理员登录后可以查看用户的个人信息,方便为用户发货。可以修改用户的信息,来保证用户信息的真实性和有效性。后台管理用户流程图如图4-10所示。图4-10后台用户管理流程图图书管理功能设计管理员登录后,可以对图书模块进行管理,可以对类别和图书进行增删改查操作。图书管理流程图如图4-11所示。图4-11图书管理流程图订单管理功能设计图书管理员在登录后,可以查看订单信息,并根据订单状态,和所选书籍来进行发货操作。订单管理流程图如图4-12所示。图4-12订单管理流程图数据库设计数据库设计是开发过程中特别重要的一部分,要根据详细设计,进行数据库表的设计,从而使操作数据库的操作,更加快速准确,从而简化开发人员的开发过程。数据库概念结构设计本系统的数据库有六个表组成,分别是管理员、图书、品类、订单、用户、二级类别。(1)用户实体属性图包含的属性有:用户名,密码,邮箱,联系方式、住址,如图4-15所示。图4-15用户表图(2)图书实体属性图包含的属性有:图书名称、价格、进价、图片路径、描述、添加的日期等信息如图4-16所示:图4-16图书表图(3)用户实体属性图包含的属性有:品类名和它所对应的二级品类名。品类信息表如表图4-17所示。图4-17品类信息表图(4)用户实体属性图包含的属性有:二级品类名和其上级品类的id及名称。二级品类信息表如表图4-18所示。图4-18二级品类信息表图(5)用户实体属性图包含的属性有:订单价格、订单提交时间、订单状态等信息。订单信息表如图4-19所示。图4-19订单信息表(6)用户实体属性图包含的属性有:图书的数量、图书的id、订单的id等信息。订单商品信息表如表图4-20所示。图4-20订单商品信息表数据库逻辑结构设计数据库本质上就是把现实生活中的东西通过各种属性的描述将其放入机器世界中,数据库的本质就是将能够在现实生活中定位到唯一一个对象的属性放入数据库中,从而利用这些属性之间的关联性,将现实中,不同事物的关系放入机器世界中[14]。系统全局E-R图,如图4-21所示。图4-21图书管理系统全局E-R图数据库表结构设计数据库的作用就是存储当前系统中,所需要的信息,当系统需要时可以随时将其取出,供系统使用。(1)用户信息表包含:用户的账号名称、密码、email邮箱、联系方式、住址等信息。用户信息表如表4-1所示。表4-1用户信息表列名数据类型字段类型长度是否为空约束备注uidint(11)int11NO是系统IDusernamevarchar(255)varchar255YES否用户名passwordvarchar(255)varchar255YES否密码namevarchar(255)varchar255YES否名字emailvarchar(255)varchar255YES否邮箱phonevarchar(255)varchar255YES否手机号addrvarchar(255)varchar255YES否收货地址stateint(11)intYES否状态codevarchar(255)varchar255YES是(2)品类信息表包含:品类名和它所对应的二级品类名。品类信息表如表4-2所示。表4-2品类信息表列名数据类型字段类型长度是否为空约束备注cidint(11)intNO是Idcnamevarchar(255)varchar255YES否名字categorysecondsvarchar(255)varchar255YES否二级类别(3)二级品类信息表包含:二级品类名和其上级品类的id及名称。二级品类信息表如表4-3所示。表4-3二级品类信息表列名数据类型字段类型长度是否为空约束备注csidint(11)intNO是二级类别idcsnamevarchar(255)varchar255YES否二级类别名cidint(11)intYES否类别idcategoryvarchar(255)varchar255YES否类别名(4)图书信息表包含:图书名称、价格、进价、图片路径、描述、添加的日期等信息。图书信息表如表4-4所示。表4-4图书信息表列名数据类型字段类型长度是否为空约束备注pidint(11)intNO是idpnamevarchar(255)varchar255YES否图书名market_pricedecimal(10,2)decimalYES否价格shop_pricedecimal(10,2)decimalYES否商品价格imagevarchar(255)varchar255YES否图片pdescvarchar(255)varchar255YES否描述is_hotvarchar(255)varchar255YES否是否热搜pdatedatetimedatetimeYES否创建时间csidint(11)intYES否类别IDcategorySecondvarchar(255)varchar255YES否二级类别(5)订单信息表包含:订单的总价、订单提交的时间、订单状态等信息。订单信息表如表4-5所示。表4-5订单表列名数据类型字段类型长度是否为空约束备注oidint(11)intNO是Idtotaldouble(255,0)doubleYES否总数ordertimedatetimedatetimeYES否创建时间statevarchar(255)varchar255YES否状态namevarchar(255)varchar255YES否名字phonevarchar(255)varchar255YES否电话addrvarchar(255)varchar255YES否地址uidint(11)intYES否UUID(6)订单商品信息表包含:图书的数量、图书的id、订单的id等信息。订单商品信息表如表4-6所示。表4-6订单商品表列名数据类型字段类型长度是否为空约束备注itemidint(11)intNO是Idcountint(11)intYES否总数subtotaldoubledoubleYES否图书数pidint(11)intYES否商品idoidint(11)intYES否订单id本章小结本章进行了概要设计,然后对前台功能和后台功能对详细设计进行规划,并对数据库进行设计。系统功能前台功能实现查看主页功能实现主页对用户来说是留存用户的手段,所以主页要让用户看着舒服,本系统的页面简单大方。展示的时候,到数据库中将首页需要的内容查询出来在前端展示出来。用户进入页面看到主界面图如图5-1所示。图5-1主界面图核心代码如下:@Override
publicIPage<AssetsAuto>conditions(Pagepage,AssetsAutoDTOparam){
Map<Long,String>groupIdNameMap=groupCacheService.getAllGroupCache()
.stream().collect(Collectors.toMap(GroupCacheDTO::getGroupId,GroupCacheDTO::getGroupName));
Page<AssetsAuto>assetsAutoPage=assetsAutoService.page(page,newQueryWrapper<AssetsAuto>().lambda()
.like(StrUtil.isNotBlank(param.getAssetsIp()),AssetsAuto::getAssetsIp,param.getAssetsIp())
.eq(StrUtil.isNotBlank(param.getAssetsType()),AssetsAuto::getAssetsType,param.getAssetsType())
.eq(ObjectUtil.isNotNull(param.getState()),AssetsAuto::getState,param.getState())
.orderByAsc(AssetsAuto::getState)
.orderByDesc(AssetsAuto::getFindTime)
.orderByDesc(AssetsAuto::getId));
List<AssetsAuto>records=assetsAutoPage.getRecords();
records.stream().forEach(item->item.setGroupName(groupIdNameMap.get(item.getGroupId())));
assetsAutoPage.setRecords(records);
returnassetsAutoPage;
}修改个人密码功能实现在修改密码时,当前端发起请求后,后端验证当前是否有用户登录,如判断用户处于未登录状态,不允许修改密码,若用户已登录的话,允许修改。修改密码是前段获取输入框中两次输入是否一致,一致则将新密码传递给后端,不一样提示密码不同。修改完成后默认用户已退出登录,需要重新登陆。用户修改密码界面如图5-3所示。图5-3修改密码图具体代码实现如下//判断旧密码是否匹配
if(ObjectUtils.isNotEmpty(updateSelfForm.getNewPassword())&&
ObjectUtils.isNotEmpty(updateSelfForm.getOldPassword())){
StringnewPassword=SecurityUtils.decodePwd(Optional.ofNullable(updateSelfForm.getNewPassword()).orElse(""));
StringoldPassword=SecurityUtils.decodePwd(Optional.ofNullable(updateSelfForm.getOldPassword()).orElse(""));
if(!passwordEncoder.matches(user.getUsername(),oldPassword,user.getPassword())){
thrownewDscException("旧密码输入不正确");
}
Systemsystem=systemService.getOne(1);
LocalDateTimenow=LocalDateTime.now();
if(system.getPasswordAge()==0){
longcurrentTime=99999999999999L;
user.setPasswordExpiredTime(Date.from(now.atZone(ZoneId.systemDefault()).toInstant()));
}
now=now.plusDays(system.getPasswordAge()==0?100*365:system.getPasswordAge());
updateUser.setPasswordExpiredTime(Date.from(now.atZone(ZoneId.systemDefault()).toInstant()));
updateUser.setPassword(passwordEncoder.encode(user.getUsername(),newPassword));
user.setPassword(updateSelfForm.getNewPassword());
}else{
user.setPassword(null);
}
updateUser.setId(user.getId());购物车功能实现用户在浏览图书界面时将图书添加到购物车中,然后点击我的购物车,进入购物车页面。后端通过当前用户信息,通过购物车表与用户表中的关联信息来查找此用户的相关购物车信息,并将其封装为对象返回前端。前端在列表中展示相关图书信息,用户可以选择删除购物车,清空购物车,和提交订单。在购物车列表中,会展示此购物车的相关图书信息,图书数量,总价。购物车列表图。如图5-4所示图5-4购物车图具体代码实现如下@Override
publicList<TagInfo>getByResourceId(LongresourceId,IntegerresourceType,StringresourceModules){
List<AssetsTag>assetsTaglist=assetsTagService.list(newQueryWrapper<AssetsTag>().lambda()
.eq(AssetsTag::getResourceId,resourceId)
.eq(AssetsTag::getResourceType,resourceType)
);
List<Long>collect=assetsTaglist.stream().map(item->item.getTagId()).collect(Collectors.toList());
List<TagInfo>tagInfoList=newArrayList<>();
if(CollectionUtil.isNotEmpty(collect)){
tagInfoList=this.list(newQueryWrapper<TagInfo>().lambda()
.in(TagInfo::getId,collect)
);
}
returntagInfoList;
}
}后台功能实现用户管理功能实现管理员登录后可以查看用户的个人信息,方便为用户发货。可以修改用户的信息,来保证用户信息的真实性和有效性。管理员点击用户管理时,前端会发起请求,访问后端代码,service层回去数据库中找到系统所需数据,然后封装成对象,放入List集合返回给前端页面如图5-5所示图5-5用户管理图具体代码实现如下publicUserupdateSelf(UserUpdateSelfQueryupdateSelfForm,Stringusername){
//判断是否有权限修改当前用户信息
if(ObjectUtils.isEmpty(updateSelfForm.getUsername())||
!username.equals(updateSelfForm.getUsername())){
thrownewDscException();
}
if(StringUtils.isNotBlank(updateSelfForm.getMobile())){
Usermobile=userMapper.selectUserByMobile(updateSelfForm.getMobile());
if(ObjectUtils.isNotEmpty(mobile)&&!mobile.getUsername().equals(updateSelfForm.getUsername())){
thrownewDscException("已存在同手机号码,请更换手机号码");
}
}
if(StringUtils.isNotBlank(updateSelfForm.getDingCount())){
UserdingUser=userMapper.selectUserByDingCount(updateSelfForm.getDingCount());
if(ObjectUtils.isNotEmpty(dingUser)&&!dingUser.getUsername().equals(updateSelfForm.getUsername())){
thrownewDscException("已存在同钉钉号,请更换钉钉号");
}
}
UserupdateUser=updateSelfForm.toPo(User.class);
QueryWrapper<User>eq=newQueryWrapper<User>().eq("username",updateSelfForm.getUsername());Useruser=this.getOne(eq);
//判断旧密码是否匹配
if(ObjectUtils.isNotEmpty(updateSelfForm.getNewPassword())&&
ObjectUtils.isNotEmpty(updateSelfForm.getOldPassword())){
StringnewPassword=SecurityUtils.decodePwd(Optional.ofNullable(updateSelfForm.getNewPassword()).orElse(""));
StringoldPassword=SecurityUtils.decodePwd(Optional.ofNullable(updateSelfForm.getOldPassword()).orElse(""));
if(!passwordEncoder.matches(user.getUsername(),oldPassword,user.getPassword())){
thrownewDscException("旧密码输入不正确");
}
Systemsystem=systemService.getOne(1);
LocalDateTimenow=LocalDateTime.now();
if(system.getPasswordAge()==0){
longcurrentTime=99999999999999L;
user.setPasswordExpiredTime(Date.from(now.atZone(ZoneId.systemDefault()).toInstant()));
}
now=now.plusDays(system.getPasswordAge()==0?100*365:system.getPasswordAge());
updateUser.setPasswordExpiredTime(Date.from(now.atZone(ZoneId.systemDefault()).toInstant()));
updateUser.setPassword(passwordEncoder.encode(user.getUsername(),newPassword));
user.setPassword(updateSelfForm.getNewPassword());
}else{
user.setPassword(null);
}
updateUser.setId(user.getId());
booleanisSuccess=this.updateById(updateUser);
iUserIpService.removeByUserId(updateUser.getId());
iUserIpService.saveBatch(updateUser.getId(),updateUser.getIps());
if(ObjectUtils.isNotEmpty(user.getDataPermission())&&user.getDataPermission().size()>0){
iDataPermissionService.removeByUserId(user.getId());
}
if(ObjectUtils.isNotEmpty(user.getDataPermission())&&user.getDataPermission().size()>0){
iDataPermissionService.saveBatch(user.getId(),user.getDataPermission());
}
returnupdateUser;
}/***后台用户查询**@return*/@RequestMapping("/adminUserController/findAllByPage")publicStringfindAllByPage(HttpServletRequestrequest,intpage){PageBean<AdminUser>pageBean=adminUserService.pageAdminUser(page);request.getSession().setAttribute("pageBean",pageBean);return"/admin/adminuser/list";}图书管理功能实现如果管理员选择对图书模块进行管理,首先需要选择对图书模块下的那个模块进行管理,根据不同的模块,前端调用不同的接口,去数据库中找到不同的数据。以二级类别为例,首先到数据库中查找类别信息根据请求查询出所有的类别信息封装之后返回给前端分页展示,若信息超过十条,默认为十条一页。如果点击编辑按钮前端自动跳转到修改页面,将查到的信息自动填入淑如框中,管理员对应进行修改,修改之后,点击保存按钮,将修改后的数据持久化到对应的数据库表中。如图5-6所示。图5-6图书管理界面图具体代码如下:publicIPage<Sql>findPage(SqlQuerysql){
List<String>dataServiceIpByUserPerm=assetsInformationService.getDataServiceIpByUserPerm(SessionUtils.getUserContext().getUsername());
if(CollectionUtil.isEmpty(dataServiceIpByUserPerm)){
Pagepage=this.page(sql.getPage());
returnpage;
}
QueryWrapper<Sql>sqlQueryWrapper=newQueryWrapper<>();
sqlQueryWrapper.eq(sql.getId()!=null&&sql.getId()>0,"id",sql.getId())
.eq(StringUtils.isNotBlank(sql.getDatabase()),"database",sql.getDatabase())
.eq(ObjectUtils.isNotEmpty(sql.getOperationTypeId()),"operation_type_id",sql.getOperationTypeId())
.eq(ObjectUtils.isNotEmpty(sql.getSqlGroupId()),"sql_group_id",sql.getSqlGroupId())
.in(CollectionUtil.isNotEmpty(dataServiceIpByUserPerm),"database",dataServiceIpByUserPerm)
.apply(StringUtils.isNotBlank(sql.getSqlTemplates()),"sql_templatesilike{0}","%"+sql.getSqlTemplates()+"%")
.orderByDesc("created_time");
List<Sql>list=this.list(sqlQueryWrapper);
Pagepage=this.page(sql.getPage(),sqlQueryWrapper);
List<Sql>sqls=page.getRecords();
for(Sqls:sqls){
if(s==null){
continue;
}
StatisticDataone=statisticDataService.getOne(newQueryWrapper<StatisticData>().lambda()
.eq(StatisticData::getStatisticType,StatisticTypeEnum.SQL_ASSETS_WARN.code)
.eq(StatisticData::getStatisticDimension,s.getSqlId()));
List<TagInfo>assetsTag=assetsTagService.getAssetsTag(s.getId(),AssetsTagTypeEnum.SQL.code);
s.setTagInfos(assetsTag);
QueryWrapper<AssetsInformation>assetsInformationQueryWrapper=newQueryWrapper<>();
assetsInformationQueryWrapper.eq(StringUtils.isNotBlank(s.getDatabase()),"ip",s.getDatabase())
.eq("state",AssetsInformationStateEnum.ADD.type);
List<AssetsInformation>assetsInformations=assetsInformationMapper.selectList(assetsInf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 龙岩市2025届数学三下期末质量跟踪监视试题(含解析)
- 齐齐哈尔市2025-2026学年数学四年级第二学期期中考试试题(含答案解析)
- 黑龙江省齐齐哈尔市梅里斯达斡尔族区2025年四年级数学下学期期末综合测试试题含答案解析
- 黑龙江省黑河市爱辉区2025届数学三下期末联考试题含解析
- 2025广东海丰深燃天然气有限公司招聘笔试历年备考题库附带答案详解
- 2025广东广州农商行整改督导岗社招笔试历年典型考题及考点剖析附带答案详解
- 2025广东农信校园招聘预笔试历年典型考题及考点剖析附带答案详解
- 2025年黄冈农商行新员工社会招录笔试历年典型考题及考点剖析附带答案详解
- 2025年荆州农商行新员工社会招录笔试历年典型考题及考点剖析附带答案详解
- 2025年福建泉州石狮园区开发建设有限公司招聘工作人员3人笔试历年典型考点题库附带答案详解
- 2026年高考广西卷物理高考真题(解析版)
- 公司档案管理办法及实施细则
- 广东省佛山市2025-2026学年高一下学期期末考试化学试卷
- 高密度集成电路制造环境紧急预案
- 高血压患者的健康教育内容
- 餐厨垃圾车收运工作制度
- 北京市2025国家能源局信息中心招聘应届毕业生2人笔试历年参考题库典型考点附带答案详解
- 水洗砂、碎石采购方案投标文件(技术标)
- 上海高校分类评价指标(试行)
- 国土规划股工作制度
- 2026年县乡教师选调进城《教育学》测试卷含完整答案详解【各地真题】
评论
0/150
提交评论