基于Spring Boot技术的卓越导师双选系统设计与实现

@TOC

springboot112基于Spring Boot技术的卓越导师双选系统设计与实现

第一章 绪论

1.1 选题背景

如今的信息时代,对信息的共享性,信息的流通性有着较高要求,尽管身边每时每刻都在产生大量信息,这些信息也都会在短时间内得到处理,并迅速传播。因为很多时候,管理层决策需要大量信息作为参考依据,也有些时候,各大企业或学校也需要使用工具宣传自身的文化理念等等,所以信息能够得到迅速传播并带给人们一定的参考价值,充分发挥信息本身的作用是很有必要的,而这些恰恰是传统模式所不能相比的。因此,借助工具让信息系统化,流程化,规范化是最终的发展结果,而这个工具则是计算机软件。本次设计实现的计算机软件卓越导师双选系统,让其遵循实际操作流程的情况下,对导师选择信息实施规范化处理,让导师选择信息通过电子的方式进行保存,无论是管理人员检索导师选择信息,维护导师选择信息都可以便利化操作,真正缩短信息处理时间,节省人力和信息管理的成本。

1.2 选题意义

为了让导师选择信息的管理模式进行升级,也为了更好的维护导师选择信息,卓越导师双选系统的开发运用就显得很有必要,因为它不仅可以让导师选择信息的管理人员统一完成信息管理,而且还会在保证导师选择信息处于安全状态的情况下,让导师选择信息的处理流程缩短,让信息的管理工作量减少,让导师选择信息的录入和后期维护缩短时间,以及节省管理导师选择信息需要投入的精力与资金。由于卓越导师双选系统运用的技术比较成熟,所以它本身就具备了稳定的性能,连续24小时运行都毫无压力。而且还可以保证数据处理的质量。另外,卓越导师双选系统为了满足易用性的用户需求,特意在页面的设计上合理布局各元素,让重要内容和导航功能在关键区域展示,让操作系统的用户可以毫不费力的完成系统的操作。总的说来,卓越导师双选系统实现了信息资源的共享,让信息可以以更好的方式进行传播,让管理员的管理水平得到提升的同时,也让导师选择信息计算机化。

1.3 研究内容

根据卓越导师双选系统设计与实现的流程来对整个系统进行说明。本文将从下述6个部分介绍系统。

第一部分:介绍选题的动因,包括介绍课题背景和意义等。

第二部分:介绍本系统选用的开发手段,包括编程语言,后台支持的数据库,开发类技术等。

第三部分:介绍系统的分析内容,包括投资决策必须的可行性研究,用户对功能的要求,系统运行的性能要求等知识。

第四部分:介绍系统的设计。包括对系统功能结构的设计,数据表结构设计等。

第五部分:介绍系统的实现。包括各模块实现的具体运行效果。

第六部分:介绍系统测试。包括检查系统功能,测试知识点的介绍等。

第二章 开发环境

对卓越导师双选系统进行开发,需要了解开发技术的理论与实际运用,对开发工具,尤其是数据库的使用方法需要进行掌握。

2.1 SpringBoot框架

SpringBoot框架的诞生是出于需要优化Spring框架的前提下,Spring框架随着时间的发展,变得越来越强大,逐渐由一种框架变成一种平台的趋势,并且平台化也越来越臃肿,如果还是用Spring原有框架来进行网站的开发,网站内容也多一点,配置出错的机率以及配置的麻烦程度呈几何数据的增长,不利于Spring平台的发展。SpringBoot是集成式的框架,避免了很多框架在一起使用时候的互相冲突,是一站式框架解决的重要组成部分。

2.2 JSP技术

JSP开发技术,是Java开发网站必须要学习的一门技术。JSP不能单单说是一种语言,是Java语言诞生的公司为动态网页技术制定的一个网页技术标准。学习JSP技术之前肯定是要学习Java语言和一些HTML语言,并且要对Servlet容器进行学习,这些都属于架构上面的学习,在学校学习了基础的语言之后,再去理解架构也不过是用熟悉的Java语言重新造句而已,让学习更加容易,学习的难度也就大幅度的降低了。JSP编程过程中,可以在HTML代码中插入Java的相关代码,只需要用标签标记即可。JSP主要是用于实现用户界面方面的部分,前端开发人员只需要结合HTML的代码对页面进行布局之后,嵌入JSP操作,JSP可以获取数据库相关数据,通过Java的列表遍历方法就可以使JSP编译之后,浏览器显示的数据界面是动态化的,每次操作都可以让页面布局不乱而数据进行合理的更改显示。选择JSP技术进行网页应用程序的开发会达到很高的效率。

