当前位置: 首页 > news >正文

基于Sringboot+Vue个人驾校预约管理系统--论文pf

@TOC

springboot503基于Sringboot+Vue个人驾校预约管理系统--论文pf

第1章 绪论

1.1选题动因

当前的网络技术,软件技术等都具备成熟的理论基础,市场上也出现各种技术开发的软件,这些软件都被用于各个领域,包括生活和工作的领域。随着电脑和笔记本的广泛运用,以及各种计算机硬件的完善和升级,市面上的电脑和笔记本的性能都得到提升,可以支持的软件也逐渐增多,因此,在计算机上安装软件来发挥其高效地信息处理的作用,则很受人们的青睐。对于个人驾校预约管理系统信息来讲,通过手工形式处理,在面对庞大的信息数量时,就显得不适宜了,首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,为了解决上述问题,有必要建立个人驾校预约管理系统,来规范个人驾校预约管理系统信息管理流程,让管理工作可以系统化和程序化,同时,个人驾校预约管理系统的有效运用可以帮助管理人员准确快速地处理信息。

1.2目的和意义

个人驾校预约管理系统可以对个人驾校预约管理系统信息进行集中管理,可以真正避免传统管理的缺陷。个人驾校预约管理系统是一款运用软件开发技术设计实现的应用系统,在信息处理上可以达到快速的目的,不管是针对数据添加,数据维护和统计,以及数据查询等处理要求,个人驾校预约管理系统都可以轻松应对。所以,个人驾校预约管理系统的运用是让个人驾校预约管理系统信息管理升级的最好方式。它可以实现信息处理的便利化要求,还可以规范信息处理的流程,让事务处理成为管理人员手中的一件简单事,而不是之前手工处理时的困难事。尽管个人驾校预约管理系统具备较完善的功能,但是也需要管理人员利用闲暇时间提升自身素质以及个人能力,在操作个人驾校预约管理系统时可以最大化运用个人驾校预约管理系统提供的功能,让系统在满足高效率处理数据的同时,也能始终稳定运行,还可以确保数据的可靠性与数据处理的质量。

1.3论文结构安排

本文总共分为6个章节,每个章节都对本系统描述了不同的内容。接下来就对本文的研究内容进行阐述。

第1章:这个章节是论文的绪论部分。从选题的背景和意义的角度阐述即将开发的系统。

第2章:这个章节是技术介绍部分。从本系统需要运用的技术知识的角度阐述系统。

第3章:这个章节是系统分析部分。从分析系统可行性,分析系统功能和性能等角度阐述系统。

第4章:这个章节是系统设计部分。从系统功能结构的角度和数据库设计的角度阐述系统。

第5章:这个章节是系统实现部分。从系统功能模块运行效果的角度阐述系统。

第6章:这个章节是系统测试部分。从测试系统功能,系统测试方法的角度阐述系统。

第2章 开发环境与技术

开发个人驾校预约管理系统需要搭建编程的环境,也需要通过调查,对各个相关技术进行分析,选取适合本系统开发的技术与工具。

2.1 MySQL数据库

题目确定了是一个应用程序之后,就开始按部就班的进行设计与分析。本课题是需要数据库作为数据管理工具以及数据载体,从程序功能分析到数据分析,选择合适的关系型数据库是当下所选择的重要环节。关系型数据库可选择余地不多,本身甲骨文公司的两个,微软的两个,IBM的一个,也就是这五个了,功能和差异都不影响数据库的选择,因为这些数据库都能实现应用程序功能所需的,那么只能从其他的方面来综合考虑哪种数据库更合适。作为开发使用的电脑硬件上来讲,还是大一的时候买的,当初并没有太多的钱买好一点的电脑,只是作为学习用的,所以经过这么几年的使用,电脑老化了,性能下降也比较厉害,还有好多需要用的学习资料,本身面临毕业,选择学校机房也不是一个长久的打算,选择一个数据库适合自己的老旧笔记本电脑作为学习开发当前的应用,是最重要的。综合考虑的结果就是选用MySQL数据库作为应用数据库,因为MySQL数据库体积小,占用内存小,不影响电脑上其他用的软件运行,并且不需要因为安装维护MySQL数据库而重装系统,最终选择的数据库就是MySQL数据库。

2.2 Tomcat 介绍

刚开始学习Java语言的时候,是不知道还有Tomcat这些东西的,各种语法各种输出在控制台进行输出结果,当Java网站开发的时候就不可避免的学习到了Tomcat服务器。Tomcat准确的来讲不算是服务器,可以说是vue引擎或者一个容器,这些都是学术上或者原理上都比较贴切的,但是实际工作中Tomcat就是作为一个web服务器来用的,因为可以实现网站的发布和运行。因为工作原理的原因,Tomcat一般作为中小型企业和并发量并不突出的一种轻量级的服务器存在的,比如某些行业的应用系统,本身客户端就不多,需要的连接也不多,一般都用Tomcat的。Tomcat里面可以配置多个网站,配置文件后缀是config的文档,类似于XML的结构,比较清晰明了。每当Java发布新的版本的时候,Tomcat也会为了匹配Java的版本进行升级,目前Tomcat版本已经到版本10了。Tomcat标识是一只有点发黄的小猫咪,当Tomcat配置成功一般测试的时候能看到这个小猫咪就算是成功的,才能进行下一步的配置。Tomcat服务器在Java网站开发中还是挺合适的。

2.3 vue技术

vue技术可以让初学者尽快上手进行编写动态网站,不需要变成高级的Java编程人员才可以书写代码,从学习的效率还有编写的效率上都有很大的提升。让着重于网页开发者与着重于后台逻辑开发进行分离合作开发变成了一种可能,降低了学习成本,不需要考虑程序运行解释编译阶段的话,vue网页本身就可以理解成一个普通的Servlet。vue结构上面,主要分为两个方面,一个是专属的vue引擎,通俗的讲就是可以实现vue编译后运行解释的一个东西,另一个就是web服务器。vue运行编译需要vue引擎和web服务器进行配合以及相互协作,当然他们的分工也是很明确的,这样才可以真正的运行起来。

2.4 SpringBoot框架

从取名上能够得知这一框架设计初心:快速开启Spring运用。因而,Spring。 实质上,Boot应用程序是一个根据Spring框架的应用程序。这是Spring“协议书先于配置”理论的良好实践物质。可以帮助开发者迅速、更有效地搭建根据Spring生态系统中的应用程序。

