基于物联网的设备运维系统的设计与实现_第1页
基于物联网的设备运维系统的设计与实现_第2页
基于物联网的设备运维系统的设计与实现_第3页
基于物联网的设备运维系统的设计与实现_第4页
基于物联网的设备运维系统的设计与实现_第5页
已阅读5页,还剩54页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第1章绪论1.1研究背景随着物联网技术的迅速发展和广泛应用,各类设备的连接与管理方式发生了深刻变革。从传统的单一控制到如今的智能化、网络化运维,设备信息的获取于交互方式愈发丰富多样。而基于物联网的设备运维管理系统正以其精准、高效的特性,成为现代工业、家居等领域不可或缺的重要工具。据统计,采用物联网技术的设备运维管理系统已经广泛应用于电力、交通、医疗等多个领域,为提升行业的智能化水平、推动产业升级做出了重要贡献。因此,深入研究基于物联网的设备运维管理系统的设计与实现,不仅具有重要的理论价值,更有着广阔的应用前景和深远的社会意义。 1.2研究意义设备运维对企业的稳定生产和长期发展具有重要意义,但是传统的设备运维方式,如人工巡检,效率低下且容易出错。物联网设备运维管理系统具备实时、自动监控设备运行状态的能力,它可以通过对数据的深度分析,预测潜在故障,并进行远程修复。这大大提高了设备的运行效率和可靠性。通过这些数据分析,企业可以更加精确地了解设备的运行状态和需求,从而优化资源配置,避免资源的浪费。并且基于物联网的设备运维管理系统是智能化发展的重要组成部分,随着物联网技术的引入,企业的设备运维管理可以变得更加信息化、智能化。通过引入更先进的技术,运维人员可以更加高效地完成运维及管理任务,减少了传统运维方式下可能出现的错误。其次,随着设备运维的智能化和安全性的加强,企业在运维方面的成本也会降低。本课题的设计与实现,旨在通过物联网技术和工具,实现企业设备运维管理的优化,为企业设备运维管理的信息化、智能化创造价值。1.3国内外研究现状设备运维管理是指设备运行的维护、维修等管理工作。在正常生产中,设备运行维护不到位或者维修把控不及时都会对设备造成一定影响,进而产生安全隐患或者故障维修,只有做好运维管理,及时补偿设备磨损,恢复设备性能,才能确保设备始终处于完好状态,提升设备利用率和安全性,保证生产持续进行。因此,设备运维管理是企业长久发展的关键REF_Ref15245\r\h[1]。设备运维作为企业十分重要的环节,其智能化、数字化得到了国内外的高度重视。企业运行与信息化技术的应用密不可分,所以需要不断完善运维管理系统,提升服务质量,保障企业的正常生产经营[2]。在国内,基于物联网的设备运维管理得到了广泛关注和应用。许多企业开始利用物联网技术实现设备的远程监控和管理,以提高设备的运行效率和降低运维成本。例如,在智能制造领域,物联网技术被广泛应用于生产线的监控和故障诊断,实现了设备的预测性维护和远程故障排除。此外,在能源、交通、医疗等领域,基于物联网的设备运维管理也得到了广泛应用。目前,理论研究和技术方面也有大量成果。国内运维系统软件起步较晚,但随着信息技术的飞速发展,设备运维软件设计在理论研究和技术方面也有大量成果。北京化工大学的母俐丽等,以帮助企业实现低成本且高效率的运维为目标,结合其运维特点为中小型企业设计了适用的运维系统架构[3]。并且对大多数企业来言,以下问题比较突出:缺少一套设备维修记录实时自动生成、整理和统计的平台。设备维修记录的生成来自于各分厂设备员人工统计,缺乏实时性、客观性、准确性和可靠性,导致该数据无法进行有效统计和分析。而预防预知性维修缺少基础数据会导致重复性故障发生,为公司带来经济损失。缺少一套提醒设备操作者定期点检的工具以及点检完成情况反馈给管理人员的平台。操作者填写点检记录,管理人员随机或定期对点检记录进行检查。多次出现操作者未按时点检、集中填写点检记录应付检查的情况,阻碍了设备故障隐患的及时发现,导致设备故障率增高、有效利用率下降[4]。而运维管理工作制度不完善是企业内部该项工作开展受限的另一重要因素。设备运维管理机制的落后,没有就企业内部设备运维管理工作形成一套科学严谨的规章制度,这使得实际工作开展较杂乱,后期追责困难,无法提升企业内部设备运维管理工作效率[5]。1.4本文的结构框架本文首先对物联网的设备运维现状进行了分析,对物联网的设备运维系统做了需求分析,在此基础上完成了基于物联网的设备运维系统的设计与实现。本文总共5章,具体的组织架构如下所示:第一章:绪论。本章介绍了本课题的研究背景,明确了研究目的,描述了国内外研究现状,确定了本文的结构框架。第二章:相关技术概论。本章介绍了系统使用的大部分技术,如Vue、SpringBoot、MySQL、Modbus等。第三章:系统分析。本章对系统开发的可行性进行了分析,并深入探讨了系统各功能模块的具体需求,以确保系统的设计与实现能够精准满足实际需求。第四章:系统实现与测试。本章首先详细阐述了系统各功能模块的代码实现细节,随后进行了全方位的功能测试,以确保其正常运行和达到预期效果。第五章:总结与展望。本章总结了本课题的研究过程,分析了本系统的不足,并对系统的改进做了一定的展望。1.5本章小结本章首先介绍了本系统的研究背景,接着阐述了研究意义,然后阐述了国内外的研究现状,总结出了目前设备管理的优缺点,最后介绍本文的框架及大概内容。