2.3 MYSQL数据库

MYSQL数据库起源于瑞典,但是经营不善被数据库行业老大甲骨文公司给收购了,收购了之后本以为只是为了发展Oracle数据库,然后MySQL数据库就会被雪藏,但是没想到甲骨文公司收购后对MySQL数据库进行了支持,并且让之前Oracle占据不了的中小型市场让MySQL占用,完全实现了甲骨文公司的利润增长,不管是从大型数据库还是中小型数据库,都有了自己的产品,并且可以对两种数据库的优势尽量的发挥,取长补短,MySQL数据库反而发展的越来越好。

最新版本的MYSQL数据库配备上了管理工具,因为甲骨文公司属于老牌的数据库厂商,对数据库的客户端工具自然有其他下线厂商进行研发配套,这些旁枝末节的事情并没有投入很大的精力,造成的结果就是程序开发人员还是习惯使用传统的Navicat for MySQL或者SQLyog这些MySQL数据库管理工具,大部分数据库开发调试人员还是习惯于视窗情况下看到相关数据。不管是越来越强的MySQL数据库还是市面上广泛流传的各种MySQL数据库客户端,MySQL数据库能实现本课题的开发,那么选择MySQL作为数据库是没有问题的。

第三章 系统分析

提前通过各种渠道,比如图书馆,电脑上的网站等渠道获取跟本系统有关联的资料,同时设计调查问卷,让系统的使用者参与调查,了解其对系统的需求,然后进行系统的分析,确定本系统的开发可行性,确定本系统的功能等内容。

3.1可行性分析

这部分内容主要从开发的角度和运行使用的角度等层面研究系统,确定是否投资系统,为进一步开展工作提供理论依据。

3.1.1技术可行性

本系统采用的技术和开发类语言都具备丰厚的理论基础,同时这些开发技术和开发语言在市面上都得到了广泛运用,很多功能实现的源码都以模块化的方式通过网络进行了公开,所以本系统可以参考这些代码实现功能。因此,系统开发技术可行。

3.1.2操作可行性

卓越导师双选系统根据用户阅读习惯对系统内容进行排版布局,把系统页面中的关键位置用来设置导航条,可以方便用户第一时间找到需要的内容,同时,页面中也会设置一些提示,用于帮助用户操作系统,因此,系统操作可行。

3.1.3经济可行性

本系统需要在硬件设备上配置开发环境,就可以开展系统的开发工作。由于本系统并不是商业化程序,所以本人学习用的笔记本,或机房电脑都符合要求。对于开发环境的配置问题,可以通过网络直接下载安装,期间并不收取费用。因此,系统经济可行。

以上就是从技术,操作,经济的层面研究系统,最终确定系统可以开展。

3.2系统流程分析

要访问卓越导师双选系统,需要符合要求的身份,证明访问者身份的信息就是在登录界面需要填写的信息,其中有用户名,有密码。在登录界面,系统后台也有专门编写的安全验证机制,只有信息匹配的访问者才有资格进入系统。具体流程见下图。如果访问者提供的信息在数据库中没有记录,就表明该访问者没有权限,也就无法享受系统提供的服务。

图3-1 操作流程图

在卓越导师双选系统里面,任何填充的数据都要经过合法性验证,具体流程见下图。只有符合条件的数据才可以保存。

图3-2 添加信息流程图

经过时间的改变,系统里面的很多数据也需要更新,更新时,同样需要检查更新的数据是否合法,具体流程见下图。只有判断符合要求的数据最终才可以保存。

图3-3 修改信息流程图

为了避免操作者大意误删数据,任何需要删除的数据,都需要反复确认,具体流程见下图。删除的数据将不会在页面中显示。

图3-4 删除信息流程图

3.3系统性能分析

用户使用系统,一是为了阅读需要的信息;二是为了享受系统提供的服务。因此一个质量较好的系统就更容易让用户频繁使用。而能够反馈系统的质量的信息就是系统的性能。常见的能够表示系统性能的指标有安全性,系统可扩展性,数据完整性等。接下来就对这些指标进行介绍。

3.3.1数据完整性

