@TOC
ssm467基于JAVA语言的校园事务自助指南服务系统+vue
绪论
1.1研究背景与意义
1.1.1研究背景
如今,互联网几乎遍布于世界的各个角落,人工智能、大数据占据的越来越重要的社会地位,比如疫情期间,通过大数据技术进行筛查,确定哪些人员无接触史,哪些人员需要重点观察,由此可以在极短的时间内,以最快的速度对疫情进行防控。在这个大背景环境的推动下,本人通过学习Java语言、MySQL数据库、SSM框架等相关的计算机技术,打好坚实的技术基础,方便后期对系统进行研发[1]。而后再通过对系统进行需求分析、可行性分析、总体功能设计等工作准备,确定系统的总体功能需求,方便接下来详细地系统功能模块进行设计和实现,最后成功的研发了一款基于Java语言的校园事务自助指南服务系统。本系统改善了传统的管理模式,将原先的手工记录和管理信息,改进为使用计算机存储和管理信息记录,极大地方便了工作人员对相关数据进行处理,为学校节约了不少的员工费用和管理开销,并且能够在较短的时间内响应用户的需求,这种便捷的操作,对于用户来说可以节省了不少时间和精力,也省去了不少的麻烦,极大了方便了用户。
1.1.2研究意义
传统的事务自助指南服务模式,主要是以人力为主进行管理和控制,由工作人员负责登记用户信息,再通过对照之前的信息记录,确定是否给用户提供相关的使用需求,以及如何提供能让用户满意的使用需求。这种管理模式已经适应不了时代的变化了,正在不断地走下坡路,并且逐步被信息化管理模式所取代。所谓的信息化管理模式,是现在主流的一种管理模式,其通过与计算机技术相结合的方式,对行业的整个工作模式和服务流程进行改进和完善。其主要通过使用计算机等设备,将工作服务流程电子化,并且进行存储记录,用以提高行业整体的服务水平。结合使用计算机技术,本人研发出一款基于Java语言的校园事务自助指南服务系统,采用电子化的方式对数据信息进行存储,便于工作人员对相关信息进行记录和管理,有利于提高学校的工作运营效率以及工作人员的管理速度,以此更好的满足用户的相关需求,最终达到提升用户的使用感受的目的,由此可见设计和实现本系统具有重要的意义和价值。
1.2国内外研究现状
1.2.1国外研究现状
美国是最先发展计算机技术的众多国家之一,早在上个世纪,美国就快速的将计算机技术发展起来,并且将其运用在军事、医院、学校、社会服务等场所。日本、德国等国家紧随其后,不断地发展和完善计算机技术,侧重将医疗、社会服务等领域与计算机技术相结合[2]。而后随着社会的发展与进步,计算机技术逐渐趋于成熟。许多发达国家在探索将计算机技术应用于各行各业中时,从另一个角度来看,也在不断地推进学校的信息化管理进程,使得学校管理也变得更加网络化、信息化了。有许多专家表示,可以结合使用图像处理软件、人工智能技术等相关工具,深度地分析学校管理系统,主要从简化运行操作,加设功能模块,美化系统界面,保障数据安全等方面,更深层次地提升和优化系统,并且尽可能地在理想状态下做到实时的信息共享[3]。
1.2.2国内研究现状
国内的计算机技术的发展虽然晚于国外,尤其是美国、英国、德国等发达国家。但是我国的计算机技术发展势头非常迅猛,近些年,也逐渐走向成熟和完善的阶段。现在,选择网上购物已经成为人们日常生活的一种常态趋势,当然这也离不开对于天猫、支付宝、微信等应用软件的使用[4]。许多企业结合使用了云计算、人工智能等先进的计算机技术,自主研发了行业相关的信息管理系统,使得计算机技术越来越成熟,系统功能越来越完备。结合计算机技术,采用主流的B/S开发结构模式开发一款基于Java语言的校园事务自助指南服务系统。由此,本系统能够支持工作人员随时随地的通过使用浏览器进行访问操作,支持随时随地对相关的事务自助指南服务进行管理,便于及时为用户提供一定的功能服务。并且所设计的系统基本上能够符合用户的客观使用需求,有利于充分协调学校的人力、财力、物力等资源,不断提高学校管理质量和水平。
1.3研究内容与方法
1.3.1研究内容
本文首先介绍了校园事务自助指南服务系统的研究背景与意义,其次介绍了系统的总体功能设计,接着将总体功能设计拆分成了各个功能子模块,然后对每一个小的功能子模块进行了详细设计,最后介绍了系统的功能模块展示结果和测试结果。系统主要分为管理员角色和用户角色,具体的功能设计包括注册登录管理、用户信息管理、指南信息管理、留言信息管理等模块。注册登录管理功能是新用户在使用系统前,需要通过注册步骤,登记详细的信息资料,而后再通过输入正确的账号和密码,成功登录系统后,即可通过一系列的操作来满足自己的相关需求。用户信息管理功能是管理相关的用户信息资料,管理人员根据现实情况的需要,选择性的对用户信息记录进行更新处理。指南信息管理是管理相关的指南信息记录,保存详情的指南情况,方便及时响应用户的服务请求。留言信息管理是管理相关的留言信息记录,方便相关人员及时查看留言信息和回复内容,如果遇到异常的留言信息,可以及时对其进行处理,在较短的时间内解决问题,提高用户的使用体验。
1.3.2研究方法
本系统采用B/S结构,在idea开发平台上,通过使用Java语言设计系统相关的功能模块,MySQL数据库管理系统相关的数据信息,并且对其进行必要的管理和控制。系统设计的最关键的环节,则是需要通过SSM框架设计系统功能架构,再通过Tomcat服务器将系统发布到浏览器上,以便相关用户的操作和使用。本系统的设计和实现促进了学校的信息化建设,有利于简化相关人员工作流程,提高工作效率,提升工作幸福感。
1.4论文的组织结构
基于Java语言的校园事务自助指南服务系统的设计与实现大致可以被分成七个章节,每一个章节的具体内容如下:
第一章为绪论,本章主要介绍了系统的研究现状、背景依据等内容。根据本章所介绍的研究现状、研究背景等内容,了解当前相关的系统软件产品的实际研究情况,再通过介绍相关的研究内容以及研究方法等内容,总体概括系统的整个开发流程和实现步骤,为系统提供可靠的理论依据和技术支持。
第二章为相关技术介绍,本章主要介绍了开发所使用的相关技术。本系统主要使用的开发技术包括Java语言、SSM框架、MySQL数据库等,并且所使用的开发模式为B/S结构。其中,Java语言具有跨平台性,可移植性高,可以支持在不同的浏览器上运行本系统,MySQL数据库占用内存少,执行速度快,对于中小型系统的数据管理是非常好的选择。
第三章为系统分析,本章主要介绍了需求分析、可行性分析等内容。根据需求分析,确认使用者对系统的实际使用需求,再通过对系统进行可行性分析,重点分析系统研发的实际意义和使用价值,系统性能的稳定性和功能操作的便捷性,以及成功投入市场的可能性。
第四章为系统设计,本章主要介绍了系统的总体功能设计、数据库设计等内容。通过介绍系统的总体功能设计,总体规划系统的功能模块,为实现系统提供参考依据和设计思路,做好功能设计的准备工作。再通过介绍数据库设计,设计相关的数据二维表格存放和管理与系统有关的数据信息,便于相关人员管理与系统有关的数据信息,维护和更新数据信息的安全。
第五章为系统实现,系统实现阶段主要介绍了用户信息管理、指南信息管理、留言信息管理等功能模块。通过前面介绍的需求分析、总体功能设计、数据库设计等相关内容,实现系统的具体功能设计。对系统的各个功能模块进行设计和实现的过程,就是具体的系统实现过程,在整个系统开发过程中,这一阶段是极为重要,直接关系到用户对系统的使用感受。
第六章为系统测试,本章主要介绍了测试功能、结果分析等相关内容。系统测试阶段通过采用功能测试的方式,测试所设计的系统功能模块能否正常打开并使用,在系统运行过程中是否发生异常,如运行异常、数据异常、结果异常等,并且根据测试结果,给出相应的测试总结,由此得出相关结论,说明系统是否达到预期要求、设计目的。
2相关技术介绍
2.1 B/S结构
就软件开发的现状而言,目前主要使用的系统开发结构模式大致可以分为C/S模式和B/S模式[5]。其中,C/S模式全称为客户端/服务器模式,B/S模式全称为浏览器/服务器模式。用户在使用基于C/S模式开发的系统时,必须下载相应的客户端,即应用程序,才能操作和使用软件系统的相关功能模块。从使用者的角度来看,由于下载和安装客户端的步骤比较繁琐,期间还需要确保下载网速的稳定性,以及安装步骤的正确性,进而增加了用户放弃使用该系统的可能性,由此可见C/S模式具有很大的局限性。
由于C/S模式适用于小范围的局域网,并且具有一定的通信效率,所以在以前系统规模很小的时代,主要使用C/S模式对系统开发。随着时代地发展以及社会地进步,C/S模式也越来越满足不了开发者的设计需要,以及使用者的使用需求[6]。当下,C/S模式已经满足不了实际的系统程序设计要求,由此,B/S模式以C/S模式为基础而被提出,并且在近些年逐渐发展成为主流的开发结构模式。在B/S模式下开发的系统,不再需要用户下载和安装相应的应用程序,直接通过使用浏览器,输入正确的网站地址,以访问网站的形式实现系统的相关功能操作,这一特点对C/S模式下的开发设计做出了极大地改进,当然,使用本系统的前提是确保账号和密码是合法的。
2.2 Java语言
Java语言是由美国sun公司提出的一种面向对象的程序设计语言,它拥有着优秀的技术体系结构。目前在市场上,很大一部分的应用系统主要使用Java语言进行开发[7]。Java语言具有简单易懂,操作方便,健壮性强等优点,开发人员能够的在短时间内理解和掌握Java语言,并将其运用到具体的系统开发过程中学。针对于系统内存管理问题,Java语言为解决这类问题,内部提供了垃圾回收机制。为了极大地简化了开发编程的难易程度,Java语言还将C语言中的指针,改进成了引用,所以受到了很多开发人员的喜爱。Java语言还具有跨平台性的特点,意味着它的可移植性非常高,这一特点有利于开发人员更新和维护相关代码,由它所开发的系统可以支持在不同的浏览器中打开。因为使用Java开发的系统兼容性较强,代码通用性较高,为了后期方便对系统进行完善和维护,所以本人最终选择使用Java语言开发本系统。
2.3 SSM框架
SSM框架主要由Spring、SpringMVC、MyBatis这三个框架所集成的,是现在比较流行的一种Java开发框架,能够适用于大中型的应用程序的设计和搭建。Spring是前几十年前兴起的一种轻量级的、开源的Java开发框架,使用它可以解决相关的系统对象创建和对象依赖问题,并且也可以将高耦合的系统分解为低耦合的多个功能模块,方便对系统模块进行明确的分工,对功能代码进行理解和修改,这就极大地减轻了设计人员的开发压力[8]。SpringMVC框架是基于Spring框架而被提出的,它以MVC三层架构为核心,对Spring的相关技术进行了整合,主要针对于Web端进行技术架构,通过对相关的请求处理进行细化处理,用来响应用户的使用请求。MyBatis框架是一种开源的Java持久层框架,它改进了手动设置参数和获取结果记录的方式,通过支持对数据库进行存储过程、高级映射等处理,使得数据库的操作更加定制化、透明化,因此降低了数据库访问的复杂性,提高了开发的工作效率。
2.4 MySQL数据库
MySQL数据库是目前使用较多的关系型数据库。因为其具有开源免费、占用内存少、安装简单、操作便捷、使用灵活等优点,所以经常被运用于中小型的系统开发中[9]。MySQL数据库可以支持多线程,在同一个时间内,能够同时响应多个用户的使用需求。MySQL数据库还自带了优化器,方便设计人员在 使用过程中,快速的查询相关的数据信息。除此之外,SQL server数据库在当下也是使用比较频繁的,它在数据安全、系统稳定等方面还是比有所保障,但是由于其收费使用、占用内存大、操作复杂、维护成本高, 一般适用于中型及以上的系统开发中。MySQL数据库也有着许多的应用程序接口,以供相关的编程语言使用,编写的代码具有极高的通用性和维护性,并且MySQL数据库能够迅速的处理上千条数据记录,在系统故发生障时,能通过日志文件快速恢复。MySQL数据库与SQL server数据库相比较,综合考虑成本开销、占存大小、代码通用、数据维护、操作难易程度等方面,MySQL数据库占有很大的优势,在数据库设计人员的眼中,MySQL数据库的实际运用价值极高。
3系统分析
3.1系统的需求分析
需求分析阶段是设计系统功能模块的总方向,可以这样来说,系统的整个的开发流程以及设计进度,基本上都是以需求分析为基本依据的[10]。需求分析阶段可以确定系统的基本功能设计,以及在最后的系统验收阶段,再通过对需求分析报告进行对比,验证系统的功能设计是否合理,能否满足用户的基本需要,最终判断总结系统是否成功现实。本文主要通过问卷调查的方式,来分析校园事务自助指南服务系统所需要的相关功能[11]。根据调查结果显示,系统用户主要有两种类型,一种是以使用为主要目的的用户角色类型,另一种是以管理为主要目的的管理员角色类型。本系统主要功能需求包括用户信息管理、指南信息管理、留言信息管理等模块。其中,密码信息、用户信息、指南信息等都是非常重要的数据记录,在系统设计的过程中,需要进行一定的加密处理,确保数据安全性,切实的保护好用户的重要信息。
3.2系统的可行性分析
3.2.1经济可行性
对系统进行经济可行性分析,也可以被称为对系统进行经济可行性研究,它是从社会的经济发展出发,通过研究整个的系统可行性,对成本收益情况进行全面地、具体地分析,并且根据所分析的可行性报告,为相关的投资者提供最科学的决策理论和最优的投资方案。本系统的开发促进了学校的信息化管理,管理人员可以直接通过在浏览器上发布校园事务自助指南服务系统的网站地址,即可用户根据一定的需要,有选择的对系统相关功能进行操作。这种方式打破了时间和空间的限制,可以使得学校在较短的时间内最大化地管理事务自助指南服务的相关信息。并且本系统所使用的开发技术和相关工具,大部分是开源的、免费的,所以可以节约很大一笔开发成本。综合上述内容分析可知,本系统的实现在经济层面上是具备可行性的。
3.2.2技术可行性
本系统是基于Java语言而进行开发的,因为Java语言容易学习、使用简单、可移植性高、稳定性强等特点,所以许多的开发技术人员均喜欢使用Java语言进行系统设计,市场上很多应用程序是由Java语言进行开发实现的。并且Java语言还具有跨平台的优点,这意味着所设计的系统是与平台无关的,也就说明由Java语言开发的系统可以支持在不同的浏览器上运行和使用。本系统使用的是MySQL数据库,相同条件下,对比其他数据库,MySQL数据库语法简单,数据库设计人员可以尽可能快的对其学习和掌握,所以一直是中小型系统最优的数据库选择。MySQL数据库还具有占用系统内存少、功能齐全、响应速度快、使用不收费等特点,能够在极短时间内处理上千条信息记录,所以能够保证系统可以高效地运行和工作。综合上述内容分析可知,系统的实现在技术层面上是具备可行性的。
3.2.3操作可行性
如今,人们的日常生活已经离不开互联网的使用,在一定程度上,行业的信息化建设促进着社会的发展。人们通过使用手机上的应用程序,比如,通过使用电子商务系统,可以实现网上购物、在线支付等功能;通过使用国家官方网站,可以查看最新消息,申报个人业务;通过使用医院管理系统,可以进行网上预约挂号,在线查看体检报告等操作。在这些应用的背景下,本系统使用的是B/S开发结构模式,网站界面以人性化的设计为主,具有美观友好、交互性好等优点,用户不需要掌握一定的编程技术,直接通过对系统进行简单的功能操作,即可满足自己的使用需求。本系统还设计了一些提示信息,便于用户更好的理解系统相关功能,较快的以正确的操作方式来使用系统。综合上述内容分析可知,系统的实现在操作层面上是具备可行性的。
4系统设计
4.1系统的总体功能设计
系统的总体功能设计,是需求分析的下一个阶段,是系统实现的上一个阶段,它是系统详细功能设计的一个大方向,也就是说系统的各类子功能模块的设计,都是以总体功能设计为目标而进行的。通过对系统进行需求分析可知,可以大致了解系统具体所需要的相关功能。本系统主要的功能需求包括用户信息管理、指南信息管理、留言信息管理等模块。本系统的总体功能设计图如图4-1所示。
校园事务自助指南服务系统
管理员管理
公告管理
指南信息管理
基础数据管理
用户管理
管理员修改
管理员新增
用户
信息添加
用户
信息删除
用户信息修改
基础数据添加
基础数据修改
基础数据删除
公告添加
公告删改
公告删除
指南信息添加
指南信息修改
指南信息删除
轮播图管理
轮播图修改
轮播图删除
轮播图添加
图4.1系统总体功能设计图
4.2数据库设计
4.2.1概念设计
本系统使用轻量级的MySQL数据库,对系统相关的数据信息进行管理和维护[12]。数据库设计阶段主要可以被分为两个阶段,分别为概念设计和逻辑设计阶段。在整个的数据库设计的过程中,两个阶段起到作用是不同的,概念设计阶段是实现基础,逻辑设计阶段最终目标。概念设计阶段主要通过使用实体-联系图(E-R图)的方式,将现实世界中用户的相关需求抽象化为虚拟世界中的概念模型。本人通过设计E-R图,详细的对系统中的实体以及实体之间的联系进行了表达。各实体信息的E-R图如图4.2、图4.3、图4.4、图4.5、图4.6、图4.7、图4.8所示,系统总体E-R图如图4.9所示。
图4.2管理员信息E-R图
图4.3用户信息E-R图
图4.4教师信息E-R图
图4.5指南信息E-R图
图4.6公告信息E-R图
图4.7留言交流信息E-R图
图4.8留言信息E-R图
图4.9系统总体E-R图
4.2.2逻辑设计
逻辑设计阶段主要的工作是将概念设计中的E-R图,转换成方便系统进行存储和管理的二维表格形式[13]。这一阶段也可以被称为数据库的详细设计,其直接关系到系统功能模块的正常运行、数据信息的正常更新等。在设计过程中,需要充分考虑数据库的规范性和合理性,使得能够满足系统的功能和性能需求。本系统相关的数据表格设计内容如下所示。
表4.1 管理员信息表
|字段名称|字段说明|数据类型|是否主键|是否允许空| | - | - | - | - | - | |id|编号|int|YES|NO| |username|用户名|varchar|NO|Yes| |password|密码|varchar|NO|Yes| |role|角色|varchar|NO|Yes| |addtime|新增时间|date|NO|Yes|
表4.2 用户信息表
|字段名称|字段说明|数据类型|是否主键|是否允许空| | - | - | - | - | - | |id|编号|int|YES|NO| |username|账号|varchar|NO|Yes| |password|密码|varchar|NO|Yes| |yonghu_name|用户姓名|varchar|NO|Yes| |sex_types|性别|varchar|NO|Yes| |yonghu_id_number|身份证号|varchar|NO|Yes| |yonghu_phone|手机号|varchar|NO|Yes| |yonghu_photo|照片|varchar|NO|Yes| |yonghu_delete|假删|varchar|NO|Yes| |create_time|创建时间|date|NO|Yes|
表4.3 教师信息表
|字段名称|字段说明|数据类型|是否主键|是否允许空| | - | - | - | - | - | |id|编号|int|YES|NO| |username|账号|varchar|NO|Yes| |password|密码|varchar|NO|Yes| |jiaoshi_name|教师姓名|varchar|NO|Yes| |sex_types|性别|int|NO|Yes| |jiaoshi_id_number|身份证号|varchar|NO|Yes| |jiaoshi_phone|手机号|varchar|NO|Yes| |jiaoshi_photo|照片|varchar|NO|Yes| |jiaoshi_delete|假删|int|NO|Yes| |create_time|创建时间|date|NO|Yes|
表4.4 指南信息表
|字段名称|字段说明|数据类型|是否主键|是否允许空| | - | - | - | - | - | |id|编号|int|YES|NO| |zhinan_name|信息标题|varchar|NO|Yes| |zhinan_types|信息类型|int|NO|Yes| |zhinan_photo|信息封面|varchar|NO|Yes| |jiaoshi_id|教师|int|NO|Yes| |yonghu_id|用户|int|NO|Yes| |zhinan_yesno_types|审核结果|int|NO|Yes| |zhinan_content|详情|varchar|NO|Yes| |zhinan_delete|假删|int|NO|Yes| |create_time|创建时间|date|NO|Yes|
表4.5 公告信息表
|字段名称|字段说明|数据类型|是否主键|是否允许空| | - | - | - | - | - | |id|编号|int|YES|NO| |news_name|公告标题|varchar|NO|Yes| |news_types|公告类型|int|NO|Yes| |news_photo|公告图片|varchar|NO|Yes| |insert_time|公告时间|date|NO|Yes| |news_content|公告详情|varchar|NO|Yes| |create_time|创建时间|date|NO|Yes|
表4.6 留言交流信息表
|字段名称|字段说明|数据类型|是否主键|是否允许空| | - | - | - | - | - | |id|编号|int|YES|NO| |forum_name|帖子标题|varchar|NO|Yes| |yonghu_id|用户编号|int|NO|Yes| |jiaoshi_id|教师|int|NO|Yes| |users_id|管理员|int|NO|Yes| |forum_content|发布内容|varchar|NO|Yes| |super_ids|父编号|int|NO|Yes| |forum_state_types|帖子状态|int|NO|Yes| |insert_time|发帖时间|date|NO|Yes| |update_time|修改时间|date|NO|Yes| |create_time|创建时间|date|NO|Yes|
表4.7 留言信息表
|字段名称|字段说明|数据类型|是否主键|是否允许空| | - | - | - | - | - | |id|编号|int|YES|NO| |zhinan_id|指南信息|int|NO|Yes| |yonghu_id|用户|int|NO|Yes| |zhinan_liuyan_text|留言内容|varchar|NO|Yes| |insert_time|留言时间|date|NO|Yes| |reply_text|回复内容|varchar|NO|Yes| |update_time|回复时间|date|NO|Yes| |create_time|创建时间|date|NO|Yes|
5系统实现
5.1个人中心
通过设计的个人中心功能模块,用户可以选择修改账号密码,查看个人资料信息,通过不定期的对个人账户密码进行更新,保障个人信息安全,修改密码界面设计如图5.1所示,个人信息界面设计如图5.2所示。
图5.1修改密码界面
图5.2个人信息界面
5.2管理员管理
通过设计的管理员管理功能模块,管理用户可以管理相关的管理员信息资料,比如进行查看管理员详细资料,修改管理员角色,删除已经注销的管理员信息记录等操作,管理员管理界面设计如图5.3所示。
图5.3管理员管理界面
5.3教师管理
通过设计的教师管理功能模块,管理用户可以管理相关的教师信息资料,比如进行查看教师详细资料,修改教师联系方式,删除已经注销的教师信息记录等操作,教师管理界面设计如图5.4所示。
图5.4教师管理界面
5.4用户管理
通过设计的用户管理功能模块,管理用户可以管理相关的用户信息资料,比如进行查看用户详细资料,修改用户图片,删除已经注销的用户信息记录等操作,用户管理界面设计如图5.5所示。
图5.5用户管理界面
5.5指南信息管理
通过设计的指南信息管理功能模块,管理用户可以管理相关的指南信息信息资料,比如进行查看指南信息审核状态,修改指南信息封面,删除已经失效的指南信息记录等操作,指南信息管理界面设计如图5.6所示。
图5.6指南信息管理
5.6指南信息留言管理
通过设计的指南信息留言管理功能模块,管理用户可以管理相关的指南信息留言信息资料,比如进行查看指南信息留言信息标题,修改指南信息留言信息封面,删除已经失效的指南信息留言信息记录等操作,指南信息留言管理界面设计如图5.7所示。
图5.7指南信息留言管理界面
5.7留言交流管理
通过设计的留言交流管理功能模块,管理用户可以管理相关的留言交流信息资料,比如进行查看留言交流信息帖子内容,修改留言交流信息帖子标题,删除已经失效的留言交流信息记录等操作,留言交流管理界面设计如图5.8所示。
图5.8留言交流管理界面
5.8公告类型管理
通过设计的公告类型管理功能模块,管理用户可以管理相关的公告类型信息资料,比如进行查看公告类型编码,修改公告类型名称,删除已经失效的公告类型信息记录等操作,公告类型管理界面设计如图5.9所示。
图5.9公告类型管理界面
5.9信息类型管理
通过设计的信息类型管理功能模块,管理用户可以管理相关的信息类型信息资料,比如进行查看信息类型编码,修改信息类型名称,删除已经失效的信息类型信息记录等操作,信息类型管理界面设计如图5.10所示。
图5.10信息类型管理界面
5.10公告管理
通过设计的公告管理功能模块,管理用户可以管理相关的公告信息资料,比如进行查看公告标题,修改公告类型,删除已经失效的公告信息记录等操作,公告管理界面设计如图5.11所示。
图5.11公告管理界面
5.11轮播图管理
通过设计的轮播图管理功能模块,管理用户可以管理相关的轮播图信息资料,比如进行查看轮播图名称,修改轮播图值,删除已经失效的轮播图信息记录等操作,轮播图管理界面设计如图5.12所示。
图5.12轮播图管理
DictionaryServiceImpl.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.DictionaryDao;
import com.entity.DictionaryEntity;
import com.service.DictionaryService;
import com.entity.view.DictionaryView;
/**
* 字典表 服务实现类
*/
@Service("dictionaryService")
@Transactional
public class DictionaryServiceImpl extends ServiceImpl<DictionaryDao, DictionaryEntity> implements DictionaryService {
@Override
public PageUtils queryPage(Map<String,Object> params) {
if(params != null && (params.get("limit") == null || params.get("page") == null)){
params.put("page","1");
params.put("limit","10");
}
Page<DictionaryView> page =new Query<DictionaryView>(params).getPage();
page.setRecords(baseMapper.selectListView(page,params));
return new PageUtils(page);
}
/**
* 赋值给字典表
* @param obj view对象
*/
public void dictionaryConvert(Object obj, HttpServletRequest request) {
try {
if (obj == null) return;
//当前view和entity中的所有types的字段
List<String> fieldNameList = new ArrayList<>();
Class tempClass = obj.getClass();
while (tempClass !=null) {
Field[] declaredFields = tempClass.getDeclaredFields();
for (Field f : declaredFields) {
f.setAccessible(true);
if (f.getType().getName().equals("java.lang.Integer") && f.getName().contains("Types")) {
fieldNameList.add(f.getName());
}
}
tempClass = tempClass.getSuperclass(); //得到父类,然后赋给自己
}
// 获取监听器中的字典表
// ServletContext servletContext = ContextLoader.getCurrentWebApplicationContext().getServletContext();
ServletContext servletContext = request.getServletContext();
Map<String, Map<Integer, String>> dictionaryMap= (Map<String, Map<Integer, String>>) servletContext.getAttribute("dictionaryMap");
//通过Types的值给Value字段赋值
for (String s : fieldNameList) {
Field types = null;
if(hasField(obj.getClass(),s)){
//判断view中有没有这个字段,有就通过反射取出字段
types= obj.getClass().getDeclaredField(s);//获取Types私有字段
}else{
//本表中没有这个字段,说明它是父表中的字段,也就是entity中的字段,从entity中取值
types=obj.getClass().getSuperclass().getDeclaredField(s);
}
Field value = obj.getClass().getDeclaredField(s.replace("Types", "Value"));//获取value私有字段
//设置权限
types.setAccessible(true);
value.setAccessible(true);
//赋值
if (StringUtil.isNotEmpty(String.valueOf(types.get(obj)))) { //types的值不为空
int i = Integer.parseInt(String.valueOf(types.get(obj)));//type
//把s1字符中的所有大写转小写,并在前面加 _
char[] chars = s.toCharArray();
StringBuffer sbf = new StringBuffer();
for(int b=0; b< chars.length; b++){
char ch = chars[b];
if(ch <= 90 && ch >= 65){
sbf.append("_");
ch += 32;
}
sbf.append(ch);
}
String s2 = dictionaryMap.get(sbf.toString()).get(i);
value.set(obj, s2);
} else {
new Exception("字典表赋值出现问题::::"+value.getName());
value.set(obj, "");
}
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 判断本实体有没有这个字段
* @param c
* @param fieldName
* @return
*/
public boolean hasField(Class c, String fieldName){
Field[] fields = c.getDeclaredFields();
for (Field f : fields) {
if (fieldName.equals(f.getName())) {
return true;
}
}
return false;
}
}
UsersController.java
package com.controller;
import java.util.Arrays;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import com.service.UsersService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
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.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.UsersEntity;
import com.service.TokenService;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
/**
* 登录相关
*/
@RequestMapping("users")
@RestController
public class UsersController {
@Autowired
private UsersService usersService;
@Autowired
private TokenService tokenService;
/**
* 登录
*/
@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
UsersEntity user = usersService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
if(user==null || !user.getPassword().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
R r = R.ok();
r.put("token", token);
r.put("role",user.getRole());
r.put("userId",user.getId());
return r;
}
/**
* 注册
*/
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody UsersEntity user){
// ValidatorUtils.validateEntity(user);
if(usersService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
usersService.insert(user);
return R.ok();
}
/**
* 退出
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
/**
* 密码重置
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
UsersEntity user = usersService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
if(user==null) {
return R.error("账号不存在");
}
user.setPassword("123456");
usersService.update(user,null);
return R.ok("密码已重置为:123456");
}
/**
* 列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,UsersEntity user){
EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();
PageUtils page = usersService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/list")
public R list( UsersEntity user){
EntityWrapper<UsersEntity> ew = new EntityWrapper<UsersEntity>();
ew.allEq(MPUtil.allEQMapPre( user, "user"));
return R.ok().put("data", usersService.selectListView(ew));
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
UsersEntity user = usersService.selectById(id);
return R.ok().put("data", user);
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
Integer id = (Integer)request.getSession().getAttribute("userId");
UsersEntity user = usersService.selectById(id);
return R.ok().put("data", user);
}
/**
* 保存
*/
@PostMapping("/save")
public R save(@RequestBody UsersEntity user){
// ValidatorUtils.validateEntity(user);
if(usersService.selectOne(new EntityWrapper<UsersEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
user.setPassword("123456");
usersService.insert(user);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody UsersEntity user){
// ValidatorUtils.validateEntity(user);
usersService.updateById(user);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
usersService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
声明
本博客适用于广泛的学术和教育用途,包括但不限于个人学习、开发设计,产品设计。仅供学习参考,旨在为读者提供深入理解和学术研究的材料。