摘 要

开关柜作为变电站的重要电气设备,担负着关合及断开电力线路、保护系统安全的双重作用,对变电站的安全、可靠运行起着举足轻重的作用。我国经济建设和改革开放的蓬勃发展,电力系统的应用及其安全得到广泛关注,然而对用电设备的监测与监控却种供电配电柜组,这些配电柜组的安全是用电安全的重要保障。对配电柜的是一个长期未能解决的问题。我国的发电厂、工矿企业等用电场所大都配备各工作状态、工作环境的监测是保障配控制装置,采用智能监测信息查询技术设计合理的开关柜温度、湿度电柜安全工作的重要手段。

本文主要通过对开关柜综合监测信息查询系统的功能性需求分析,对系统的安全性和可扩展性进行了非功能性需求分析。在详细的需求分析的基础上,根据系统的功能设计确定了数据库结构,实现完整的代码编写。开关柜综合监测信息查询系统完成了主要模块的页面设计和功能实现。本文展示了首页页面的实现效果图,并通过代码和页面介绍了用户注册功能、开关柜管理、每日放电、每时放电、放电量管理、路局管理以及工务管理功能模块的实现过程。

关键词:开关柜综合监测信息查询;Springboot框架;数据库

Springboot switchgear integrated monitoring information query system

Abstract

As an important electrical equipment of substation, switchgear plays a dual role in closing and disconnecting power lines and protecting system safety. It plays an important role in the safe and reliable operation of substation. With the vigorous development of China's economic construction and reform and opening up, the application and safety of power system have attracted extensive attention. However, the monitoring and monitoring of electrical equipment is a kind of power supply distribution cabinet group. The safety of these distribution cabinet groups is an important guarantee for power safety. The of distribution cabinet is a problem that has not been solved for a long time. Power plants, industrial and mining enterprises and other electric fields in China are mostly equipped with monitoring of working conditions and working environment, which is an important means to ensure the distribution control device, and adopt intelligent monitoring and query technology to design reasonable temperature and humidity of switch cabinet, so as to ensure the safe work of electric cabinet.

This paper analyzes the functional requirements and expansibility of the system. Based on the detailed demand analysis, the database structure is determined according to the functional design of the system to realize the complete coding. The switch cabinet comprehensive monitoring information query system has completed the page design and function realization of the main modules. This paper shows the implementation effect diagram of the home page, and introduces the implementation process of user registration function, switch cabinet management, daily discharge, hourly discharge, discharge management, Road Bureau Management and public works management function module through code and page.

Key words: Query of comprehensive monitoring information of switchgear; Springboot framework; database

目  录

一、 绪论

(一) 研究背景与意义

(二) 研究内容

二、 开发工具及相关技术介绍

(一)J2EE技术

()MVVM模式

()B/S结构

()Springboot框架

() Mysql数据库

() B/S体系工作原理

三、 系统分析

(一) 可行性分析

1.经济可行性

2.技术可行性

3.操作可行性

(二) 功能性需求分析

(三) 非功能性需求分析

(四) 业务流程分析

四、 系统设计

(一) 功能模块设计

(二) 数据库设计

1.概念模型设计

2.数据库表设计

五、 系统实现

(一) 系统用户登录的实现

(二) 系统主要功能实现

六、 系统测试

(一) 系统可靠性测试

(二) 系统功能性测试

(三) 系统合格性测试

(四) 测试结果

七、 总结与展望

参考文献

致谢

  • 研究背景与意义

伴随着我国国民经济的不断持续发展,用电量也随之大幅度提高,电力系统的安全运行关系到我国经济的发展和人民生活的稳定。开关柜在电力系统的运行中起到开合、控制和保护的作用,它的正常运行与否将直接影响到变电站甚至整个电力系统的正常运行状态,因此,如何保障开关柜的正常运行,对整个电力系统的安全运行将显得格外重要。可是实际生产中,开关柜一直处于长期运行中,其上的各个触电及连接点等部位由于老化、污染易造成间隙过大或接触电阻增大,在电流通过,特别是用电高峰期,容易产生发热现象,如果不能及时发现并处理,将会任由温度升高,引发事故的产生。

随着变电站综合自动化系统的不断普及,无人值守的变电站成为变电站发展的必然趋势,为实现电力企业减员增效、提高劳动生产率、促进电网安全和稳定等方面起了积极作用。开关柜作为变电站的极其重要电气设备,担负着关合及断开电力线路、保护系统安全的双重作用,对变电站的安全、可靠运行起到举足轻重的作用。现代电力系统对电能质量的要求越来越高,相应地对开关柜运行的可靠性也提出了更高的要求。同时,随着传感器技术、信号处理技术、计算机技术、人工智能技术的发展,使得对开关柜的运行状态进行在线监测以及信息查询,及时发现故障隐患并对累计性故障做出预测成为了可能。它对于保证开关柜的正常运行,减少维修的次数,提高电力系统的运行可靠性和自动化程度具有极其重要意义。

  • 研究内容

基于Springboot的开关柜综合监测信息查询系统的开发及实现,所需要的工作内容:

(1)首先是确定选题,确定好所要做的系统,并对系统的背景及现在面临的一些问题等进行系统的初步确认。

(2)系统确认完成后,结合系统开发的需求进行确认系统开发所使用的技术开关柜综合监测信息查询系统的开发使用Springboot框架,数据库进行系统的搭建开发,确认好使用的技术进行技术分析,所使用的技术是否可以完成系统的实现。