只要是系统中的数据,其长期保存在数据库里面,就要求其具备可靠性。这样才能发挥出数据具备的参考价值。一般来说,为了保证数据信息是准确的,并且可靠的,在数据处理上,包括录入数据,编辑数据等,都要求数据信息是完整登记的。同时,系统中的数据其自身需要具备完整性外,也要求数据之间产生的关系也要具备完整性。另外,在数据库中填充信息时,同样的信息应该以同样的方式出现在不同的表中。对于数据进行完整性定义,也是方便后期对数据的使用和查看。

3.3.2系统可扩展性

站在当前用户需求的角度考虑问题具有一定的局限性,由此设计的系统也一样。为了保护开发系统的财产,同时也为了让系统长远立足市场,系统开发人员就需要充分预留系统的空间,让系统在未来的日子里可以扩充功能,并进行更新和升级。这就是系统具备可扩展性的表现。

3.3.3系统安全性

系统在投入使用中,用户与系统的交互会产生数据,比如插入数据,编辑数据等操作都会产生数据。而作为系统的后台支持的数据库,主要任务就是保存这些数据。为了不让数据信息被窃取或者泄露,也是为了对系统的安全性进行保证,所以市面上也出现了很多的加密技术,其中MD5单向加密技术在系统中运用得最多。其原因有三点:

第一点,面对任意两段明文,在经过MD5加密处理后,它们的密文不一样;

第二点,面对任意一段明文,进行MD5加密处理后,其密文不变;

第三点,破解MD5加密的数据非常困难;

目前,关于MD5加密技术的代码已经可以从网站上下载,可以直接将模块化的代码在系统中直接引用。一般来说,用户注册的数据还有管理员登录系统使用的数据都是很重要的资源,所以这部分数据常常会经过加密处理,这样也就消除了系统安全上的隐患。

3.4系统功能分析

这部分内容在系统分析环节比较重要,它直接关系本系统开发的进展。无论是设计,还是实现,都是在本系统调研的功能的基础上进行。

为了直观显示系统的功能,运用用例图这样的工具显示分析的结果。分析的管理员功能如下。管理员管理学员,导师,管理项目信息,管理项目提交,管理指导项目信息。

图3-5 管理员用例图

为了直观显示系统的功能,运用用例图这样的工具显示分析的结果。分析的导师功能如下。导师管理导师选择信息,管理项目,管理项目提交并对学员提交的项目进行指导。

图3-6 导师用例图

为了直观显示系统的功能,运用用例图这样的工具显示分析的结果。分析的学员功能如下。学员选择导师,查看项目,提交已完成的项目文件,查看导师对项目的指导信息。

图3-7 学员用例图

第四章 系统设计

设计一个系统不单单是设计系统的页面,可以说系统设计其本质是一个结合了众多设计过程的比较复杂的系统工程。一般来说,在完成系统设计时,需要了解和掌握很多设计的知识,有界面布局技术的知识,页面采用的字体和颜色的运用,还有页面空白的规范使用等,如何将这些元素进行组合,让页面可以直观表达信息内容的同时,也能维持页面整体的美观。

4.1 系统设计思想

系统开发必然需要统一设计思想。根据这个设计思想指导系统的开发,可以加快系统开发进程。根据目前用户对卓越导师双选系统的需求,确定下述原则即为本系统的设计思想。

(1)实用性:本系统依照用户需求设计功能,遵循用户使用方便的原则,把用户在实际工作中的各个操作细节也充分考虑进来,让使用者在没有系统操作说明书的情况下,也能很容易的完成系统的操作。

(2)先进性:为了让本系统具备高性能,设计时,需要把目前的各种成熟技术加以考虑,比如软件开发技术也要考虑进去,比如计算机技术也需要进行考虑。对于系统结构的选择,本系统将毫不犹豫的选择成熟先进的B/S结构,方便开发的同时,对于后期的维护也提供了便利。

(3)高安全性:设计本系统时,对于一些系统的关键数据要严加看管,比如管理员本人的账号和密码,一定要加密保存在数据库里面。除此以外,也需要充分使用安全措施对用户的共享资源进行保护。

(4)可维护性:设计时,要提前考虑本系统的可维护性,因为一个便于维护的系统在后期产生的维护成本将会大大降低。维护一般包括软硬件的维护还有对于网络的维护等。

(5)可扩展性:重新开发一个新系统相比在原有系统上升级,会花费大量的资金和精力,由此,一个好的系统必定具备良好的可扩展性。在用户需求变动的情况下,可以通过系统的更新和升级来持续满足用户需求,这样的系统就具备了可扩展性。