Spring Boot实现自动配置、发展依靠、Actuator、命令行界面(CLI) 是Spring Boot最主要的四个核心特点,在其中CLI是Spring Boot的能选特点尽管功能齐全,却也引入了一套非传统的开发模型,因此本系列文章只注重别的三个特点。如标题,本问题是本系列的第一部分,将为您开启Spring Boot大门,关键为您进一步分析启动过程及全自动配置完成基本原理。把握这一部分主要内容,了解一些Spring框架的基本知识,也会让你游刃有余。

第3章 系统分析

用户的需求以及与本系统相似的在市场上存在的其它系统可以作为系统分析中参考的资料,分析人员可以根据这些信息确定出本系统具备的功能,分析出本系统具备的性能等内容。

3.1可行性分析

尽管系统是根据用户的要求进行制作,但是在确定制作前,有必要分析其可行性。

3.1.1操作可行性分析

开发本系统需要用到的工具,本人都比较熟悉,因此可以使用这些工具,完整开发个人驾校预约管理系统。此外,个人驾校预约管理系统在功能上,基本都是完成信息的处理,涵盖了添加,修改,删除等,而且操作者面对的都是各个功能操作界面,并不是编码后台,所以一般的使用者都可以通过操作界面轻松完成信息的加工处理。因此,本系统操作可行。

3.1.2经济可行性分析

开发本系统,并没有投入资金购买开发工具。因为使用的开发工具都是事先在百度上下载安装在本人电脑上的,随着软件开发技术的成熟,系统功能实现的编码也都模块化,很容易通过各大软件开发类网站获取,并通过小部分代码改动,运用到本系统中,这些都不需要资金投入,同时,本系统开发的结构选用B/S,成本可以忽略不计。

3.1.3技术可行性分析

本系统需要的软件包括Idea,Tomcat,MySQL等,这些工具都接触并使用过,至于JAVA,B/S,vue,Html等技术,图书馆都有对应的书籍可以参考学习,加上平时课堂上学习的编程小项目对这些技术都有讲解,另外,本人也从课程设计作业中锻炼了编程能力。所以在技术上,可以完成个人驾校预约管理系统的编程开发。

通过上面的分析,已经确定了本系统在经济上的可行,本系统在技术上的可行,本系统在操作上的可行。由此,可以得出在目前的条件下,对于个人驾校预约管理系统的设计与实现是可以进行下去的。

3.2系统流程分析

本系统在处理数据时,其内部的操作逻辑也需要使用相应的工具进行展示。

在本系统的数据录入页面,对于操作者提供的每条数据都有相应的检验规则,比如数据信息不能有非法字符,或者本来应该是汉字的数据,不能用字母代替,还有对数据内容的长度等进行规范,这样的可以确保数据准确性的检验规则,在编码时,就提前编写好了。数据添加的流程见下图。如果数据已经保存进入数据库,则说明操作者提供的数据内容和格式都是符合要求的。

图3.1 添加信息流程图

很多时候,面对系统中的大量数据,难免会发现一些错误,因此需要及时纠正错误,本系统也提供数据后期的修改功能,其流程见下图。但是更新的数据也需要通过数据有效性检验。能够最终写入数据库则说明修改的数据是符合要求的。

图3.2 修改信息流程图

面对数据库里面大量数据,在系统的前台,要想快速获取需要的信息,就需要使用查询功能。其流程见下图。该功能需要操作者提前输入关键词,当系统的后台数据库保存了与关键词匹配的数据时,就会及时显示出来,整个过程耗时很短。

图3.3 查询信息流程图

3.3系统性能分析

分析个人驾校预约管理系统对于性能的需求主要还是从下面的5个角度来分析,它们分别是系统的实用性,系统的适应性,系统的易操作性,系统的安全性和系统的易维护性。

性能需求一:系统的实用性,本系统主要是让管理人员集中处理相关信息,可以提供方便快捷的信息添加,信息编辑等操作。在提高信息管理人员的工作效率的同时,也可以降低管理成本,并大大减少管理人员日常繁琐的工作量。

性能需求二:系统的适应性,本系统对于运行环境的要求并不高,可以被广泛运用在生活中。因为使用者只要在日常使用的计算机,或者是随身携带的笔记本上搭建运行环境都能运行本系统,另外系统提供的基础功能包括添加,修改等都能随时操作。

性能需求三:系统的易操作性,本系统提供的功能跟同类型系统一样,也具备简单的增删改操作,操作流程的逻辑也符合广大使用者的使用需求,使用者使用本系统管理数据会非常顺手。

性能需求四:系统的安全性,本系统在数据保存与管理上安全系数要达标,在设计与编码阶段,通过对用户进行权限分配,把系统的功能依照不同用户的角色进行分配,在首次进入系统时,通过编写安全验证的代码模块,引导不同用户进入不同的操作界面。还可以对用户基础信息包括登录的账号密码等进行加密保存,可以利用当下常用的技术成熟的MD5加密技术实现。

性能需求五:系统的易维护性,本系统在后期运行中,会根据使用者的操作,产生许多数据信息,为了便于维护,就要求这些数据可以通过工具从数据库中导出来,对于一些阶段性数据,可以进行批量删除,以此达到轻负荷处理数据的目标,让本系统可以变得更加轻盈。

第4章 系统设计

市面上设计比较好的系统都有一个共同特征,就是主题鲜明突出。通过对页面简洁清晰的布局,让页面的内容,包括文字语言,或者视频图片等元素可以清晰表达出系统的主题。让来访用户无需花费过多精力和时间找寻需要的内容。

4.1界面设计原则

一般来说,大部分用户使用系统,有些是想从系统中获取需要的信息,有些则是使用系统提供的服务。所以,为了改善用户体验,提高系统的使用率,在对系统界面设计时,需要按照下面的原则进行。

第一点,对用户进行分析,了解用户使用系统的目的,以及使用系统的方式,考虑大部分用户的阅读习惯,设计Z字形或F型结构可以方便用户获取信息。

第二点:设计有效的导航,这个包括每个页面上都有导航条的显示,有时也可以在页面的底部设计导航条,当用户进入具体页面时,要设计相应的位置提示,在页面中比较特殊的位置,需要设计返回链接,可以返回上个页面,也可以返回首页等。