(3)确定好系统使用的技术,进行在线确认系统所划分的用户角色,并且根据用户角色划分确定所要设计的功能模块,对于开关柜综合监测信息查询系统的设计主要划分别为管理员和用户角色,并所使用的功能模块也相应不同,但是系统的数据库实现的内容是交互的,用户可以随时根据自己的需求进行信息监测与查询,对于系统工作人员可以根据自己的分管内容进行信息的管理操作,管理员获取到所有用户的详细数据信息,并根据需求进行第一时间处理解决。

(4)系统的功能模块确认完成后进行程序及界面的设计,设计完成后,并且通过测试来判断程序是否完善,对于系统测试,需要不同的用户进行不同的内容编辑及提交,及使用不同的测试方式找出程序中存在的漏洞,并对程序出现的漏洞问题进行在线解决处理,如果测试系统没有任何问题时,可以将系统上传进行正式操作使用。

  • 开发工具及相关技术介绍
  • J2EE技术

人可以掌握多门外语,而一个计算机科学家精通的大多是编程语言,它不是人类的自然语言,比如C语言、Java、Perl等等。由于不同的公司开发出的“中间件”不够规范,所以Sun公司推出J2EE,用这个标准来解决弊病。它提供了良好的机制,让每个层次允许与之相对的服务器、组件运行,使得系统的搭建稳定可用、开发高效、维护方便。

  • MVVM模式

Springboot(Spring+SpringMVC+MyBatis)框架集由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。

1.1Spring

Spring就像是整个项目中装配bean的大工厂,在配置文件中可以指定使用特定的参数去调用实体类的构造方法来实例化对象。也可以称之为项目中的粘合剂。

Spring的核心思想是IoC(控制反转),即不再需要程序员去显式地`new`一个对象,而是让Spring框架帮你来完成这一切。

1.2 SpringMVC

SpringMVC在项目中拦截用户请求,它的核心Servlet即DispatcherServlet承担中介或是前台这样的职责,将用户请求通过HandlerMapping去匹配Controller,Controller就是具体对应请求所执行的操作。SpringMVC相当于SSH框架中struts。

1.3 mybatis

mybatis是对jdbc的封装,它让数据库底层操作变的透明。mybatis的操作都是围绕一个sqlSessionFactory实例展开的。mybatis通过配置文件关联到各实体类的Mapper文件,Mapper文件中配置了每个类对数据库所需进行的sql语句映射。在每次与数据库交互时,通过sqlSessionFactory拿到一个sqlSession,再执行sql命令。

页面发送请求给控制器,控制器调用业务层处理逻辑,逻辑层向持久层发送请求,持久层与数据库交互,后将结果返回给业务层,业务层将处理逻辑发送给控制器,控制器再调用视图展现数据。

  • B/S结构

B/S(Browser/Server)比前身架构更为省事的架构。它借助Web server完成数据的传递交流。只需要下载浏览器作为客户端,那么工作就达到“瘦身”效果, 不需要考虑不停装软件的问题。

  • Spring boot框架

Spring框架是Java平台上的一种开源应用框架,提供具有控制反转特性的容器。尽管Spring框架自身对编程模型没有限制,但其在Java应用中的频繁使用让它备受青睐,以至于后来让它作为EJB(EnterpriseJavaBeans)模型的补充,甚至是替补。Spring框架为开发提供了一系列的解决方案,比如利用控制反转的核心特性,并通过依赖注入实现控制反转来实现管理对象生命周期容器化,利用面向切面编程进行声明式的事务管理,整合多种持久化技术管理数据访问,提供大量优秀的Web框架方便开发等等。Spring框架具有控制反转(IOC)特性,IOC旨在方便项目维护和测试,它提供了一种通过Java的反射机制对Java对象进行统一的配置和管理的方法。Spring框架利用容器管理对象的生命周期,容器可以通过扫描XML文件或类上特定Java注解来配置对象,开发者可以通过依赖查找或依赖注入来获得对象。Spring框架具有面向切面编程(AOP)框架,SpringAOP框架基于代理模式,同时运行时可配置;AOP框架主要针对模块之间的交叉关注点进行模块化。Spring框架的AOP框架仅提供基本的AOP特性,虽无法与AspectJ框架相比,但通过与AspectJ的集成,也可以满足基本需求。Spring框架下的事务管理、远程访问等功能均可以通过使用SpringAOP技术实现。Spring的事务管理框架为Java平台带来了一种抽象机制,使本地和全局事务以及嵌套事务能够与保存点一起工作,并且几乎可以在Java平台的任何环境中工作。Spring集成多种事务模板,系统可以通过事务模板、XML或Java注解进行事务配置,并且事务框架集成了消息传递和缓存等功能。Spring的数据访问框架解决了开发人员在应用程序中使用数据库时遇到的常见困难。它不仅对Java:JDBC、iBATS/MyBATIs、Hibernate、Java数据对象(JDO)、ApacheOJB和ApacheCayne等所有流行的数据访问框架中提供支持,同时还可以与Spring的事务管理一起使用,为数据访问提供了灵活的抽象。Spring框架最初是没有打算构建一个自己的WebMVC框架,其开发人员在开发过程中认为现有的StrutsWeb框架的呈现层和请求处理层之间以及请求处理层和模型之间的分离不够,于是创建了SpringMVC。

  • Mysql数据库