4.2功能结构设计

这部分内容使用结构图这样的工具,显示设计结果,设计的管理员功能见下图。管理员管理学员,导师,管理项目信息,管理项目提交,管理指导项目信息。

图4-1 管理员功能结构图

这部分内容使用结构图这样的工具,显示设计结果,设计的导师功能见下图。导师管理导师选择信息,管理项目,管理项目提交并对学员提交的项目进行指导。

图4-2 导师功能结构图

这部分内容使用结构图这样的工具,显示设计结果,设计的学员功能见下图。学员选择导师,查看项目,提交已完成的项目文件,查看导师对项目的指导信息。

图4-3 学员功能结构图

4.3数据库设计

现如今,关系数据库已经广泛占据了市场。其具有坚实的理论基础,并且它可以很好的支持SQL这样的查询语言。所以,大部分程序的后台数据库几乎都是关系数据库。它们被用于长期对程序数据进行保存,采用的方式就是正确使用SQL语句在数据库中完成数据的插入,修改,删除等操作。

4.3.1 数据库E-R图

系统设计的内容不仅仅是对功能进行模块设计,它也包括了对数据库进行设计。功能设计这部分内容已经完成了,接下来进行的数据库设计也要根据规定的流程进行。

数据库设计这部分内容也需要参照用户的需求来完成。同时为了方便展示数据库中存在的各种关系,需要使用到E-R图,并运用E-R图中常见的符号来表示用户需求中的数据内容。所以,在建立E-R模型前,需要把用户需求的数据信息进行拆分并分析,并确定实体,实体特征,还有它们之间的关联,然后选择某个绘制E-R模型的工具比如Visio,亿图,Navicat等,用规定的符号去表示这些数据。这些常用的符号分别是矩形,菱形,椭圆,它们表示的内容分别是实体,关系,属性。

(1)设计的项目实体,还有其属性见下图。

图4-3 项目实体属性图

(2)设计的学员实体,还有其属性见下图。

图4-4 学员实体属性图

(3)设计的指导项目实体,还有其属性见下图。

图4-5 指导项目实体属性图

  1. 设计的导师实体,还有其属性见下图。

图4-6 导师实体属性图

(5)设计上述实体间关系见下图。

图4-7 实体间关系E-R图

4.3.2 数据库表结构

很多时候,在进行数据表的存储结构的设计时,都会遇到一些困扰,比如每张数据表如何命名,如何设计每张数据表里面的字段,如何为各个字段进行命名,以及如何设置字段的取值范围等信息。很多初学者,在进行表结构设计时,无论是对表进行命名,还是对字段进行命名,都是采用中文的方式,导致在编码阶段,在对数据进行操作时,总是报错,影响编码人员的开发速度,而且一旦数据表结构建立之后,后期进行修改也比较麻烦。因为设计数据表的结构,就意味着程序中需要长期保存的数据都是根据这样的结构进行保存的,在后面的使用中,无论是程序数据往数据表中写入,还是需要编辑或删除数据,都是按照这个规则进行。如此说来,设计数据库也是非常重要的任务,它关系到后面程序的开发,也关系到程序的运行使用。

通常在设计数据表结构时,会把前面设计的E-R图进行表结构的转化。把实体用来代表数据表,把其属性,也就是椭圆形代表的内容用来表示数据表中的字段,然后根据程序对于数据的存储要求,设计字段的类型和长度。比如用户的年龄可以用int(整数型),设置其长度为4或者6等。总之,数据表结构一旦建立,就可以往里面填充数据了。

表4.1 导师信息表

字段类型默认注释
id (主键)bigint(20)主键
addtimetimestampCURRENT_TIMESTAMP创建时间
gonghaovarchar(200)工号
mimavarchar(200)密码
jiaoshixingmingvarchar(200)NULL教师姓名
xingbievarchar(200)NULL性别
touxiangvarchar(200)NULL头像
youxiangvarchar(200)NULL邮箱
dianhuavarchar(200)NULL电话

表4.2 导师详细信息表

字段类型默认注释
id (主键)bigint(20)主键
addtimetimestampCURRENT_TIMESTAMP创建时间
gonghaovarchar(200)NULL工号
jiaoshixingmingvarchar(200)NULL教师姓名
xingbievarchar(200)NULL性别
suojiaokemuvarchar(200)NULL所教科目
renshuint(11)人数
youxiangvarchar(200)NULL邮箱
dianhuavarchar(200)NULL电话
gerenjianjielongtextNULL个人简介