第2章相关技术2.1框架介绍1、Vue简介Vue.js是一款前端JavaScript框架,能帮助开发者快速关键交互的应用程序,且其是轻量级易学易用的框架,并且提供了许多高质量的插件和库,方便开发人员的开发REF_Ref12895\r\h[6]。Vue.js的核心库专注于视图层,使其易于与其他库或现有项目集成。2、SpringBoot简介SpringBoot是由Pivotal团队提供的全新框架,旨在简化新Spring应用的初始搭建以及开发过程。这个框架使用了特定的方式来进行配置,使开发人员不再需要定义样板化的配置。SpringBoot致力于成为快速应用开发领域的领导者。3、SpringCloud简介SpringCloud是用于创建分布式系统的开发框架,它建立在SpringBoot的基础上,提供了一组工具和组件,以简化分布式系统中的开发、部署和管理流程。它可以整合成熟的服务框架,为开发者提供一个便捷、易于部署和维护的分布式系统开发解决方案。4、MyBatis简介MyBatis作为一款卓越的持久层框架,其特色在于支持自定义SQL、存储过程以及高级映射功能。通过MyBatis,开发者可以极大地减少JDBC代码的编写,并避免手动设置参数及获取结果集的繁琐操作。5、若依框架简介若依(Ruoyi)框架是一款基于SpringBoot2.5.5、SpringCloud2020.0、OAuth2与JWT鉴权等核心技术,同时也支持SpringSecurity、ApacheShiro等多种安全框架,以及Mybatis、JPA等流行持久化框架,提供了许多常用的功能模块,包括系统管理、监控管理、任务调度、代码生成、文件上传、高德地图等功能的快速开发平台REF_Ref19562\r\h[7]。 2.2MySQL数据库简介MySQL是当下最好且最流行的关系数据库管理系统之一REF_Ref10955\r\h[8],尤其在WEB应用方面,MySQL是最好的RDBMS(RelationalDatabaseManagementSystem,关系数据库管理系统)应用软件之一。2.3Modbus通信协议简介MODBUS通信协议是由美国MODICON公司推出的基于RS485总线的通讯协议REF_Ref6184\r\h[9]。该协议专为可编程逻辑控制器(PLC)间通信而设计,并在工业领域确立了其作为通信协议的地位。它广泛应用于各种工业电子设备之间的连接,形成高效、稳定的通信网络。在Modbus协议中,主从结构是核心机制,即主设备负责发起请求,而从设备则负责接收、分析并响应这些请求。若通信过程中出现问题,从设备会通过返回异常功能码的方式,及时通知主设备。这种设计不仅确保了通信的可靠性,也降低了通信过程中的错误率。2.4MQTT协议简介MQTT协议是ISO标准(ISO/IECPRF20922)下基于主题进行订阅和发布,为硬件性能低下的远程设备以及相对糟糕的网络环境而设计的消息协议REF_Ref23441\r\h[10]。该协议使用LastWill和Testament特性通知有关客户端异常中断,具有提供一对多消息发布,解除应用程序耦合,TCP/IP提供网络连接,对负载内容屏蔽消息传输等特性REF_Ref23676\r\h[11]。其主题是应用信息上的附加标签,需要发挥其作用构建发布和订阅信息主体间的信息传输路径REF_Ref25910\r\h[12]。2.5ZigBee技术Zigbee技术是一种低功耗的个域网协议,它是基于标准的远程监控、控制和传感器网络技术,其具有鲜明的优点,如技术难度低、功耗低、时延短、安全性高及成本低等优点,一般将Zigbee芯片及外围电路称为Zigbee模块REF_Ref27438\r\h[14]。ZigBee技术的通信范围小和传输速率低的特点决定了其适应低复杂数据传输的性能特点REF_Ref27935\r\h[15]。2.6本章小结本章详细介绍了系统开发中用到的关键技术、结构技术的发展,为系统的开发提供了充分的理论知识。