Mysql 经过多次的更新,功能层面已经非常的丰富和完善了,从Mysql4版本到5版本进行了比较大的更新,在商业的实际使用中取得了很好的实际应用效果。最新版本的Mysql支持对信息的压缩,同时还能进行加密能更好的满足对信息安全性的需求。同时经过系统的多次更新,数据库自身的镜像功能也得到了很大的增强,运行的流畅度和易用性方面有了不小的进步,驱动的使用和创建也更加的高效快捷。最大的变动还是进行了空间信息的显示优化,能更加方便的在应用地图上进行坐标的标注和运算。强大的备份功能也保证了用户使用的过程会更加安心,同时支持的Office特性还支持用户的自行安装和使用。在信息的显示形式上也进行了不小的更新,增加了两个非常使用的显示区,一个是信息区,对表格和文字进行了分类处理,界面的显示更加清爽和具体。第二是仪表的信息控件,能在仪表信息区进行信息的显示,同时还能进行多个信息的比对,为用户的实际使用带来了很大的便捷。

针对本文中设计的开关柜综合监测信息查询系统在实际的实现过程中,最终选择Mysql数据库的主要原因在于在企业的应用系统应用及开发的过程中会存在大量的数据库比较频繁的操作,而且数据的安全性要求也是非常的高。综合这些因素,最终选择安全性系数比较高的Mysql来对开关柜综合监测信息查询系统后台数据进行存储操作。

(六)B/S体系工作原理

B/S架构采取浏览器请求,服务器响应的工作模式。

用户可以通过浏览器去访问Internet上由Web服务器产生的文本、数据、图片、动画、视频点播和声音等信息;

而每一个Web服务器又可以通过各种方式与数据库服务器连接,大量的数据实际存放在数据库服务器中;

从Web服务器上下载程序到本地来执行,在下载过程中若遇到与数据库有关的指令,由Web服务器交给数据库服务器来解释执行,并返回给Web服务器,Web服务器又返回给用户。在这种结构中,将许许多多的网连接到一块,形成一个巨大的网,即全球网。而各个企业可以在此结构的基础上建立自己的Internet。

在 B/S 模式中,用户是通过浏览器针对许多分布于网络上的服务器进行请求访问的,浏览器的请求通过服务器进行处理,并将处理结果以及相应的信息返回给浏览器,其他的数据加工、请求全部都是由Web Server完成的。通过该框架结构以及植入于操作系统内部的浏览器,该结构已经成为了当今软件应用的主流结构模式。

  • 系统分析

本系统将在经济、技术、操作这三个角度上进行可行性分析。

  1. 经济可行性

整个系统从设计到开发以及测试过程严谨步骤齐全,所有工作任务全部由本人完成,并未获取外部技术支持,节约了一切服务成本开销以及人工成本,在硬件方面,为节约成本使用一台二手移动工作站作为项目部署服务器以及数据库服务器,成本在一万元一下,真个网络部署也是由本人独立完成不涉及到其他人工费用,整个开发过程本着低成本,低消耗的原则。

  1. 技术可行性

技术可行性分析的目的是确认该系统能否利用现有技术实现,并评估开发效率和完成情况。技术的可行性是指在当前的技术条件下,计算机软件和硬件的开发是否能够满足发展的要求。因为该系统的开发基于Java语言,所以开发该系统所需的软件和硬件条件可以在普通计算机上满足。因为它占用的内存相对较少,所以用Mysql数据库开发和设计软件理论上没有问题,因为它占用的内存太少。上述技术可以有效地保证系统的成功和高效开发。

  1. 操作可行性

开关柜综合监测信息查询系统的使用界面简单易于操作,采用常见的界面窗口来登录界面,通过电脑进行访问操作,用户只要平时使用过电脑都能进行访问操作。此系统的开发采用Java技术开发,人性化和完善化是B/S结构开发比较显要的特点使得用户操作相比较其他更加简洁方便。易操作、易管理、交互性好在本系统操作上体现得淋漓尽致。

  • 功能性需求分析

系统需求:

(1)开关柜管理:主要对开关柜信息进行管理,包括:编号、名称、路局、工区、工务处信息等。

(2)宽带开户管理:主要包括用户宽带开户信息的管理,审核、维护等。

(3)每日放电次数管理:对每日放电次数进行记录管理,包括:编号、路局、工务处、工区、放电次数、记录日期信息等。

(4)每日放电量管理:对每日放电值数信息进行记录管理。

(5)警告记录管理:发布警告信息。

(6)工区、工务处、路局管理等。

系统功能用例图如下所示。

图1 系统功能用例图

每日放电次数添加用例描述如下表所示。

表1每日放电次数添加用例描述

用例名称

添加新每日放电次数

参与者

管理员

用例概述

本用例用于管理员进行添加新每日放电次数操作

前置条件

管理员添加新每日放电次数前必须登录系统

后置条件

系统中添加一个新每日放电次数

基本事件流

参与者动作

系统响应

  1. 管理员在后台主界面选择“新每日放电次数”。

4、管理员填写新每日放电次数信息,点击“添加”按钮。

2、系统打开添加新每日放电次数界面。

3、系统检查管理员输入的每日放电次数信息是正确有效的。

5、系统将每日放电次数添加到数据库中。

6、系统提示“操作成功”。

7、系统跳转到每日放电次数管理界面。

其他事件流

系统验证管理员输入的每日放电次数名为空,则提示“*请填写每日放电次数信息!”。

警告记录删除用例描述如下表所示。

表2警告记录删除用例描述

用例名称

删除警告记录

参与者

管理员

用例概述

本用例用于管理员进行删除警告记录操作

前置条件

管理员删除警告记录前必须登录系统

后置条件

系统中删除一个警告记录

基本事件流

参与者动作

系统响应

1、管理员在后台主界面选择“警告记录管理”。

4、管理员选择一个警告记录,点击“删除”按钮。

6、管理员点击“确定”按钮。