表4.3 导师选择信息表

字段类型默认注释
id (主键)bigint(20)主键
addtimetimestampCURRENT_TIMESTAMP创建时间
gonghaovarchar(200)NULL工号
jiaoshixingmingvarchar(200)NULL教师姓名
renshuint(11)人数
xuanzeshijiandatetimeNULL选择时间
xuanzeneironglongtextNULL选择内容
xuehaovarchar(200)NULL学号
xueshengxingmingvarchar(200)NULL学生姓名
sfshvarchar(200)是否审核
shhflongtextNULL审核回复

表4.4 管理员信息表

字段类型默认注释
id (主键)bigint(20)主键
usernamevarchar(100)用户名
passwordvarchar(100)密码
rolevarchar(100)管理员角色
addtimetimestampCURRENT_TIMESTAMP新增时间

表4.5 项目提交信息表

字段类型默认注释
id (主键)bigint(20)主键
addtimetimestampCURRENT_TIMESTAMP创建时间
xiangmubianhaovarchar(200)NULL项目编号
xiangmumingchengvarchar(200)NULL项目名称
gonghaovarchar(200)NULL工号
jiaoshixingmingvarchar(200)NULL教师姓名
xiangmuwenjianvarchar(200)NULL项目文件
xiangmuneironglongtextNULL项目内容
tijiaoshijiandatetimeNULL提交时间
xuehaovarchar(200)NULL学号
xueshengxingmingvarchar(200)NULL学生姓名

表4.6 项目信息表

字段类型默认注释
id (主键)bigint(20)主键
addtimetimestampCURRENT_TIMESTAMP创建时间
xiangmubianhaovarchar(200)NULL项目编号
xiangmumingchengvarchar(200)项目名称
xuehaovarchar(200)NULL学号
xueshengxingmingvarchar(200)NULL学生姓名
xiangmuyaoqiulongtextNULL项目要求
fujianvarchar(200)NULL附件
fabushijiandatetimeNULL发布时间
gonghaovarchar(200)NULL工号
jiaoshixingmingvarchar(200)NULL教师姓名

表4.7 学员信息表

字段类型默认注释
id (主键)bigint(20)主键
addtimetimestampCURRENT_TIMESTAMP创建时间
xuehaovarchar(200)学号
mimavarchar(200)密码
xueshengxingmingvarchar(200)NULL学生姓名
xingbievarchar(200)NULL性别
touxiangvarchar(200)NULL头像
shoujivarchar(200)NULL手机
youxiangvarchar(200)NULL邮箱

表4.8 指导项目信息表

字段类型默认注释
id (主键)bigint(20)主键
addtimetimestampCURRENT_TIMESTAMP创建时间
xiangmubianhaovarchar(200)NULL项目编号
xiangmumingchengvarchar(200)NULL项目名称
xuehaovarchar(200)NULL学号
xueshengxingmingvarchar(200)NULL学生姓名
cunzaiwentilongtextNULL存在问题
xiangmudianpinglongtextNULL项目点评
fabushijiandatetimeNULL发布时间
gonghaovarchar(200)NULL工号
jiaoshixingmingvarchar(200)NULL教师姓名

第五章 系统实现

前面做的所有工作,都是为了给系统实现做准备。在系统实现期间,需要根据设计方案执行,通过运用编码技术实现一个可以处理事务的系统。

5.1管理员功能实现

5.1.1 导师信息管理

实现管理员权限的导师信息管理功能,其运行效果见下图。管理员修改导师所教科目信息,电话,邮箱,教师姓名等信息,可以删除指定的导师信息。

图5-1 导师信息管理页面

5.1.2 导师选择统计报表

实现管理员权限的导师选择统计报表功能,其运行效果见下图。管理员查看导师选择统计报表信息,查看选择各位导师的学员人数信息。

图5-2 导师选择统计报表页面

5.1.3 学员管理

实现管理员权限的学员管理功能,其运行效果见下图。管理员查看学员信息,对学员的资料进行修改,查询,删除等操作。

图5-3 学员管理页面

5.2导师功能实现

5.2.1 项目信息管理

实现导师权限的项目信息管理功能,其运行效果见下图。导师新增项目,上传项目文件,修改项目信息,在本页面删除指定的项目信息。