第三点:对整个系统要运用统一的设计方案,包括色彩方案的一致性,页面模板的相似性等,对相同操作和专业术语的描述在整个系统中也应该保持一致。

第四点:设计的界面要保证传达的内容清晰准确。要避免在同一个页面设计非常多的内容,另外可以准确对系统内容进行分类,把页面中用户视觉集中的位置,用来显示重要信息。

作为初学者,并没有那么多的设计经验,但是可以运用上面提到的界面设计原则设计出比较好的系统,可以让用户产生良好的使用体验。

4.2功能结构设计

为了让系统的编码可以顺利进行,特意对本系统功能进行细分设计,设计的系统功能结构见下图。

结构设计图

图4.1 系统功能结构图

4.3数据库设计

一般来说,对用户进行调查,了解其需求,主要还是完成功能上的分析设计,殊不知,设计功能时,也要展示对数据库的设计。数据库服务于程序,它可以按照设定的规则对程序的数据进行保存,因此,也可以说数据库就是程序相关数据的集合。所以设计出合理的数据库是多么的重要。

4.3.1 数据库逻辑设计

(1)下图是用户实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\1\____img\用户.jpg 用户实体属性图

(2)下图是教练实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\1\____img\教练.jpg 教练实体属性图

(3)下图是教练预约实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\1\____img\教练预约.jpg 教练预约实体属性图

(4)下图是教练留言实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\1\____img\教练留言.jpg 教练留言实体属性图

(5)下图是车辆收藏实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\1\____img\车辆收藏.jpg 车辆收藏实体属性图

(6)下图是论坛实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\1\____img\论坛.jpg 论坛实体属性图

(7)下图是车辆实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\1\____img\车辆.jpg 车辆实体属性图

(8)下图是公告资讯实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\1\____img\公告资讯.jpg 公告资讯实体属性图

(9)下图是教练收藏实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\1\____img\教练收藏.jpg 教练收藏实体属性图

(10)下图是车辆留言实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\1\____img\车辆留言.jpg 车辆留言实体属性图

(11)下图是车辆预约实体和其具备的属性。

C:/Users/Administrator/Desktop/temp111\1\____img\车辆预约.jpg 车辆预约实体属性图

4.3.2 数据库物理设计

作为程序后台的支持,本数据库也需要设计数据存储的结构。而数据存储结构的设计就包括了数据表结构的设计和创建。数据表结构包括了字段,数据类型,还有字段的取值范围等信息。而E-R模型中的实体就是一张表,实体的特征就可以作为该表中的字段,根据本程序信息存储要求,设计每个字段需要的类型,还有该字段的取值范围等。每当设计完成一张数据表,就需要及时保存在数据库里面,并对该设计的数据表准确命名,要求设置的数据表的名称尽量不要是中文,而且要方便记忆。因为在程序编码阶段,通过SQL语句可以把程序里面的数据写入在各个数据表里面,而这个环节需要使用到数据表的名称。如果数据表名称是中文的话,可能会乱码并影响程序运行。下面就以表格形式展示设计的结果。

表4.1车辆表

序号列名数据类型说明允许空
1IdIntid
2cheliang_uuid_numberString车辆编号
3cheliang_nameString车辆牌号
4cheliang_photoString车辆图片
5cheliang_typesInteger车辆类型
6cheliang_clicknumInteger车辆热度
7cheliang_contentString车辆介绍
8cheliang_deleteInteger逻辑删除
9insert_timeDate录入时间
10create_timeDate创建时间

表4.2车辆收藏表

序号列名数据类型说明允许空
1IdIntid
2cheliang_idInteger车辆
3yonghu_idInteger用户
4cheliang_collection_typesInteger类型
5insert_timeDate收藏时间
6create_timeDate创建时间

表4.3车辆留言表

序号列名数据类型说明允许空
1IdIntid
2cheliang_idInteger车辆
3yonghu_idInteger用户
4cheliang_liuyan_textString留言内容
5insert_timeDate留言时间
6reply_textString回复内容
7update_timeDate回复时间
8create_timeDate创建时间

表4.4车辆预约表

序号列名数据类型说明允许空
1IdIntid
2cheliang_yuyue_uuid_numberString预约编号
3cheliang_idInteger车辆
4yonghu_idInteger用户
5cheliang_yuyue_textString备注
6cheliang_yuyue_timeDate预约时间
7cheliang_yuyue_yesno_typesInteger预约状态
8cheliang_yuyue_yesno_textString审核回复
9insert_timeDate添加时间
10create_timeDate创建时间

表4.5字典表

序号列名数据类型说明允许空
1IdIntid
2dic_codeString字段
3dic_nameString字段名
4code_indexInteger编码
5index_nameString编码名字
6super_idInteger父字段id
7beizhuString备注
8create_timeDate创建时间

表4.6论坛表

序号列名数据类型说明允许空
1IdIntid
2forum_nameString帖子标题
3yonghu_idInteger用户
4jiaolian_idInteger教练
5users_idInteger管理员
6forum_contentString发布内容
7super_idsInteger父id
8forum_state_typesInteger帖子状态
9insert_timeDate发帖时间
10update_timeDate修改时间
11create_timeDate创建时间

表4.7教练表

序号列名数据类型说明允许空
1IdIntid
2jiaolian_uuid_numberString教练编号
3jiaolian_nameString教练名称
4jiaolian_photoString头像
5jiaolian_phoneString联系方式
6zan_numberInteger
7cai_numberInteger
8jiaolian_typesInteger教练类型
9jiaolian_clicknumInteger教练热度
10jiaolian_contentString教练介绍
11jiaolian_deleteInteger逻辑删除
12insert_timeDate录入时间
13create_timeDate创建时间

表4.8教练收藏表

序号列名数据类型说明允许空
1IdIntid
2jiaolian_idInteger教练
3yonghu_idInteger用户
4jiaolian_collection_typesInteger类型
5insert_timeDate收藏时间
6create_timeDate创建时间

表4.9教练留言表

序号列名数据类型说明允许空
1IdIntid
2jiaolian_idInteger教练
3yonghu_idInteger用户
4jiaolian_liuyan_textString留言内容
5insert_timeDate留言时间
6reply_textString回复内容
7update_timeDate回复时间
8create_timeDate创建时间