2、系统从数据库中获取警告记录信息列表

3、系统打开警告记录列表界面。

5、系统提示“你确定要删除吗?”。

7、系统将警告记录从数据库中删除。

8、系统提示“删除成功”。

9、系统跳转到警告记录管理界面。

其他事件流

用户编辑用例描述如下表所示。

表3用户编辑用例描述

用例名称

修改用户

参与者

管理员

用例概述

本用例用于管理员进行修改用户信息操作

前置条件

管理员已经登录系统

后置条件

系统中更新一条用户记录

基本事件流

参与者动作

系统响应

1、管理员在后台主界面选择“用户管理”。

4、管理员在用户列表中选择一个用户,点击“编辑”按钮。

6、管理员填写用户信息,点击“保存修改”按钮。

2、系统从数据库中获取用户信息。

3、系统打开用户列表界面。

5、系统打开修改用户信息界面。

7、系统将更改后的添加到数据库中。

8、系统提示“操作成功”。

9、系统跳转到用户管理界面。

其他事件流

每日放电量用例描述如下表所示。

表4每日放电量用例描述

用例名称

每日放电量

参与者

管理员

用例概述

本用例用于管理员进行对每日放电量操作

前置条件

管理员已经登录系统

后置条件

系统中增加一条管理员签订记录

基本事件流

参与者动作

系统响应

1、管理员在前台首页选择每日放电量记录。

4、管理员在管理员列表中选择一个每日放电量。

7、管理员每日放电量,点击“添加”按钮。

2、系统从数据库中获取每日放电量列表信息。

3、系统打开每日放电量列表界面。

5、系统从数据库中获取每日放电量信息。

6、系统打开每日放电量信息界面。

8、系统检查管理员输入的信息是正确有效的。

其他事件流

1、系统验证管理员输入的字段为空,则提示“*每日放电量信息不能为空!”。

  • 非功能性需求分析

随着用户量的增加,系统可能会需要同时服务上千、上万个页面,服务器需要同时响应大量用户的操作,这就要求系统需要有良好的可扩展性,否则系统会出现延迟,卡顿甚至服务器崩溃的问题。高扩展性可以使软件保持旺盛的生命力,同时也能够使系统更好的适应用户增加、提高性能需求、增加应用功能等改变。

系统中保存了大量用户和管理员的个人信息,因此,保证系统服务器和数据安全是在开发过程中需要考虑的重要问题。安全性包括服务器安全、操作系统安全、数据库安全、程序代码安全以及用户个人信息和支付安全等,系统可以通过采用防火墙技术、加密技术、认证技术等来增强其安全性,只有一个健壮安全的系统才能具有长久的生命力。

  • 业务流程分析

开关柜综合监测信息查询系统中,功能模块主要实现:开关柜管理、警告记录管理、每日放电量管理、每时放电量管理、每日放电次数管理、每时放电次数管理、路局管理、工务处管理、工区管理的功能。开关柜综合监测信息查询系统的后台中,管理员对用户在前台提交产生的数据进行处理,以满足系统用户的需求。

  • 系统设计
  • 功能模块设计

通过软件的需求分析已经获得了系统的基本功能需求。根据各大功能模块的不同,将系统分为各种功能大块。系统功能结构如下图所示。

图4系统功能结构图

  • 数据库设计
  1. 概念模型设计

概念设计包括实体和联系两部分,如该系统中,用户是一个实体,其属性包括用户 ID 标识、用户名、密码、电话、地址等属性。联系是指实体之间有意义的关联,包括一对一、一对多、多对多三种类型。

连接数据库的文件在Resources 文件夹下的application.yml文件,代码如下:

server:

port: 5000

servlet:

context-path: /api

spring:

datasource:

url: jdbc:mysql://127.0.0.1:3306/CS725260_20211101091736?serverTimezone=GMT%2B8&useSSL=false&characterEncoding=utf-8

username: root

password: root

driver-class-name: com.mysql.cj.jdbc.Driver

jackson:

property-naming-strategy: CAMEL_CASE_TO_LOWER_CASE_WITH_UNDERSCORES

default-property-inclusion: ALWAYS

time-zone: GMT+8

date-format: yyyy-MM-dd HH:mm:ss

servlet:

multipart:

max-file-size: 100MB

max-request-size: 100MB

  1. 数据库表设计

数据库表是设计和实现系统的一个重要基础。以下列出了开关柜综合监测信息查询系统几个重要的数据库表。

名称

类型

长度

不是null

主键

注释

daily_discharge_id

int

11

每日放电量ID

number

varchar

64

编号

name

varchar

64

名称

railway_bureau

varchar

64

路局

public_works_division

varchar

64

工务处

work_area

varchar

64

工区

discharge_value

int

11

放电值

record_date

date

0

记录日期

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

daily_discharge_times_id

int

11

每日放电次数ID

number

varchar

64

编号

name

varchar

64

名称

railway_bureau

varchar

64

路局

public_works_division

varchar

64

工务处

work_area

varchar

64

工区

discharge_times

int

11

放电次数

record_date

date

0

记录日期

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

discharge_times_per_hour_id

int

11

每时放电次数ID

number

varchar

64

编号

name

varchar

64

名称

railway_bureau

varchar

64

路局

public_works_division

varchar

64

工务处

work_area

varchar

64

工区

frequency

int

11

次数

record_time

time

0

记录时间

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

hourly_discharge_id

int

11

每时放电量ID

number

varchar

64

编号

name

varchar

64

名称

railway_bureau

varchar

64

路局

public_works_division

varchar

64

工务处