图5-4 项目信息管理页面

5.2.2 项目提交管理

实现导师权限的项目提交管理功能,其运行效果见下图。导师下载学员提交的已完成的项目文件,导师点击指导项目按钮可以对学员提交的项目进行指导。

图5-5 项目提交管理页面

5.3 学员功能实现

5.3.1 导师信息管理

实现学员权限的导师信息管理功能,其运行效果见下图。学员查看导师所教科目,邮箱以及电话等信息,可以点击右侧的选择导师按钮对该导师进行选择。

图5-6 导师信息管理页面

5.3.2 项目信息管理

实现学员权限的项目信息管理功能,其运行效果见下图。学员查看项目信息,在规定时间内完成导师布置的项目,并在当前页面提交已完成的项目文件。

图5-7 项目信息管理页面

5.3.3 指导项目查看

实现学员权限的指导项目查看功能,其运行效果见下图。学员查看导师对自己提交的项目的指导信息。

图5-8 指导项目查看页面

CommonUtil.java
package com.utils;

import java.util.Random;

public class CommonUtil {
	/**
     * 获取随机字符串
     *
     * @param num
     * @return
     */
    public static String getRandomString(Integer num) {
        String base = "abcdefghijklmnopqrstuvwxyz0123456789";
        Random random = new Random();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < num; i++) {
            int number = random.nextInt(base.length());
            sb.append(base.charAt(number));
        }
        return sb.toString();
    }
}

DaoshiController.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.DaoshiEntity;
import com.entity.view.DaoshiView;

import com.service.DaoshiService;
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-05-11 10:26:09
 */
@RestController
@RequestMapping("/daoshi")
public class DaoshiController {
    @Autowired
    private DaoshiService daoshiService;
    
	@Autowired
	private TokenService tokenService;
	
	/**
	 * 登录
	 */
	@IgnoreAuth
	@RequestMapping(value = "/login")
	public R login(String username, String password, String captcha, HttpServletRequest request) {
		DaoshiEntity user = daoshiService.selectOne(new EntityWrapper<DaoshiEntity>().eq("gonghao", username));
		if(user==null || !user.getMima().equals(password)) {
			return R.error("账号或密码不正确");
		}
		
		String token = tokenService.generateToken(user.getId(), username,"daoshi",  "导师" );
		return R.ok().put("token", token);
	}
	
	/**
     * 注册
     */
	@IgnoreAuth
    @RequestMapping("/register")
    public R register(@RequestBody DaoshiEntity daoshi){
    	//ValidatorUtils.validateEntity(daoshi);
    	DaoshiEntity user = daoshiService.selectOne(new EntityWrapper<DaoshiEntity>().eq("gonghao", daoshi.getGonghao()));
		if(user!=null) {
			return R.error("注册用户已存在");
		}
		Long uId = new Date().getTime();
		daoshi.setId(uId);
        daoshiService.insert(daoshi);
        return R.ok();
    }
	
	/**
	 * 退出
	 */
	@RequestMapping("/logout")
	public R logout(HttpServletRequest request) {
		request.getSession().invalidate();
		return R.ok("退出成功");
	}
	
	/**
     * 获取用户的session用户信息
     */
    @RequestMapping("/session")
    public R getCurrUser(HttpServletRequest request){
    	Long id = (Long)request.getSession().getAttribute("userId");
        DaoshiEntity user = daoshiService.selectById(id);
        return R.ok().put("data", user);
    }
    
    /**
     * 密码重置
     */
    @IgnoreAuth
	@RequestMapping(value = "/resetPass")
    public R resetPass(String username, HttpServletRequest request){
    	DaoshiEntity user = daoshiService.selectOne(new EntityWrapper<DaoshiEntity>().eq("gonghao", username));
    	if(user==null) {
    		return R.error("账号不存在");
    	}
        user.setMima("123456");
        daoshiService.updateById(user);
        return R.ok("密码已重置为:123456");
    }