第3章系统分析在本系统开发前,已经对基于物联网的设备运维进行了一些需求调研、系统分析以及相关技术的选型,为后续系统的开发提供了支持。3.1需求分析3.1.1功能性需求本系统是一个基于PC端的WEB系统,用户类型主要划分为两类:管理员、用户。系统的功能需求包括物联网设备运维系统的搭建,对设备的管理,对设备的状态进行监测。物联网设备运维系统的搭建物联网设备运维系统的搭建主要包括对用户设备的查看、添加、修改信息以及删除设备,查看设备告警,对设备分组的查看、添加、修改信息以及删除设备分类,查看系统的公告。管理员除此之外还能处理设备告警、删除设备告警,发布公告以及更改公告。设备管理设备管理主要是对设备的信息进行更新和删除,也可以新增设备并把它们更新到数据库中,并且可以对设备的状态进行监测。设备监测设备监测主要是对设备的状态进行监测并生成设备日志,并且可以在地图上查看设备的位置。系统的用例图如图3-1所示。图3-1系统用例图3.2.2非功能性需求(1)响应时间需求:系统应具备快速的响应时间,确保用户在进行设备监控、故障诊断、任务调度等操作时能够获得及时的反馈。(2)系统稳定性需求:系统应具备高稳定性,能够长时间连续运行而不出现故障或性能下降的情况。对于可能出现的异常情况,系统应具备自动恢复和容错机制,确保服务的持续性。(3)可维护性需求:系统应详细记录操作日志和审计信息,包括用户登录、设备接入、数据传输等关键操作。这些信息对于故障排查、安全审计和性能优化具有重要意义。(4)安全性需求:系统应具备完善的访问控制和权限管理机制,对不同用户设置不同的访问权限和操作限制。通过身份验证和授权机制确保只有合法用户才能访问系统资源和执行敏感操作。(5)可扩展性需求:随着物联网设备数量的日益增多,系统产生的数据量也在持续攀升。因此,系统应具备可扩展的数据存储能力,支持海量数据的存储和高效检索。3.2系统总体设计3.2.1系统架构本系统采用的是前后端分离架构,前端使用了Vue+Elementui进行搭建,而后端则采用SpringBoot+Mybatis与数据库进行交互。后端采用的Controller层、Service层、Dao层、domain层进行逻辑处理。基于物联网的设备运维系统的系统架构图如图3-2所示。图3-2系统架构图(1)感知层感知层主要由传感器和触发器构成,负责收集现场数据和执行控制命令。(2)网络层网络层负责网络连接及设备间的数据传输与通信。(3)展示层展示层主要采用了Vue.js框架,这是一个用于构建用户界面的JavaScript框架,使得用户能够更加直观地操作系统。(4)业务层业务层包含了各种管理模块,如设备管理、日志管理、用户管理等,这些模块负责共同处理系统的业务逻辑。(5)数据层数据层,Mybatis提供了数据访问服务,它可以定制SQL、映射关系以及存储过程,是的数据库更加灵活高效。(6)持久层在持久层,运用了MySQL数据库,用于存储系统的结构化数据。而Redis则提供了一种非关系型的数据存储方式,以及作为系统的缓存服务。(7)运行环境运行环境本系统基于java8的环境运行。其中设备管理作为本系统的核心功能之一,起到了对设备的管理、监控、预警等功能。首先利用物联网技术采集到设备的运行状态、收集到的信息参数,对这些数据进行处理,设置阈值从而集市发现异常情况。根据预警信息,用户便能及时维护设备。物联网产业由应用、云端、网络、边缘、终端五个部分组成。应用为AIoT产业应用行业。云端指物联网相关的云化能力平台,主要由云端物联网平台承载相关云服务包括连接、管理、数据、AI、安全、区块链等等。网络则是连接网络及相关产品和服务。边缘泛指中心节点之外的位置。边缘计算指的是将计算及相关能力从中心处理节点下放至边缘节点后形成的,靠近终端的计算能力。终端则是物联网终端,包括底层的芯片、模组、存储设备、感知设备、AI芯片、操作系统等。物联网的技术架构图如图3-2所示。图3-2技术架构图本系统的设备接入分为感知层和接入层两个部分,在感知层包括Modbus设备和直连设备,负责数据采集。通过MQTT协议传输到接入层的云网关。而网关支持TCP、HTTP等多种协议,将数据转发给用户。基于物联网的设备运维系统的设备接入图如图3-4。图3-4设备接入图3.2.2系统功能模块划分本系统主要分为设备管理和系统管理两个模块,其中设备管理中包含设备管理、设备分组、设备告警三个子模块,可以对设备进行管理和监测;而系统管理模块包括了用户管理、日志管理和公告通知管理三个子模块。系统的功能模块图如图3-5所示。图3-5系统功能模块图3.2.3数据库设计本系统采用的是MySQL数据库和InfluxDB数据库。当接受到物联设备采集的信息,如温度、压力、震感等,这些原始数据通常包含异常值、冗余信息等。这些信息首先会储存在时序数据库InfluxDB中,能够高效地存储和查询大量、高频率的数据。在被长期保存之前,需要对数据进行清洗,以消去异常值和重复数据。经过了数据清洗,最后在MySQL进行长期储存。主要储存的信息有用户信息、设备信息、日志信息、通知公告信息等。首先,通过E-R图表示出实体及其之间的关系,为数据库设计提供了基础。根据本系统的数据模型和数据库设计原则,确定了基本的数据库结构,包括数据表、字段列表等。对于时序数据,由于其具有时间戳唯一性、数据连续性、数据量大、高频率更新等特点,对其进行查询优化,将其储存在InfluxDB数据库中。在设计数据库表时,选择了合适的字段,并考虑了表的灵活性,以便用户可以更便捷高效地进行查询。本系统的E-R图如图3-6所示。图3-6系统E-R图在数据库设计中,每一张表都分配了一个主键,它是确保数据库设计的完整性和提高数据库的查询效率的关键因素。结合以上提供的E-R图,从而设计出了如下数据库表。(1)用户信息表表3-1用户信息表sys_user字段名称数据类型长度是否为空字段含义user_idbigint20否用户IDdept_idbigint20是部门IDuser_namevarchar30否用户账号nick_namevarchar30否用户昵称user_typevarchar2是用户类别表3-1(续)用户信息表sys_useremailvarchar50是用户邮箱phonenumbervarchar11是用户电话sexchar1是用户性别avatarvarchar100是头像地址passwordvarchar100是密码create_byvarchar64是创建者create_timedatetime0是创建时间update_byvarchar64是更新者update_timedatetime0是更新时间(2)设备信息表表3-2设备信息表iot_device字段名称数据类型长度是否为空字段含义device_idbigint20否设备IDdevice_namevarchar64否设备名称product_idbigint20否产品IDproduct_namevarchar64否产品名称user_idbigint20否用户IDuser_namevarchar30否用户昵称serial_numbervarchar64否设备编号statustinyint1否设备状态network_addressvarchar255是设备所在地址network_ipvarchar32是设备入网IPcreate_byvarchar64是创建者create_timedatetime0是创建时间update_byvarchar64是更新者update_timedatetime0是更新时间设备告警表表3-3设备告警表iot_alert字段名称数据类型长度是否为空字段含义alert_idbigint20否告警IDalert_namevarchar64否告警名称alert_leveltinyint11否告警级别product_idbigint20否产品IDproduct_namevarchar64否产品名称statustinyint1是告警状态create_byvarchar64是创建者create_timedatetime0是创建时间update_byvarchar64是更新者表3-3(续)设备告警表iot_alertupdate_timedatetime0是更新时间产品信息表表3-4产品信息表iot_product字段名称数据类型长度是否为空字段含义product_idbigint20否产品IDproduct_namevarchar64否产品名称device_typetinyint1是设备类型statustinyint1是状态category_idbigint20否产品分类IDcategory_namevarchar64否产品分类名称create_byvarchar64是创建者create_timedatetime0是创建时间update_byvarchar64是更新者update_timedatetime0是更新时间通知公告表表3-5通知公告表sys_notice字段名称数据类型长度是否为空字段含义notice_idint4否公告IDnotice_titlevarchar50否公告名称notice_typechar1否公告类型notice_contentlongblob0是公告内容statuschar1是公告状态create_byvarchar64是创建者create_timedatetime0是创建时间update_byvarchar64是更新者update_timedatetime0是更新时间设备告警日志表表3-6设备告警日志表iot_alert_log字段名称数据类型长度是否为空字段含义alert_log_idbigint20否告警IDalert_namevarchar64否告警名称alert_leveltinyint11否告警级别statustinyint11否处理状态device_idbigint20是设备IDtenant_idbigint20否租户IDtenant_namevarchar30否租户名称device_namevarchar64是设备名称表3-5(续)设备告警日志表iot_alert_logcreate_byvarchar64是创建者create_timedatetime0是创建时间update_byvarchar64是更新者update_timedatetime0是更新时间3.3系统模块设计3.3.1设备管理模块设计本小节主要论述设备管理模块的设计。本模块主要功能有对设备及其分组的管理、对设备的监测、对设备的告警等功能。该模块的实现首先是由DeviceController和ProductController接受前端的请求,然后调用Service层的相关处理方法。DeviceServiceImpl和ProductServiceImpl是接口的是具体实现类,负责了相关功能的逻辑实现。DeviceServiceImpl负责设备的管理功能,ProductServiceImpl负责产品的管理功能。首先对需要物联监测的设备进行物模型的定义,在ThingsModelController中编写了相应接口接受前端的请求,然后调用ThingsModelService来实现对物模型的相关处理。比如需要监测设备的温度属性,需要监测设备的温度变化,便调用接口实现对温度属性的定义。其次是对设备的监测,首先定义了物模型和设备对象,物模型能够清晰的描述设备的功能和特性,包括了可以执行的操作、可以提供的数据等。通过物模型,不同的设备能力都可以进行统一的管理,这有利于设备之间的相互交互,为设备运维管理和控制提供便利。然后利用传感器实时采集数据,如温度、湿度、压力等,接着对采集到的数据从其他工业协议统一转化为modbus协议储存在数据库中。根据定义的物模型,如温度、震感、湿度等,用户可以设定这些监测指标的预警阈值,将处理好的数据与阈值进行对比,并设计多级预警,如警告、严重警告等。当监测指标达到阈值以上,便会触发预警机制,然后生成预警信息,包括设备信息、预警信息、预警时间等。根据预警信息和设备状态,用户可以采取相应的处理办法。当数值恢复到阈值以下,系统便会发出告警恢复的信息,包括设备信息、恢复信息、恢复时间等。设备管理流程图如图3-7所示。图3-7设备管理流程图3.4本章小结本章对系统的需求进行了分析,然后对系统的架构及模块功能进行了详细的设计,为系统的开发提供了保障。第4章系统实现与测试4.1开发环境基于物联网的设备运维系统的开发环境包括开发语言、数据库等。表4-1系统开发环境工具名称版本操作系统Windows11开发语言C++17JavaJDK1.8开发集成环境idea2022.2.1关系型数据库Mysql8.0.12时序数据库InfluxDB2.04.2系统实现4.3.1设备数据采集的实现设备数据采集实现了对设备监测数据的采集与存储。首先利用传感器读取需要监测的数据,将读取到的原始数据转换为MQTT协议可以发送的格式,然后将转化后的数据发送至MQTTBroker,接收到消息后储存到InfluxDB。MqttService部分核心代码如表4-2所示,此段代码实现了对设备信息的上报。表4-2MqttService类部分代码表privatevoidreportDevice(LongproductId,StringdeviceNum,Stringmessage){try{//设备实体DevicedeviceEntity=deviceService.selectDeviceBySerialNumber(deviceNum);//上报设备信息Devicedevice=JSON.parseObject(message,Device.class);device.setProductId(productId);device.setSerialNumber(deviceNum);deviceService.reportDevice(device,deviceEntity);//发布设备状态publishStatus(productId,deviceNum,3,deviceEntity.getIsShadow(),device.getRssi());}catch(Exceptione){logger.error("接收设备信息,解析数据时异常message={}",e.getMessage());}}/***上报属性**@parammessage*/privatevoidreportProperty(LongproductId,StringdeviceNum,Stringmessage,booleanisShadow){try{List<ThingsModelValueRemarkItem>thingsModelValueRemarkItems=JSON.parseArray(message,ThingsModelValueRemarkItem.class);ThingsModelValuesInputinput=newThingsModelValuesInput();input.setProductId(productId);input.setDeviceNumber(deviceNum);input.setThingsModelValueRemarkItem(thingsModelValueRemarkItems);deviceService.reportDeviceThingsModelValue(input,1,isShadow);}catch(Exceptione){logger.error("接收属性数据,解析数据时异常message={}",e.getMessage());}}/***上报功能**@parammessage*/privatevoidreportFunction(LongproductId,StringdeviceNum,Stringmessage,booleanisShadow){try{List<ThingsModelValueRemarkItem>thingsModelValueRemarkItems=JSON.parseArray(message,ThingsModelValueRemarkItem.class);ThingsModelValuesInputinput=newThingsModelValuesInput();input.setProductId(productId);input.setDeviceNumber(deviceNum);input.setThingsModelValueRemarkItem(thingsModelValueRemarkItems);deviceService.reportDeviceThingsModelValue(input,2,isShadow);}catch(Exceptione){logger.error("接收功能,解析数据时异常message={}",e.getMessage());}}/***上报事件**@parammessage*/privatevoidreportEvent(LongproductId,StringdeviceNum,Stringmessage){try{List<ThingsModelValueRemarkItem>thingsModelValueRemarkItems=JSON.parseArray(message,ThingsModelValueRemarkItem.class);Devicedevice=deviceService.selectDeviceBySerialNumber(deviceNum);for(inti=0;i<thingsModelValueRemarkItems.size();i++){//添加到设备日志DeviceLogdeviceLog=newDeviceLog();deviceLog.setDeviceId(device.getDeviceId());deviceLog.setDeviceName(device.getDeviceName());deviceLog.setLogValue(thingsModelValueRemarkItems.get(i).getValue());deviceLog.setRemark(thingsModelValueRemarkItems.get(i).getRemark());deviceLog.setSerialNumber(device.getSerialNumber());deviceLog.setIdentity(thingsModelValueRemarkItems.get(i).getId());deviceLog.setLogType(3);deviceLog.setIsMonitor(0);deviceLog.setUserId(device.getUserId());deviceLog.setUserName(device.getUserName());deviceLog.setTenantId(device.getTenantId());deviceLog.setTenantName(device.getTenantName());deviceLog.setCreateTime(DateUtils.getNowDate());//1=影子模式,2=在线模式,3=其他deviceLog.setMode(2);logService.saveDeviceLog(deviceLog);}}catch(Exceptione){logger.error("接收事件,解析数据时异常message={}",e.getMessage());}}4.2.2设备管理模块的实现设备管理子模块负责设备的搜索、添加、删除和修改等功能的实现。DeviceController中定义了设备相关的接口,然后将请求的参数传到DeviceServiceImpl中进行进一步的处理。DeviceController的部分核心代码如表4-3所示,此段代码实现了对设备的新增、修改和删除功能。通过调用IDeviceServiceImpl中的方法,对设备进行各种操作,然后通过AjaxResult返回给前端。表4-3DeviceController类部分代码表publicclassDeviceControllerextendsBaseController{@AutowiredprivateIDeviceServicedeviceService;/***新增设备*/@PreAuthorize("@ss.hasPermi('iot:device:add')")@Log(title="添加设备",businessType=BusinessType.INSERT)@PostMapping@ApiOperation("添加设备")publicAjaxResultadd(@RequestBodyDevicedevice){returnAjaxResult.success(deviceService.insertDevice(device));}/***修改设备*/@PreAuthorize("@ss.hasPermi('iot:device:edit')")@Log(title="修改设备",businessType=BusinessType.UPDATE)@PutMapping@ApiOperation("修改设备")publicAjaxResultedit(@RequestBodyDevicedevice){returndeviceService.updateDevice(device);}/***删除设备*/@PreAuthorize("@ss.hasPermi('iot:device:remove')")@Log(title="删除设备",businessType=BusinessType.DELETE)@DeleteMapping("/{deviceIds}")@ApiOperation("批量删除设备")publicAjaxResultremove(@PathVariableLong[]deviceIds)throwsSchedulerException{returntoAjax(deviceService.deleteDeviceByDeviceId(deviceIds[0]));}/***生成设备编号*/@PreAuthorize("@ss.hasPermi('iot:device:edit')")@GetMapping("/generator")@ApiOperation("生成设备编号")publicAjaxResultgeneratorDeviceNum(){returnAjaxResult.success("操作成功",deviceService.generationDeviceNum());}}设备管理模块功能图如图4-1所示,用户可以添加设备、删除设备,查看设备的情况并可以对设备信息进行修改,例如名称、编号、产品等,还能获取其地址并在地图上显示。图4-1设备管理模块功能图4.3.3设备分组模块的实现设备分组子模块实现了对设备分组的新增、修改和删除,以及对设备的关联。本模块在GroupController中定义了设备分组的相关接口,然后在GroupServiceImpl中进行逻辑处理。设备分组的部分核心代码如表4-4所示,该段代码实现了对设备分组的新增、修改和删除,以及对设备的关联操作。其中对设备进行关联,通过设备分组对象DeviceGroupInput作为数据容器,传递分组ID以及设备ID以进行关联。表4-4GroupController类部分代码表publicclassGroupControllerextendsBaseController{@AutowiredprivateIGroupServicegroupService;/***获取设备分组详细信息*/@PreAuthorize("@ss.hasPermi('iot:group:query')")@GetMapping(value="/{groupId}")@ApiOperation("获取分组详情")publicAjaxResultgetInfo(@PathVariable("groupId")LonggroupId){returnAjaxResult.success(groupService.selectGroupByGroupId(groupId));}/***获取设备分组详细信息*/@PreAuthorize("@ss.hasPermi('iot:group:query')")@GetMapping(value="/{groupId}")@ApiOperation("获取分组详情")publicAjaxResultgetInfo(@PathVariable("groupId")LonggroupId){returnAjaxResult.success(groupService.selectGroupByGroupId(groupId));}/***获取分组下的所有关联设备ID数组*/@PreAuthorize("@ss.hasPermi('iot:group:query')")@GetMapping(value="/getDeviceIds/{groupId}")@ApiOperation("获取分组下的所有关联设备ID数组")publicAjaxResultgetDeviceIds(@PathVariable("groupId")LonggroupId){returnAjaxResult.success(groupService.selectDeviceIdsByGroupId(groupId));}/***更新分组下的关联设备*@paraminput*@return*/@PreAuthorize("@ss.hasPermi('iot:group:edit')")@Log(title="设备分组",businessType=BusinessType.UPDATE)@PutMapping("/updateDeviceGroups")@ApiOperation("更新分组下的关联设备")publicAjaxResultupdateDeviceGroups(@RequestBodyDeviceGroupInputinput){returntoAjax(groupService.updateDeviceGroups(input));}设备分组模块功能图如图4-2所示,用户可以对分组进行新增、修改、删除和查看,查看本分组下有哪些设备,还可以在产品分类下选择已有的设备添加。图4-2设备分组模块功能图4.3.4产品管理模块的实现产品管理子模块实现了对产品的查询、查看、新增以及删除,以及跳转查看此产品下的设备。本模块在ProductController中定义了产品管理的相关接口,然后在ProductServiceImpl中进行逻辑处理。ProductController的部分核心代码如表4-5所示,其实现了对产品信息的查询、查看、新增以及删除等功能。表4-5ProductController类部分代码表publicclassProductControllerextendsBaseController{@AutowiredprivateIProductServiceproductService;/***查询产品列表*/@GetMapping("/list")@ApiOperation("产品分页列表")publicTableDataInfolist(Productproduct){startPage();returngetDataTable(productService.selectProductList(product));}/***获取产品详细信息*/@PreAuthorize("@ss.hasPermi('iot:product:query')")@GetMapping(value="/{productId}")@ApiOperation("获取产品详情")publicAjaxResultgetInfo(@PathVariable("productId")LongproductId){returnAjaxResult.success(productService.selectProductByProductId(productId));}/***新增产品*/@PreAuthorize("@ss.hasPermi('iot:product:add')")@Log(title="产品",businessType=BusinessType.INSERT)@PostMapping@ApiOperation("添加产品")publicAjaxResultadd(@RequestBodyProductproduct){returnAjaxResult.success(productService.insertProduct(product));}/***修改产品*/@PreAuthorize("@ss.hasPermi('iot:product:edit')")@Log(title="产品",businessType=BusinessType.UPDATE)@PutMapping@ApiOperation("修改产品")publicAjaxResultedit(@RequestBodyProductproduct){returntoAjax(productService.updateProduct(product));}/***发布产品*/@PreAuthorize("@ss.hasPermi('iot:product:edit')")@Log(title="更新产品状态",businessType=BusinessType.UPDATE)@PutMapping("/status")@ApiOperation("更新产品状态")publicAjaxResultchangeProductStatus(@RequestBodyChangeProductStatusModelmodel){returnproductService.changeProductStatus(model);}/***删除产品*/@PreAuthorize("@ss.hasPermi('iot:product:remove')")@Log(title="产品",businessType=BusinessType.DELETE)@DeleteMapping("/{productIds}")@ApiOperation("批量删除产品")publicAjaxResultremove(@PathVariableLong[]productIds){returnproductService.deleteProductByProductIds(productIds);}}产品管理模块功能图如图4-3所示,用户可以产品进行新增、修改、删除和查看,并可以查看本产品下有哪些设备。图4-3产品管理模块功能图4.3.5产品分类模块的实现产品分类子模块实现了对产品分类的查询、查看、新增、修改和删除,及其显示顺序。本模块在CategoryController中定义了产品分类的相关接口,然后在CategoryServiceImpl中进行逻辑处理。如表4-6为设备分组的部分核心代码,该段代码实现了对设备分组的查询、查看、新增、修改和删除功能。表4-6CategoryController类部分代码表publicclassCategoryControllerextendsBaseController{@AutowiredprivateICategoryServicecategoryService;/***获取产品分类详细信息*/@ApiOperation("获取分类详情")@PreAuthorize("@ss.hasPermi('iot:category:query')")@GetMapping(value="/{categoryId}")publicAjaxResultgetInfo(@PathVariable("categoryId")LongcategoryId){returnAjaxResult.success(categoryService.selectCategoryByCategoryId(categoryId));}/***新增产品分类*/@PreAuthorize("@ss.hasPermi('iot:category:add')")@Log(title="产品分类",businessType=BusinessType.INSERT)@PostMapping@ApiOperation("添加分类")publicAjaxResultadd(@RequestBodyCategorycategory){returntoAjax(categoryService.insertCategory(category));}/***修改产品分类*/@PreAuthorize("@ss.hasPermi('iot:category:edit')")@Log(title="产品分类",businessType=BusinessType.UPDATE)@PutMapping@ApiOperation("修改分类")publicAjaxResultedit(@RequestBodyCategorycategory){returntoAjax(categoryService.updateCategory(category));}/***删除产品分类*/@PreAuthorize("@ss.hasPermi('iot:category:remove')")@Log(title="产品分类",businessType=BusinessType.DELETE)@DeleteMapping("/{categoryIds}")@ApiOperation("批量删除分类")publicAjaxResultremove(@PathVariableLong[]categoryIds){returncategoryService.deleteCategoryByCategoryIds(categoryIds);}}产品分组模块功能图如图4-4所示,用户可以对产品分类进行新增、修改、删除和查看。图4-4产品分组模块功能图4.3.6设备告警模块的实现设备告警子模块实现了对设备告警信息的获取,以及对告警信息的查询、查看、删除。本模块在AlertController中定义了部门管理的相关接口,然后在SysAleServiceImpl中进行逻辑处理。AlertController的部分核心代码如表4-7所示,其实现了对告警信息的查询、查看、删除等功能,其中获取设备告警信息,是按照设备的ID在数据库中进行查询后获取到。表4-7AlertController类部分代码表publicclassAlertControllerextendsBaseController{@AutowiredprivateIAlertServicealertService;/***获取设备告警详细信息*/@PreAuthorize("@ss.hasPermi('iot:alert:query')")@GetMapping(value="/{alertId}")publicAjaxResultgetInfo(@PathVariable("alertId")LongalertId){returnAjaxResult.success(alertService.selectAlertByAlertId(alertId));}/***新增设备告警*/@PreAuthorize("@ss.hasPermi('iot:alert:add')")@Log(title="设备告警",businessType=BusinessType.INSERT)@PostMappingpublicAjaxResultadd(@RequestBodyAlertalert){returntoAjax(alertService.insertAlert(alert));}/***删除设备告警*/@PreAuthorize("@ss.hasPermi('iot:alert:remove')")@Log(title="设备告警",businessType=BusinessType.DELETE)@DeleteMapping("/{alertIds}")publicAjaxResultremove(@PathVariableLong[]alertIds){returntoAjax(alertService.deleteAlertByAlertIds(alertIds));}}设备告警模块功能图如图4-5所示,用户可以告警信息进行查看、查找,并对告警信息进行处理。图4-5设备告警模块功能图4.3.7用户管理模块的实现用户管理子模块实现了对用户信息的查询、查看、新增、修改和删除,以及对用户信息的导出及导入,另外管理员还能对用户进行授权管理。本模块在SysUserController中定义了部门管理的相关接口,然后在SysUserServiceImpl中进行逻辑处理。SysUserController的部分核心代码如表4-8所示,其实现了根据用户编号对用户信息的查询、查看、新增、修改和删除等功能。表4-8SysUsertController类部分代码表publicclassSysUserControllerextendsBaseController{@AutowiredprivateISysUserServiceuserService;@AutowiredprivateISysRoleServiceroleService;@AutowiredprivateISysPostServicepostService;/***根据用户编号获取详细信息*/@PreAuthorize("@ss.hasPermi('system:user:query')")@GetMapping(value={"/","/{userId}"})publicAjaxResultgetInfo(@PathVariable(value="userId",required=false)LonguserId){userService.checkUserDataScope(userId);AjaxResultajax=AjaxResult.success();List<SysRole>roles=roleService.selectRoleAll();ajax.put("roles",SysUser.isAdmin(userId)?roles:roles.stream().filter(r->!r.isAdmin()).collect(Collectors.toList()));ajax.put("posts",postService.selectPostAll());if(StringUtils.isNotNull(userId)){ajax.put(AjaxResult.DATA_TAG,userService.selectUserById(userId));ajax.put("postIds",postService.selectPostListByUserId(userId));ajax.put("roleIds",roleService.selectRoleListByUserId(userId));}returnajax;}/***新增用户*/@PreAuthorize("@ss.hasPermi('system:user:add')")@Log(title="用户管理",businessType=BusinessType.INSERT)@PostMappingpublicAjaxResultadd(@Validated@RequestBodySysUseruser){if(UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user.getUserName()))){returnAjaxResult.error("新增用户'"+user.getUserName()+"'失败,登录账号已存在");}elseif(StringUtils.isNotEmpty(user.getPhonenumber())&&UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))){returnAjaxResult.error("新增用户'"+user.getUserName()+"'失败,手机号码已存在");}elseif(StringUtils.isNotEmpty(user.getEmail())&&UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))){returnAjaxResult.error("新增用户'"+user.getUserName()+"'失败,邮箱账号已存在");}user.setCreateBy(getUsername());user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));returntoAjax(userService.insertUser(user));}/***修改用户*/@PreAuthorize("@ss.hasPermi('system:user:edit')")@Log(title="用户管理",businessType=BusinessType.UPDATE)@PutMappingpublicAjaxResultedit(@Validated@RequestBodySysUseruser){userService.checkUserAllowed(user);if(StringUtils.isNotEmpty(user.getPhonenumber())&&UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user))){returnAjaxResult.error("修改用户'"+user.getUserName()+"'失败,手机号码已存在");}elseif(StringUtils.isNotEmpty(user.getEmail())&&UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user))){returnAjaxResult.error("修改用户'"+user.getUserName()+"'失败,邮箱账号已存在");}user.setUpdateBy(getUsername());returntoAjax(userService.updateUser(user));}/***删除用户*/@PreAuthorize("@ss.hasPermi('system:user:remove')")@Log(title="用户管理",businessType=BusinessType.DELETE)@DeleteMapping("/{userIds}")publicAjaxResultremove(@PathVariableLong[]userIds){if(ArrayUtils.contains(userIds,getUserId())){returnerror("当前用户不能删除");}returntoAjax(userService.deleteUserByIds(userIds));}/***重置密码*/@PreAuthorize("@ss.hasPermi('system:user:resetPwd')")@Log(title="用户管理",businessType=BusinessType.UPDATE)@PutMapping("/resetPwd")publicAjaxResultresetPwd(@RequestBodySysUseruser){userService.checkUserAllowed(user);user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));user.setUpdateBy(getUsername());returntoAjax(userService.resetPwd(user));}用户管理模块功能图如图4-6所示,管理员可以对用户进行管理,还可以停用用户,并且可以对用户信息进行导出,以及导入用户信息。图4-6用户管理模块功能图4.3.8部门管理模块的实现部门管理子模块实现了对部门的查询、查看、删除,本模块在SysDeptController中定义了部门管理的相关接口,然后在SysDeptServiceImpl中进行逻辑处理。SysDeptController的部分核心代码如表4-9所示,其实现了根据部门的编号对部门信息的查询、查看以及删除等功能。表4-9SysDeptController类部分代码表publicclassSysDeptControllerextendsBaseController{@AutowiredprivateISysDeptServicedeptService;/***获取部门列表*/@PreAuthorize("@ss.hasPermi('system:dept:list')")@GetMapping("/list")publicAjaxResultlist(SysDeptdept){List<SysDept>depts=deptService.selectDeptList(dept);returnAjaxResult.success(depts);}/***新增部门*/@PreAuthorize("@ss.hasPermi('system:dept:add')")@Log(title="部门管理",businessType=BusinessType.INSERT)@PostMappingpublicAjaxResultadd(@Validated@RequestBodySysDeptdept){if(UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))){returnAjaxResult.error("新增部门'"+dept.getDeptName()+"'失败,部门名称已存在");}dept.setCreateBy(getUsername());returntoAjax(deptService.insertDept(dept));}/***修改部门*/@PreAuthorize("@ss.hasPermi('system:dept:edit')")@Log(title="部门管理",businessType=BusinessType.UPDATE)@PutMappingpublicAjaxResultedit(@Validated@RequestBodySysDeptdept){if(UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept))){returnAjaxResult.error("修改部门'"+dept.getDeptName()+"'失败,部门名称已存在");}elseif(dept.getParentId().equals(dept.getDeptId())){returnAjaxResult.error("修改部门'"+dept.getDeptName()+"'失败,上级部门不能是自己");}elseif(StringUtils.equals(UserConstants.DEPT_DISABLE,dept.getStatus())&&deptService.selectNormalChildrenDeptById(dept.getDeptId())>0){returnAjaxResult.error("该部门包含未停用的子部门!");}dept.setUpdateBy(getUsername());returntoAjax(deptService.updateDept(dept));}/***删除部门*/@PreAuthorize("@ss.hasPermi('system:dept:remove')")@Log(title="部门管理",businessType=BusinessType.DELETE)@Del

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论