work_area

varchar

64

工区

numerical_value

int

11

数值

record_time

time

0

记录时间

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

public_works_department_management_id

int

11

工务处管理ID

public_works_division

varchar

64

工务处

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

railway_administration_id

int

11

路局管理ID

railway_bureau

varchar

64

路局

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

switch_cabinet_id

int

11

开关柜ID

number

varchar

64

编号

name

varchar

64

名称

voltage_level

varchar

64

电压等级

railway_bureau

varchar

64

路局

public_works_division

varchar

64

工务处

work_area

varchar

64

工区

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

warning_classification_id

int

11

警告分类ID

warning_type

varchar

64

警告类型

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

warning_record_id

int

11

警告记录ID

number

varchar

64

编号

name

varchar

64

名称

railway_bureau

varchar

64

路局

public_works_division

varchar

64

工务处

work_area

varchar

64

工区

warning_start_time

datetime

0

警告开始时间

last_warning_time

datetime

0

最近警告时间

warning_type

varchar

64

警告类型

warning_confirmation_time

datetime

0

警告确认时间

confirmed_by

varchar

64

确认人

play_sound

varchar

64

是否播放声音

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

名称

类型

长度

不是null

主键

注释

work_area_management_id

int

11

工区管理ID

work_area

varchar

64

工区

recommend

int

11

智能推荐

create_time

datetime

0

创建时间

update_time

timestamp

0

更新时间

  • 系统实现
  • 系统用户登录的实现

系统用户点击“登陆”进入到登陆页面,输入用户名和密码,点击“登陆”按钮,对用户名和密码进行验证,根据传入的用户名和密码在数据库中是否能查询到一条用户信息,若不能返回用户信息则登陆失败,页面提示用户名或密码错误。

登陆拦截管理器,在config文件夹下的WebAppConfig.java文件,代码如下:

@Configuration

@Slf4j

public class WebAppConfig implements WebMvcConfigurer {

@Override

public void addInterceptors(InterceptorRegistry registry) {

//登录拦截的管理器

InterceptorRegistration registration = registry.addInterceptor(loginInterceptor());

//拦截的地址

registration.addPathPatterns("/**");

//方行的地址

//registration.excludePathPatterns("/**");

//根据需要拦截,一般设置所有地址拦截,放行公共连接

}

@Bean

public LoginInterceptor loginInterceptor(){

return new LoginInterceptor();

}

}

登录界面如下图所示。

图5-1登录界面

系统用户登录的关键代码如下。

/**

* 登录

* @param data

* @param httpServletRequest

* @return

*/

@PostMapping("login")

public Map<String, Object> login(@RequestBody Map<String, String> data, HttpServletRequest httpServletRequest) {

log.info("[执行登录接口]");

String username = data.get("username");

String email = data.get("email");

String phone = data.get("phone");

String password = data.get("password");

List resultList = null;

Map<String, String> map = new HashMap<>();

if(username != null && "".equals(username) == false){

map.put("username", username);

resultList = service.select(map, new HashMap<>()).getResultList();

}

else if(email != null && "".equals(email) == false){

map.put("email", email);

resultList = service.select(map, new HashMap<>()).getResultList();

}

else if(phone != null && "".equals(phone) == false){

map.put("phone", phone);

resultList = service.select(map, new HashMap<>()).getResultList();

}else{

return error(30000, "账号或密码不能为空");

}

if (resultList == null || password == null) {

return error(30000, "账号或密码不能为空");

}

//判断是否有这个用户

if (resultList.size()<=0){

return error(30000,"用户不存在");

}

User byUsername = (User) resultList.get(0);

Map<String, String> groupMap = new HashMap<>();

groupMap.put("name",byUsername.getUserGroup());

List groupList = userGroupService.select(groupMap, new HashMap<>()).getResultList();

if (groupList.size()<1){

return error(30000,"用户组不存在");

}

UserGroup userGroup = (UserGroup) groupList.get(0);

//查询用户审核状态

if (!StringUtils.isEmpty(userGroup.getSourceTable())){

String sql = "select examine_state from "+ userGroup.getSourceTable() +" WHERE user_id = " + byUsername.getUserId();

String res = String.valueOf(service.runCountSql(sql).getSingleResult());

if (res==null){

return error(30000,"用户不存在");

}

if (!res.equals("已通过")){

return error(30000,"该用户审核未通过");

}

}

//查询用户状态

if (byUsername.getState()!=1){

return error(30000,"用户非可用状态,不能登录");

}

String md5password = service.encryption(password);

if (byUsername.getPassword().equals(md5password)) {

// 存储Token到数据库

AccessToken accessToken = new AccessToken();

accessToken.setToken(UUID.randomUUID().toString().replaceAll("-", ""));

accessToken.setUser_id(byUsername.getUserId());

tokenService.save(accessToken);

// 返回用户信息

JSONObject user = JSONObject.parseObject(JSONObject.toJSONString(byUsername));

user.put("token", accessToken.getToken());

JSONObject ret = new JSONObject();

ret.put("obj",user);

return success(ret);

} else {

return error(30000, "账号或密码不正确");

}

}

  • 系统主要功能实现

1.开关柜管理的实现

开关柜管理主要包括:编号、名称、电压等级、路局、工务处、工区信息等进行维护管理。如下图所示。

图5-2开关柜管理页面

开关柜管理的关键代码如下。

@PostMapping("/add")

@Transactional

public Map<String, Object> add(HttpServletRequest request) throws IOException {

service.insert(service.readBody(request.getReader()));

return success(1);

}

@Transactional