    /**
     * 后端列表
     */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params,DaoshiEntity daoshi,
		HttpServletRequest request){
        EntityWrapper<DaoshiEntity> ew = new EntityWrapper<DaoshiEntity>();
		PageUtils page = daoshiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, daoshi), params), params));

        return R.ok().put("data", page);
    }
    
    /**
     * 前端列表
     */
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params,DaoshiEntity daoshi, 
		HttpServletRequest request){
        EntityWrapper<DaoshiEntity> ew = new EntityWrapper<DaoshiEntity>();
		PageUtils page = daoshiService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, daoshi), params), params));
        return R.ok().put("data", page);
    }

	/**
     * 列表
     */
    @RequestMapping("/lists")
    public R list( DaoshiEntity daoshi){
       	EntityWrapper<DaoshiEntity> ew = new EntityWrapper<DaoshiEntity>();
      	ew.allEq(MPUtil.allEQMapPre( daoshi, "daoshi")); 
        return R.ok().put("data", daoshiService.selectListView(ew));
    }

	 /**
     * 查询
     */
    @RequestMapping("/query")
    public R query(DaoshiEntity daoshi){
        EntityWrapper< DaoshiEntity> ew = new EntityWrapper< DaoshiEntity>();
 		ew.allEq(MPUtil.allEQMapPre( daoshi, "daoshi")); 
		DaoshiView daoshiView =  daoshiService.selectView(ew);
		return R.ok("查询导师成功").put("data", daoshiView);
    }
	
    /**
     * 后端详情
     */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        DaoshiEntity daoshi = daoshiService.selectById(id);
        return R.ok().put("data", daoshi);
    }

    /**
     * 前端详情
     */
    @RequestMapping("/detail/{id}")
    public R detail(@PathVariable("id") Long id){
        DaoshiEntity daoshi = daoshiService.selectById(id);
        return R.ok().put("data", daoshi);
    }
    



    /**
     * 后端保存
     */
    @RequestMapping("/save")
    public R save(@RequestBody DaoshiEntity daoshi, HttpServletRequest request){
    	daoshi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(daoshi);
    	DaoshiEntity user = daoshiService.selectOne(new EntityWrapper<DaoshiEntity>().eq("gonghao", daoshi.getGonghao()));
		if(user!=null) {
			return R.error("用户已存在");
		}
		daoshi.setId(new Date().getTime());
        daoshiService.insert(daoshi);
        return R.ok();
    }
    
    /**
     * 前端保存
     */
    @RequestMapping("/add")
    public R add(@RequestBody DaoshiEntity daoshi, HttpServletRequest request){
    	daoshi.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
    	//ValidatorUtils.validateEntity(daoshi);
    	DaoshiEntity user = daoshiService.selectOne(new EntityWrapper<DaoshiEntity>().eq("gonghao", daoshi.getGonghao()));
		if(user!=null) {
			return R.error("用户已存在");
		}
		daoshi.setId(new Date().getTime());
        daoshiService.insert(daoshi);
        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    public R update(@RequestBody DaoshiEntity daoshi, HttpServletRequest request){
        //ValidatorUtils.validateEntity(daoshi);
        daoshiService.updateById(daoshi);//全部更新
        return R.ok();
    }
    

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        daoshiService.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<DaoshiEntity> wrapper = new EntityWrapper<DaoshiEntity>();
		if(map.get("remindstart")!=null) {
			wrapper.ge(columnName, map.get("remindstart"));
		}
		if(map.get("remindend")!=null) {
			wrapper.le(columnName, map.get("remindend"));
		}


		int count = daoshiService.selectCount(wrapper);
		return R.ok().put("count", count);
	}
	


}

CommonServiceImpl.java

package com.service.impl;


import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.dao.CommonDao;
import com.service.CommonService;


/**
 * 系统用户
 */
@Service("commonService")
public class CommonServiceImpl implements CommonService {
	
	@Autowired
	private CommonDao commonDao;

	@Override
	public List<String> getOption(Map<String, Object> params) {
		return commonDao.getOption(params);
	}
	
	@Override
	public Map<String, Object> getFollowByOption(Map<String, Object> params) {
		return commonDao.getFollowByOption(params);
	}
	
	@Override
	public void sh(Map<String, Object> params) {
		commonDao.sh(params); 
	}

	@Override
	public int remindCount(Map<String, Object> params) {
		return commonDao.remindCount(params);
	}

	@Override
	public Map<String, Object> selectCal(Map<String, Object> params) {
		return commonDao.selectCal(params);
	}
	
	@Override
	public List<Map<String, Object>> selectGroup(Map<String, Object> params) {
		return commonDao.selectGroup(params);
	}
	
	@Override
	public List<Map<String, Object>> selectValue(Map<String, Object> params) {
		return commonDao.selectValue(params);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值