表4.10教练预约表

序号列名数据类型说明允许空
1IdIntid
2jiaolian_yuyue_uuid_numberString预约编号
3jiaolian_idInteger教练
4yonghu_idInteger用户
5jiaolian_yuyue_textString备注
6jiaolian_yuyue_timeDate预约时间
7jiaolian_yuyue_yesno_typesInteger预约状态
8jiaolian_yuyue_yesno_textString审核回复
9insert_timeDate添加时间
10create_timeDate创建时间

表4.11公告资讯表

序号列名数据类型说明允许空
1IdIntid
2news_nameString公告标题
3news_typesInteger车辆信息
4news_photoString公告图片
5insert_timeDate添加时间
6news_contentString公告详情
7create_timeDate创建时间

表4.12用户表

序号列名数据类型说明允许空
1IdIntid
2yonghu_nameString用户名称
3yonghu_phoneString用户手机号
4yonghu_id_numberString用户身份证号
5yonghu_photoString用户头像
6yonghu_emailString用户邮箱
7yonghu_deleteInteger逻辑删除
8insert_timeDate添加时间
9create_timeDate创建时间

表4.13管理员表

序号列名数据类型说明允许空
1IdIntid
2usernameString医院名
3passwordString密码
4roleString角色
5addtimeDate新增时间

第5章 系统实现

这个环节需要使用前面的设计方案,包括对系统模块的设计,还有对程序后台的数据支持的数据库的设计等。不过这部分内容还是强调系统编码人员的开发能力,要把前面设计的内容通过编码的形式以一个完整的,可以运行的系统呈现出来。

功能模块的实现

5.1用户信息管理

如图5.1显示的就是用户信息管理页面,此页面提供给管理员的功能有:用户信息的查询管理,可以删除用户信息、修改用户信息、新增用户信息,

还进行了对用户名称的模糊查询的条件

图5.1 用户信息管理页面

5.2 教练信息管理

如图5.2显示的就是教练信息管理页面,此页面提供给管理员的功能有:查看已发布的教练信息数据,修改教练信息,教练信息作废,即可删除,还进行了对教练信息名称的模糊查询 教练信息信息的类型查询等等一些条件。

图5.2 教练信息管理页面

5.3车辆信息管理

如图5.3显示的就是车辆信息管理页面,此页面提供给管理员的功能有:根据车辆信息进行条件查询,还可以对车辆信息进行新增、修改、查询操作等等。

图5.3 车辆信息管理页面

5.1公告信息管理

如图5.4显示的就是公告信息管理页面,此页面提供给管理员的功能有:根据公告信息进行新增、修改、查询操作等等。

图5.4 公告信息管理页面

ConfigController.java