public Map<String, Object> addMap(Map<String,Object> map){

service.insert(map);

return success(1);

}

public Map<String,Object> readBody(BufferedReader reader){

BufferedReader br = null;

StringBuilder sb = new StringBuilder("");

try{

br = reader;

String str;

while ((str = br.readLine()) != null){

sb.append(str);

}

br.close();

String json = sb.toString();

return JSONObject.parseObject(json, Map.class);

}catch (IOException e){

e.printStackTrace();

}finally{

if (null != br){

try{

br.close();

}catch (IOException e){

e.printStackTrace();

}

}

}

return null;

}

public void insert(Map<String,Object> body){

StringBuffer sql = new StringBuffer("INSERT INTO ");

sql.append("`").append(table).append("`").append(" (");

for (Map.Entry<String,Object> entry:body.entrySet()){

sql.append("`"+humpToLine(entry.getKey())+"`").append(",");

}

sql.deleteCharAt(sql.length()-1);

sql.append(") VALUES (");

for (Map.Entry<String,Object> entry:body.entrySet()){

Object value = entry.getValue();

if (value instanceof String){

sql.append("'").append(entry.getValue()).append("'").append(",");

}else {

sql.append(entry.getValue()).append(",");

}

}

sql.deleteCharAt(sql.length() - 1);

sql.append(")");

log.info("[{}] - 插入操作:{}",table,sql);

Query query = runCountSql(sql.toString());

query.executeUpdate();

}

2.每日放电次数管理的实现

每日放电次数管理界面如下图所示。

图5-3每日放电次数管理界面

每日放电次数管理的关键代码如下。

@RequestMapping(value = {"/avg_group", "/avg"})

public Map<String, Object> avg(HttpServletRequest request) {

Query count = service.avg(service.readQuery(request), service.readConfig(request));

return success(count.getResultList());

}

  1. 每日放电量管理的实现

每日放电量管理界面如下图所示。

图5-4每日放电量管理界面

每日放电量管理的关键代码:

@RestController

@RequestMapping("auth")

public class AuthController extends BaseController<Auth, AuthService> {

/**

* 服务对象

*/

@Autowired

public AuthController(AuthService service) {

setService(service);

}

}

4.工务处管理的实现

管理员对系统工务处信息进行管理。

工务处管理界面如下图所示。

图5-5工务处管理界面

  1. 警告记录管理的实现

管理员可以获取系统中所有警告记录信息列表,并可以对其信息进行编辑。管理员在添加警告记录时,需要输入编号、工区、路局、工务处、警告开始时间、警告类型信息等,并对其进行维护管理等。

警告记录管理界面如下图所示。

图5-6警告记录管理界面

警告记录管理关键代码:

@RequestMapping("/get_obj")

public Map<String, Object> obj(HttpServletRequest request) {

Query select = service.select(service.readQuery(request), service.readConfig(request));

List resultList = select.getResultList();

if (resultList.size() > 0) {

JSONObject jsonObject = new JSONObject();

jsonObject.put("obj",resultList.get(0));

return success(jsonObject);

} else {

return success(null);

}

}

public Query select(Map<String,String> query,Map<String,String> config){

StringBuffer sql = new StringBuffer("select ");

sql.append(config.get(FindConfig.FIELD) == null || "".equals(config.get(FindConfig.FIELD)) ? "*" : config.get(FindConfig.FIELD)).append(" ");

sql.append("from ").append("`").append(table).append("`").append(toWhereSql(query, "0".equals(config.get(FindConfig.LIKE))));

if (config.get(FindConfig.GROUP_BY) != null && !"".equals(config.get(FindConfig.GROUP_BY))){

sql.append("group by ").append(config.get(FindConfig.GROUP_BY)).append(" ");

}

if (config.get(FindConfig.ORDER_BY) != null && !"".equals(config.get(FindConfig.ORDER_BY))){

sql.append("order by ").append(config.get(FindConfig.ORDER_BY)).append(" ");

}

if (config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE))){

int page = config.get(FindConfig.PAGE) != null && !"".equals(config.get(FindConfig.PAGE)) ? Integer.parseInt(config.get(FindConfig.PAGE)) : 1;

int limit = config.get(FindConfig.SIZE) != null && !"".equals(config.get(FindConfig.SIZE)) ? Integer.parseInt(config.get(FindConfig.SIZE)) : 10;

sql.append(" limit ").append( (page-1)*limit ).append(" , ").append(limit);

}

log.info("[{}] - 查询操作,sql: {}",table,sql);

return runEntitySql(sql.toString());

}

  1. 每时放电量管理的实现

管理员在后台管理界面点击“每时放电量管理”界面,对每日放电量信息(包括编号、名称、路局、工务处、工区、数值、记录时间)等进行维护管理。

每时放电量管理界面如下图所示。

图5-7每时放电量管理界面

每时放电量管理的关键代码如下。

@RequestMapping(value = {"/avg_group", "/avg"})

public Map<String, Object> avg(HttpServletRequest request) {

Query count = service.avg(service.readQuery(request), service.readConfig(request));

return success(count.getResultList());

}

  • 系统测试
  • 系统可靠性测试

以进入系统首页的访问速度为例展示系统的性能测试;系统要在3秒钟内响应;需要完成页面的开关柜管理、每日放电次数管理、每日放电量管理、路局、工务处、工区管理以及各功能模块入口等元素的显示。

  • 系统功能性测试

功能性测试是指执行指定的工作流程,通过对一个系统的所有特性和功能都进行测试确保符合需求和规范。

系统功能性测试表如下表所示。

表11系统功能性测试表

编号