package com.controller;import java.util.Arrays;
import java.util.Map;import org.springframework.beans.factory.annotation.Autowired;
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.ConfigEntity;
import com.service.ConfigService;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;/*** 登录相关*/
@RequestMapping("config")
@RestController
public class ConfigController{@Autowiredprivate ConfigService configService;/*** 列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params,ConfigEntity config){EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>();PageUtils page = configService.queryPage(params);return R.ok().put("data", page);}/*** 列表*/@IgnoreAuth@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params,ConfigEntity config){EntityWrapper<ConfigEntity> ew = new EntityWrapper<ConfigEntity>();PageUtils page = configService.queryPage(params);return R.ok().put("data", page);}/*** 信息*/@RequestMapping("/info/{id}")public R info(@PathVariable("id") String id){ConfigEntity config = configService.selectById(id);return R.ok().put("data", config);}/*** 详情*/@IgnoreAuth@RequestMapping("/detail/{id}")public R detail(@PathVariable("id") String id){ConfigEntity config = configService.selectById(id);return R.ok().put("data", config);}/*** 根据name获取信息*/@RequestMapping("/info")public R infoByName(@RequestParam String name){ConfigEntity config = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));return R.ok().put("data", config);}/*** 保存*/@PostMapping("/save")public R save(@RequestBody ConfigEntity config){
//    	ValidatorUtils.validateEntity(config);configService.insert(config);return R.ok();}/*** 修改*/@RequestMapping("/update")public R update(@RequestBody ConfigEntity config){
//        ValidatorUtils.validateEntity(config);configService.updateById(config);//全部更新return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Long[] ids){configService.deleteBatchIds(Arrays.asList(ids));return R.ok();}
}
JiaolianLiuyanController.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("/jiaolianLiuyan")
public class JiaolianLiuyanController {private static final Logger logger = LoggerFactory.getLogger(JiaolianLiuyanController.class);private static final String TABLE_NAME = "jiaolianLiuyan";@Autowiredprivate JiaolianLiuyanService jiaolianLiuyanService;@Autowiredprivate TokenService tokenService;@Autowiredprivate CheliangService cheliangService;//车辆@Autowiredprivate CheliangCollectionService cheliangCollectionService;//车辆收藏@Autowiredprivate CheliangLiuyanService cheliangLiuyanService;//车辆留言@Autowiredprivate CheliangYuyueService cheliangYuyueService;//车辆预约@Autowiredprivate DictionaryService dictionaryService;//字典@Autowiredprivate ForumService forumService;//论坛@Autowiredprivate JiaolianService jiaolianService;//教练@Autowiredprivate JiaolianCollectionService jiaolianCollectionService;//教练收藏@Autowiredprivate JiaolianYuyueService jiaolianYuyueService;//教练预约@Autowiredprivate NewsService newsService;//公告资讯@Autowiredprivate YonghuService yonghuService;//用户@Autowiredprivate UsersService usersService;//管理员/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));String role = String.valueOf(request.getSession().getAttribute("role"));if(false)return R.error(511,"永不会进入");else if("用户".equals(role))params.put("yonghuId",request.getSession().getAttribute("userId"));else if("教练".equals(role))params.put("jiaolianId",request.getSession().getAttribute("userId"));CommonUtil.checkMap(params);PageUtils page = jiaolianLiuyanService.queryPage(params);//字典表数据转换List<JiaolianLiuyanView> list =(List<JiaolianLiuyanView>)page.getList();for(JiaolianLiuyanView 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);JiaolianLiuyanEntity jiaolianLiuyan = jiaolianLiuyanService.selectById(id);if(jiaolianLiuyan !=null){//entity转viewJiaolianLiuyanView view = new JiaolianLiuyanView();BeanUtils.copyProperties( jiaolianLiuyan , view );//把实体数据重构到view中//级联表 教练//级联表JiaolianEntity jiaolian = jiaolianService.selectById(jiaolianLiuyan.getJiaolianId());if(jiaolian != null){BeanUtils.copyProperties( jiaolian , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "yonghuId"
, "jiaolianId"});//把级联的数据添加到view中,并排除id和创建时间字段,当前表的级联注册表view.setJiaolianId(jiaolian.getId());}//级联表 用户//级联表YonghuEntity yonghu = yonghuService.selectById(jiaolianLiuyan.getYonghuId());if(yonghu != null){BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "yonghuId"
, "jiaolianId"});//把级联的数据添加到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 JiaolianLiuyanEntity jiaolianLiuyan, HttpServletRequest request){logger.debug("save方法:,,Controller:{},,jiaolianLiuyan:{}",this.getClass().getName(),jiaolianLiuyan.toString());String role = String.valueOf(request.getSession().getAttribute("role"));if(false)return R.error(511,"永远不会进入");else if("用户".equals(role))jiaolianLiuyan.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));else if("教练".equals(role))jiaolianLiuyan.setJiaolianId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));jiaolianLiuyan.setCreateTime(new Date());jiaolianLiuyan.setInsertTime(new Date());jiaolianLiuyanService.insert(jiaolianLiuyan);return R.ok();}/*** 后端修改*/@RequestMapping("/update")public R update(@RequestBody JiaolianLiuyanEntity jiaolianLiuyan, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {logger.debug("update方法:,,Controller:{},,jiaolianLiuyan:{}",this.getClass().getName(),jiaolianLiuyan.toString());JiaolianLiuyanEntity oldJiaolianLiuyanEntity = jiaolianLiuyanService.selectById(jiaolianLiuyan.getId());//查询原先数据String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
//        else if("用户".equals(role))
//            jiaolianLiuyan.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));
//        else if("教练".equals(role))
//            jiaolianLiuyan.setJiaolianId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));jiaolianLiuyan.setUpdateTime(new Date());jiaolianLiuyanService.updateById(jiaolianLiuyan);//根据id更新return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Integer[] ids, HttpServletRequest request){logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());List<JiaolianLiuyanEntity> oldJiaolianLiuyanList =jiaolianLiuyanService.selectBatchIds(Arrays.asList(ids));//要删除的数据jiaolianLiuyanService.deleteBatchIds(Arrays.asList(ids));return R.ok();}/*** 批量上传*/@RequestMapping("/batchInsert")public R save( String fileName, HttpServletRequest request){logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//.eq("time", new SimpleDateFormat("yyyy-MM-dd").format(new Date()))try {List<JiaolianLiuyanEntity> jiaolianLiuyanList = new ArrayList<>();//上传的东西Map<String, List<String>> 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{List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件dataList.remove(0);//删除第一行,因为第一行是提示for(List<String> data:dataList){//循环JiaolianLiuyanEntity jiaolianLiuyanEntity = new JiaolianLiuyanEntity();
//                            jiaolianLiuyanEntity.setJiaolianId(Integer.valueOf(data.get(0)));   //教练 要改的
//                            jiaolianLiuyanEntity.setYonghuId(Integer.valueOf(data.get(0)));   //用户 要改的
//                            jiaolianLiuyanEntity.setJiaolianLiuyanText(data.get(0));                    //留言内容 要改的
//                            jiaolianLiuyanEntity.setInsertTime(date);//时间
//                            jiaolianLiuyanEntity.setReplyText(data.get(0));                    //回复内容 要改的
//                            jiaolianLiuyanEntity.setUpdateTime(sdf.parse(data.get(0)));          //回复时间 要改的
//                            jiaolianLiuyanEntity.setCreateTime(date);//时间jiaolianLiuyanList.add(jiaolianLiuyanEntity);//把要查询是否重复的字段放入map中}//查询是否重复jiaolianLiuyanService.insertBatch(jiaolianLiuyanList);return R.ok();}}}}catch (Exception e){e.printStackTrace();return R.error(511,"批量插入数据异常,请联系管理员");}}/*** 前端列表*/@IgnoreAuth@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));CommonUtil.checkMap(params);PageUtils page = jiaolianLiuyanService.queryPage(params);//字典表数据转换List<JiaolianLiuyanView> list =(List<JiaolianLiuyanView>)page.getList();for(JiaolianLiuyanView 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);JiaolianLiuyanEntity jiaolianLiuyan = jiaolianLiuyanService.selectById(id);if(jiaolianLiuyan !=null){//entity转viewJiaolianLiuyanView view = new JiaolianLiuyanView();BeanUtils.copyProperties( jiaolianLiuyan , view );//把实体数据重构到view中//级联表JiaolianEntity jiaolian = jiaolianService.selectById(jiaolianLiuyan.getJiaolianId());if(jiaolian != null){BeanUtils.copyProperties( jiaolian , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段view.setJiaolianId(jiaolian.getId());}//级联表YonghuEntity yonghu = yonghuService.selectById(jiaolianLiuyan.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 JiaolianLiuyanEntity jiaolianLiuyan, HttpServletRequest request){logger.debug("add方法:,,Controller:{},,jiaolianLiuyan:{}",this.getClass().getName(),jiaolianLiuyan.toString());jiaolianLiuyan.setCreateTime(new Date());jiaolianLiuyan.setInsertTime(new Date());jiaolianLiuyanService.insert(jiaolianLiuyan);return R.ok();}}
CheliangLiuyanController.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("/cheliangLiuyan")
public class CheliangLiuyanController {private static final Logger logger = LoggerFactory.getLogger(CheliangLiuyanController.class);private static final String TABLE_NAME = "cheliangLiuyan";@Autowiredprivate CheliangLiuyanService cheliangLiuyanService;@Autowiredprivate TokenService tokenService;@Autowiredprivate CheliangService cheliangService;//车辆@Autowiredprivate CheliangCollectionService cheliangCollectionService;//车辆收藏@Autowiredprivate CheliangYuyueService cheliangYuyueService;//车辆预约@Autowiredprivate DictionaryService dictionaryService;//字典@Autowiredprivate ForumService forumService;//论坛@Autowiredprivate JiaolianService jiaolianService;//教练@Autowiredprivate JiaolianCollectionService jiaolianCollectionService;//教练收藏@Autowiredprivate JiaolianLiuyanService jiaolianLiuyanService;//教练留言@Autowiredprivate JiaolianYuyueService jiaolianYuyueService;//教练预约@Autowiredprivate NewsService newsService;//公告资讯@Autowiredprivate YonghuService yonghuService;//用户@Autowiredprivate UsersService usersService;//管理员/*** 后端列表*/@RequestMapping("/page")public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){logger.debug("page方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));String role = String.valueOf(request.getSession().getAttribute("role"));if(false)return R.error(511,"永不会进入");else if("用户".equals(role))params.put("yonghuId",request.getSession().getAttribute("userId"));else if("教练".equals(role))params.put("jiaolianId",request.getSession().getAttribute("userId"));CommonUtil.checkMap(params);PageUtils page = cheliangLiuyanService.queryPage(params);//字典表数据转换List<CheliangLiuyanView> list =(List<CheliangLiuyanView>)page.getList();for(CheliangLiuyanView 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);CheliangLiuyanEntity cheliangLiuyan = cheliangLiuyanService.selectById(id);if(cheliangLiuyan !=null){//entity转viewCheliangLiuyanView view = new CheliangLiuyanView();BeanUtils.copyProperties( cheliangLiuyan , view );//把实体数据重构到view中//级联表 车辆//级联表CheliangEntity cheliang = cheliangService.selectById(cheliangLiuyan.getCheliangId());if(cheliang != null){BeanUtils.copyProperties( cheliang , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "yonghuId"});//把级联的数据添加到view中,并排除id和创建时间字段,当前表的级联注册表view.setCheliangId(cheliang.getId());}//级联表 用户//级联表YonghuEntity yonghu = yonghuService.selectById(cheliangLiuyan.getYonghuId());if(yonghu != null){BeanUtils.copyProperties( yonghu , view ,new String[]{ "id", "createTime", "insertTime", "updateTime", "yonghuId"});//把级联的数据添加到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 CheliangLiuyanEntity cheliangLiuyan, HttpServletRequest request){logger.debug("save方法:,,Controller:{},,cheliangLiuyan:{}",this.getClass().getName(),cheliangLiuyan.toString());String role = String.valueOf(request.getSession().getAttribute("role"));if(false)return R.error(511,"永远不会进入");else if("用户".equals(role))cheliangLiuyan.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));cheliangLiuyan.setCreateTime(new Date());cheliangLiuyan.setInsertTime(new Date());cheliangLiuyanService.insert(cheliangLiuyan);return R.ok();}/*** 后端修改*/@RequestMapping("/update")public R update(@RequestBody CheliangLiuyanEntity cheliangLiuyan, HttpServletRequest request) throws NoSuchFieldException, ClassNotFoundException, IllegalAccessException, InstantiationException {logger.debug("update方法:,,Controller:{},,cheliangLiuyan:{}",this.getClass().getName(),cheliangLiuyan.toString());CheliangLiuyanEntity oldCheliangLiuyanEntity = cheliangLiuyanService.selectById(cheliangLiuyan.getId());//查询原先数据String role = String.valueOf(request.getSession().getAttribute("role"));
//        if(false)
//            return R.error(511,"永远不会进入");
//        else if("用户".equals(role))
//            cheliangLiuyan.setYonghuId(Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId"))));cheliangLiuyan.setUpdateTime(new Date());cheliangLiuyanService.updateById(cheliangLiuyan);//根据id更新return R.ok();}/*** 删除*/@RequestMapping("/delete")public R delete(@RequestBody Integer[] ids, HttpServletRequest request){logger.debug("delete:,,Controller:{},,ids:{}",this.getClass().getName(),ids.toString());List<CheliangLiuyanEntity> oldCheliangLiuyanList =cheliangLiuyanService.selectBatchIds(Arrays.asList(ids));//要删除的数据cheliangLiuyanService.deleteBatchIds(Arrays.asList(ids));return R.ok();}/*** 批量上传*/@RequestMapping("/batchInsert")public R save( String fileName, HttpServletRequest request){logger.debug("batchInsert方法:,,Controller:{},,fileName:{}",this.getClass().getName(),fileName);Integer yonghuId = Integer.valueOf(String.valueOf(request.getSession().getAttribute("userId")));SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//.eq("time", new SimpleDateFormat("yyyy-MM-dd").format(new Date()))try {List<CheliangLiuyanEntity> cheliangLiuyanList = new ArrayList<>();//上传的东西Map<String, List<String>> 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{List<List<String>> dataList = PoiUtil.poiImport(file.getPath());//读取xls文件dataList.remove(0);//删除第一行,因为第一行是提示for(List<String> data:dataList){//循环CheliangLiuyanEntity cheliangLiuyanEntity = new CheliangLiuyanEntity();
//                            cheliangLiuyanEntity.setCheliangId(Integer.valueOf(data.get(0)));   //车辆 要改的
//                            cheliangLiuyanEntity.setYonghuId(Integer.valueOf(data.get(0)));   //用户 要改的
//                            cheliangLiuyanEntity.setCheliangLiuyanText(data.get(0));                    //留言内容 要改的
//                            cheliangLiuyanEntity.setInsertTime(date);//时间
//                            cheliangLiuyanEntity.setReplyText(data.get(0));                    //回复内容 要改的
//                            cheliangLiuyanEntity.setUpdateTime(sdf.parse(data.get(0)));          //回复时间 要改的
//                            cheliangLiuyanEntity.setCreateTime(date);//时间cheliangLiuyanList.add(cheliangLiuyanEntity);//把要查询是否重复的字段放入map中}//查询是否重复cheliangLiuyanService.insertBatch(cheliangLiuyanList);return R.ok();}}}}catch (Exception e){e.printStackTrace();return R.error(511,"批量插入数据异常,请联系管理员");}}/*** 前端列表*/@IgnoreAuth@RequestMapping("/list")public R list(@RequestParam Map<String, Object> params, HttpServletRequest request){logger.debug("list方法:,,Controller:{},,params:{}",this.getClass().getName(),JSONObject.toJSONString(params));CommonUtil.checkMap(params);PageUtils page = cheliangLiuyanService.queryPage(params);//字典表数据转换List<CheliangLiuyanView> list =(List<CheliangLiuyanView>)page.getList();for(CheliangLiuyanView 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);CheliangLiuyanEntity cheliangLiuyan = cheliangLiuyanService.selectById(id);if(cheliangLiuyan !=null){//entity转viewCheliangLiuyanView view = new CheliangLiuyanView();BeanUtils.copyProperties( cheliangLiuyan , view );//把实体数据重构到view中//级联表CheliangEntity cheliang = cheliangService.selectById(cheliangLiuyan.getCheliangId());if(cheliang != null){BeanUtils.copyProperties( cheliang , view ,new String[]{ "id", "createDate"});//把级联的数据添加到view中,并排除id和创建时间字段view.setCheliangId(cheliang.getId());}//级联表YonghuEntity yonghu = yonghuService.selectById(cheliangLiuyan.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 CheliangLiuyanEntity cheliangLiuyan, HttpServletRequest request){logger.debug("add方法:,,Controller:{},,cheliangLiuyan:{}",this.getClass().getName(),cheliangLiuyan.toString());cheliangLiuyan.setCreateTime(new Date());cheliangLiuyan.setInsertTime(new Date());cheliangLiuyanService.insert(cheliangLiuyan);return R.ok();}}

声明

本博客适用于广泛的学术和教育用途,包括但不限于个人学习、开发设计,产品设计。仅供学习参考,旨在为读者提供深入理解和学术研究的材料。

相关文章:

基于Sringboot+Vue个人驾校预约管理系统--论文pf

TOC springboot503基于SringbootVue个人驾校预约管理系统--论文pf 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。…...

python-逆序数(赛氪OJ)

[题目描述] 在一个排列中&#xff0c;如果一对数的前后位置与大小顺序相反&#xff0c;即前面的数大于后面的数&#xff0c;那么它们就称为一个逆序。一个排列中逆序的总数就称为这个排列的逆序数。比如一个元素个数为 4 的数列&#xff0c;其元素为 2,4,3,1&#xff0c;则 (2,…...

PCIE-flit mode retry

下一个即将发送的seq num: 下一个即将发送的ack或者nak的seq num: Tx发送exp seq num的个数: Tx发送nak的个数 下一个期望收到的flit的seq num&#xff0c;注意是指下个期望收到的有效的、non-idle、non_duplictae的flit: 收到的flit的真实的seq num&#xff08;implicit…...

使用Obsidian实现Anki快速制卡

文章目录 前言准备双双启用遇到问题查看是什么问题解决问题 开始使用使用前的一些设置快速制卡 前言 我现在使用 Anki 的同时也使用 Obsidian&#xff0c;正好可以通过插件来让这两个十分好用的软件实现联动。 在 Obsidian 中实现 Anki 的快速制卡。 准备 首先要在这两个软…...

Python编程:从入门到实践书籍介绍

对于Python入门的书籍推荐&#xff0c;以下是五本详细讲解的书籍&#xff0c;它们各自具有不同的特点和适用对象&#xff1a; 1. 《Python编程:从入门到实践》 作者&#xff1a;埃里克马瑟斯&#xff08;Eric Matthes&#xff09;《Python编程:从入门到实践》是一本经典的Pyth…...

Vue 3 的 emit 简单使用

在 Vue 3 中使用 emit&#xff0c;子组件可以将事件通知父组件&#xff0c;父组件可以在响应这些事件时执行特定的逻辑。 emit 是一种非常灵活的通信方式&#xff0c;允许组件之间以解耦的方式进行交互。 1. 基本用法 1、使用 defineEmits 子组件 <template><div…...

java在实际开发中反常识bug

目录 1.背景 2.案例 1.包装类型拆箱导致空指针异常 2.switch传入null,导致空指针异常 3.Arrays.asList添加异常 4.转BigDecimal类型时精度丢失 5.除以0不一定抛异常 6.Steam filter后集合修改,会修改原数据 3.完美&评论 1.背景 这篇博客,将列举本人在实际开发中看…...

java多线程(三)重排序与Happens-Before

一、重排序 1.1 指令重排定义和含义 定义&#xff1a;重排序是指编译器和处理器为了提高程序执行效率&#xff0c;在不改变单线程程序执行结果的前提下&#xff0c;对指令执行顺序进行重新排列的一种优化手段。 重排序可以发生在编译器优化阶段&#xff0c;也可以发生在处理…...

RUST知识框架与学习框架

RUST知识框架与学习框架 Rust是一门系统级编程语言&#xff0c;以其内存安全、高性能和并发性而著称&#xff0c;特别适用于开发低级系统、网络服务和并发应用&#xff0c;具有广泛应用前景。 一、Rust知识框架 基础语法与核心概念 变量与类型&#xff1a;包括基本数据类型、…...

git cherry-pick命令使用分享

在日常开发中&#xff0c;有时候会遇到一种情况&#xff0c;线上出了问题&#xff0c;但是现在的预生产环境&#xff08;Pre-production Environment&#xff09;或准生产环境&#xff08;Stage Environment&#xff09;有还未通过验收的内容&#xff0c;那么想进行修复可以选择…...

关闭Chrome快捷键

chrome是没办法改变快捷键以及屏蔽快捷键的&#xff0c;需要安装插件&#xff1a;shortkey 保证插件是开启的 不用做其他设置所有快捷键已被关闭...

常见DDoS攻击之零日漏洞Zero-day Attacks

目录 一、什么是零日漏洞Zero-day Attacks 二、零日漏洞是如何转化为零日攻击的 三、常见的零日攻击类型 四、为什么零日攻击很危险 五、著名的零日攻击事件 六、如何降低零日攻击的风险 七、DDoS攻击防御解决方案&#xff08;定制化&#xff09; 7.1 产品优势 7.2 产品…...

【字符串】Z函数 - 模板

z [ i ] z[i] z[i] 表示字符串 s s s 和 s [ i , n − 1 ] s[i,\ n - 1] s[i, n−1] 的最长前缀的长度&#xff0c;特别的&#xff0c; z [ 0 ] 0 z[0]0 z[0]0 // *********Z函数************** // - 时间复杂度 O(n) vector<int> z_function(string s) {int n (int…...

MySQL范围分区分区表

什么是范围分区分区表&#xff1f; 范围分区是一种根据某个列的范围值来分割表数据的分区方式。在范围分区中&#xff0c;每个分区都有自己的范围条件&#xff0c;当插入数据时&#xff0c;MySQL会根据指定的范围条件将数据分配到相应的分区中。这种分区方式可以使得表的数据按…...

网络UDP报文详细解析

目录 一、简介二、详细介绍三、其他相关链接1、TCP报文段的详细图总结2、TCP三次握手和四次挥手详解3、socket通信原理及相关函数详细总结4、网络包IP首部详细解析 一、简介 本文主要介绍UDP报文格式。 二、详细介绍 UDP是一种无连接、不可靠的用户数据报协议&#xff0c;其…...

望繁信科技入选2024年第3批上海市高新技术成果转化项目名单

近日&#xff0c;上海望繁信科技有限公司&#xff08;以下简称“望繁信科技”&#xff09;凭借其自主研发的“数字北极星流程挖掘分析软件”项目&#xff0c;成功入选2024年第3批上海市高新技术成果转化项目名单。这一殊荣根据《上海市高新技术成果转化项目认定办法》&#xff…...

深入探讨MySQL的锁机制:全局锁、表级锁和行级锁

深入探讨MySQL的锁机制&#xff1a;全局锁、表级锁和行级锁 在数据库管理中&#xff0c;锁机制是确保数据一致性和并发控制的重要手段。MySQL提供了多种锁策略&#xff0c;包括全局锁、表级锁和行级锁。本文将详细探讨这些锁机制的概念、使用场景及其示例代码&#xff0c;帮助…...

iLogtail 开源两周年:感恩遇见,畅想未来

早在上世纪 60 年代&#xff0c;早期的计算机&#xff08;例如 ENIAC 和 IBM 的大型机&#xff09;在操作过程中会输出一些基本的状态信息和错误报告&#xff0c;这些记录通常通过打印机输出到纸带或纸卡上&#xff0c;用于跟踪操作流程和调试&#xff0c;最早期的日志系统借此…...

写给大数据开发:在Databricks中自定义函数

你是否曾经在处理海量数据时感到力不从心?是否在重复编写相似代码时感到厌烦?如果是,那么Databricks中的自定义函数可能就是你一直在寻找的救星。在接下来的5分钟里,让我们一起探索如何利用这个强大的工具来revolutionize你的大数据开发工作流程。 目录 为什么要在Databrick…...

VMware vSphere Client无法访问和连接ESXi虚拟主机解决思路

文章目录 前言1. 问题现象2. 问题原因3. 解决方法4. 参考文章 前言 注意 : 可以先看看参考文章那里&#xff0c;在回过来看 1 、 2 、3 1. 问题现象 版本&#xff1a;VMware vCenter Server 5.5.0 build-2442329 问题描述&#xff1a;用VMware vSphere Client 登录ESXI主机出…...

实现Kruskal算法连通游戏地图地牢

前置知识 c分享&#xff5c;并查集从入门到出门 - 力扣&#xff08;LeetCode&#xff09; 彻底搞懂克鲁斯卡尔&#xff08;Kruskal&#xff09;算法&#xff08;附C代码实现&#xff09; - QuanHa - 博客园 (cnblogs.com) 白色点矩形是地牢&#xff0c;其中白线是按照krsukal…...

turtle画图知识

Turtle库是Python编程语言中的一个库&#xff0c;用于创建各种类型的图形&#xff0c;包括简单圆形、线条、路径和图片。它支持多种图形类型&#xff0c;并且可以绘制出各种复杂的形状。 以下是一些基本的使用方法&#xff1a; 1. 创建一个新的Turtle对象&#xff1a; pytho…...

Elasticsearch简述

Elasticsearch简述 Elasticsearch产品介绍 Elasticsearch是一个基于Apache Lucene的开源的分布式搜索和分析引擎,设计用于云计算中,能够快速处理大量数据。它能够近实时地进行复杂的查询,并且可以用于全文检索、结构化搜索以及分析。Elasticsearch具有以下特性: 分布式搜索…...

SQL— DDL语句学习【后端 9】

SQL— DDL语句学习 在数据管理的广阔领域中&#xff0c;SQL&#xff08;Structured Query Language&#xff09;作为操作关系型数据库的编程语言&#xff0c;扮演着举足轻重的角色。它不仅定义了操作所有关系型数据库的统一标准&#xff0c;还为我们提供了强大的工具来管理、查…...

线程池介绍

1.线程池简介 import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class CallableDemo {public sta…...

如何备份电脑所有数据?有哪些方法值得参考借鉴?

备份电脑所有数据是防护数据丢失和泄密的重要一项措施&#xff0c;备份数据也有不同的方式和工具&#xff0c;正确的工具能帮你省时省力&#xff0c;下面盘点了几个方法&#xff0c;来看哪一种最适合你。 一、使用专业备份软件 第三方服务器文件自动备份软件&#xff1a;如安企…...

初识--树(1)

下面就是这篇博客要讲的内容 树 二叉树堆 树概念及结构二叉树的概念及结构二叉树的实现堆的概念及运用 这篇博客主要以二叉树为主要内容。 1、树的概念及结构 1.1树的概念&#xff1a; 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限…...

渗透测试实战-菠菜站渗透测试(Nacos反序列化漏洞利用)

免责声明&#xff1a;文章来源于真实渗透测试&#xff0c;已获得授权&#xff0c;且关键信息已经打码处理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本…...

Pytest框架直接右键运行 testcase.py,不执行最外层conftest

随笔记录 目录 1. 背景介绍 2. workaround method 2.1 通过命令行执行 某个测试用例 1. 背景介绍 Pytest 框架结构如下&#xff1a; TestCases:conftest.pyInstanta: conftest.pytest_instanta_tcpdump_pack_len.py# 当直接右键直接 运行 test_instanta_tcpdump_pack_l…...

Cxx primer-chap15-Object-Oriented Programming

面向对象编程的三个基本概念&#xff1a;数据抽象、继承和动态绑定&#xff08;多态&#xff09;&#xff1a;基类应该提供一些类型无关的成员函数定义&#xff0c;将与类相关的函数留给不同的派生类定义&#xff1a;&#xff0c;派生类是通过类派生列表(class derivation list…...