测试功能

测试内容

测试结果

1

用户登录

1.验证用户名与密码的正确性。

2.验证密码是否可见。

通过

2

首页展示

1.首页数据是否成功加载。

2.验证搜索功能的准确性。

3.验证是否可以异步加载。

4.验证导航栏按钮。

通过

3

个人信息修改

1.验证登录名是否可以正常更改。

2.验证联系方式是否可以更改。

3.验证密码是否可以修改。

通过

4

开关柜管理

1.开关柜信息是否可以生成。

2.验证开关柜信息是否准确。

通过

7

每日放电次数管理

1.验证每日放电次数新增是否可以成功。

2.验证信息删除是否可以成功。

通过

8

每日放电量管理

1.放电量信息是否与上传一致。

2.是否能完成记录。

通过

9

每时放电次数管理

1.能否正常上传每时放电次数信息。

2.验证数据准确性。

通过

10

用户管理

1.验证用户录入功能。

2.验证用户违规清理功能。

通过

  • 系统合格性测试

集成测试后,所有的模块已经全部连接完毕,形成了一个完整的系统。合格性测试是在集成测试完毕后,进一步对系统进行综合性的检测。经过合格性测试,可以检查出系统是否符合系统的设计,能够完成需求的所有功能。本系统经过最后的测试,所有模块功能都能按预定要求工作。

  • 测试结果

在实际测试中,经过一系列系统性的测试,使我们能够及时发现一些系统在设计中出现的疏忽和漏洞。经过严密的测试,不仅发现了模块内部的错误,也查找到模块连接后产生的错误。经过测试,对系统产生错误的地方进行优化、修改和完善,使得系统能够实现最初设计的基本功能。

  • 总结与展望

本文针对开关柜综合监测信息查询系统的特点和用户需求,利用 Java相关技术、Springboot框架和等技术,通过详细的需求分析、页面设计和功能设计,系统利用JQuery 技术和 CSS 技术进行了页面设计,实现了包括开关柜管理、每日放电次数管理、每日放电量管理、每时放电次数管理、每时放电量管理、警告记录管理、路局管理、工务处管理、工区管理功能模块。并添加了用户的访问控制,建立了一个完整、健壮、安全稳定的开关柜综合监测信息查询系统。

由于时间限制和本人能力条件有限,还存在一些不足,今后也会出现许多新的开发技术,未来还可以对程序做出更加优化的改进:

参考文献

[1]和定繁.关于电力系统开关柜综合监测装置的研究[J].电力设备管理,2021(09):234-236.

[2]李磊.基于电力物联网的开关柜综合状态监测应用[J].自动化应用,2021(07):108-109+112.DOI:10.19769/j.zdhy.2021.07.035.

[3]张碧辉,黄巍巍,辛业春,关山.基于物联网信息集成的高压开关柜运行状态在线综合监测系统研究[J].电子设计工程,2020,28(13):101-107.DOI:10.14022/j.issn1674-6236.2020.13.023.

[4]琚泽立,张航伟,黄小羽,段玮,侯喆,李洪杰.一种模块化开关柜综合状态监测仪表的研制[J].高压电器,2020,56(06):282-288+295.DOI:10.13296/j.1001-1609.hva.2020.06.041.

[5]任庆庆. 开关柜温度和局部放电综合监测系统设计[D].沈阳航空航天大学,2019.DOI:10.27324/d.cnki.gshkc.2019.000554.

[6]祁麟, 开关柜综合在线监测和智能分析系统的研究与应用. 天津市,国网天津市电力公司城南供电分公司,2019-05-11.

[7]张杰,童劲松.关于环网柜在配网自动化中功能拓展的探讨[J].电子世界,2019(09):44.DOI:10.19353/j.cnki.dzsj.2019.09.027.

[8]朱新. 配电设备的关键状态监测与评价技术研究[D].华北电力大学(北京),2019.

[9]张少琳,李春明,桑云,刘肖骢,田君杰.国家电网设备综合监测系统[J].中国新通信,2018,19(01):26-27.

[10]汪春艳.电力系统开关柜综合监测装置[J].环球市场信息导报,2018(46):120-121.

[11]关好红.浅谈在线监测系统在变电站的应用与维护[J].低碳世界,2018(17):27-28.DOI:10.16844/j.cnki.cn10-1007/tk.2018.17.018.

[12]黄新波,赵阳,廖志军,朱海涛,石杰.基于物联网的高压开关柜综合在线监测装置设计[J].高压电器,2018,51(05):1-7.DOI:10.13296/j.1001-1609.hva.2018.05.001.

[13]曹志刚. 高压开关柜光纤温度智能综合监测系统的研究[D].华北电力大学,2018.

[14]黄新波,王列华,唐书霞,周柯宏.智能变电站开关柜综合状态监测IED设计[J].中国电力,2018,47(02):84-89.

[15]彭双剑,刘武林,刘复平,罗洁,范源.智能变电站在线监测系统应用现状及建议[J].湖南电力,2018,33(S1):40-42.

[16]霍福华,韩慧.基于SpringBoot微服务架构下前后端分离的MVVM模型[J].电子技术与软件工程,2022(01):73-76.

[17]单树倩,任佳勋.基于SpringBoot和Vue框架的数据库原理网站设计与实现[J].电脑知识与技术,2021,17(30):40-41+50.DOI:10.14004/j.cnki.ckt.2021.2868.

[18]王萍.SpringBoot项目中EhCache缓存技术的实现[J].电脑知识与技术,2021,17(29):79-81.DOI:10.14004/j.cnki.ckt.2021.2812.

致谢

时光飞逝,转眼间我在学校的这些年生活即将结束,回顾这几年的学习生活,收获良多,既有幸福也有难过,学校生活的结束对于我来说也是一个新的开始。论文即将完成,在此,我心中有许多想要感谢的人。首先感谢我的导师,不仅在学习研究方面加以指导,也在生活和为人处世上给予帮助。还要感谢授课老师,你们严谨的学术精神和积极向上的工作态度都在激励我的成长和进步。感谢多年来一直生活在一起的室友,谢谢你们多年来的陪伴和照顾。最后,要感谢各位论文评审老师,感谢您们在百忙之中抽空评阅本论文并给出宝贵的意见和建议。

                                                                点赞+收藏+关注    私信领取本源代码、数据库

Springboot开关柜综合监测信息查询系统毕业设计-附源码191550相关推荐

  1. java计算机毕业设计飞机航班信息查询系统(附源码、数据库)

    java计算机毕业设计飞机航班信息查询系统(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclisp ...

  2. SSM出租车查询系统 毕业设计-附源码220915

    SSM出租车查询系统 摘  要 随着经济的日益增长,信息化时代已经到来,生活中各种信息趋向数字化.清晰化.出租车查询系统就是在这样的一个环境中诞生的,交通的日益发达,出租车信息复杂化.因此我们将发挥计 ...

  3. SSM出租车查询系统毕业设计-附源码220915

    摘  要 随着经济的日益增长,信息化时代已经到来,生活中各种信息趋向数字化.清晰化.出租车查询系统就是在这样的一个环境中诞生的,交通的日益发达,出租车信息复杂化.因此我们将发挥计算机的庞大的存储空间, ...

  4. SSM+特殊病例查询系统 毕业设计-附源码231832

    特殊病例查询系统的设计与实现 摘 要 大数据时代下,数据呈爆炸式地增长.为了迎合信息化时代的潮流和信息化安全的要求,利用互联网服务于其他行业,促进生产,已经是成为一种势不可挡的趋势.在特殊病例查询的要 ...

  5. springboot停车场车辆定位管理可视化分析系统 毕业设计-附源码101702

    Springboot停车场车辆定位管理可视化分析系统 摘 要 21世纪时信息化的时代,几乎任何一个行业都离不开计算机,将计算机运用于停车场车辆定位管理也是十分常见的.过去使用手工的管理方式,造成了管理 ...

  6. SSM+工业关键设备监测运维系统 毕业设计-附源码191400

    ssm工业关键设备监测运维系统 摘 要 随着社会的发展,社会的方方面面都在利用信息化时代的优势.互联网的优势和普及使得各种系统的开发成为必需. 本文以实际运用为开发背景,运用软件工程原理和开发方法,它 ...

  7. springboot社区快递代取服务系统毕业设计-附源码

    摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题.针对社区快递代取服务系统等 ...

  8. springboot+社区快递代取服务系统毕业设计-附源码051434

    摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题.针对社区快递代取服务系统等 ...

  9. java计算机毕业设计公交线路查询系统(附源码、数据库)

    java计算机毕业设计公交线路查询系统(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstorm也行)+ Eclispe( ...

  10. springboot大学生综合素质测评系统 毕业设计-附源码51615

    摘  要 为全面提高教育管理水平,建立一个大学生综合素质测评管理系统已经成为目前各高校的共识.本文从实践经验出发,阐述目前高校学生工作管理的信息化现状﹔然后提出大学生综合素质测评管理系统的必要性以及系 ...

最新文章

  1. UIPickerView 修改必须滚动才修改值的bug
  2. 新书上市 | 新视角来了:《用户体验四维度》
  3. Hadoop 00_hadoop伪分布式,完全分布式,HA搭建
  4. java mongodb 返回所有field_JAVA高级之反射
  5. Leetcode PHP题解--D47 868. Binary Gap
  6. 12.history的用法
  7. [批处理]截取for命令里面的变量%%i
  8. Sakurairo开源WordPress主题模板
  9. 文章整理 - 匠人精神
  10. xshell的注册码
  11. angular对象简单介绍
  12. 大话伊辛模型之一:源起
  13. 泡泡龙游戏c语言程序,七彩泡泡龙小程序-微信七彩泡泡龙小程序小游戏v1.0-游戏宝手游网...
  14. Android麦克风探测器
  15. 三菱q系列plc连接电脑步骤_三菱Q系列PLC以太网通信设置方法
  16. 不同分子量的PEG衍生物试剂,DSPE-PEG6-Mal
  17. Day 20 IOl流
  18. 用程序 揭秘 用手机号尾号暴露你年龄的 骗局
  19. EEGLAB安装、EDF数据导入、EEG预处理(Matlab)
  20. selenium定位两个相同id、class的元素的第二个元素

热门文章

  1. 《EfficientDet:Scalable and Efficient Object Detection》论文笔记
  2. [ARM 的高级命名术 A32 T32 A64 Thumb Thumb2 AArch32 AArch64]
  3. 聚美上市后将往何方:服装特卖和100%透明的化妆品渠道
  4. 未充分说明劳务采购价格公允性、供应商合作合理性,电旗股份IPO被否.
  5. 机器学习-单层感知器不能实现异或运算的原因
  6. linux中syscmd用法,M4 宏处理器
  7. 著名建筑师马岩松元宇宙首作落地百度希壤 迪奥元宇宙首展同期揭幕
  8. Bunch转化为DataFrame的一般方法
  9. Android10闪退无日志,【报Bug】Android10手机白屏闪退
  10. 恢复训练记录20210809