【开源】基于SpringBoot的森林火灾预警系统的设计和实现

news2024/12/17 12:56:13

在这里插入图片描述


目录

  • 一、摘要
    • 1.1 项目介绍
    • 1.2 项目录屏
  • 二、功能模块
    • 2.1 数据中心模块
    • 2.2 系统基础模块
    • 2.3 烟雾传感器模块
    • 2.4 温度传感器模块
    • 2.5 历史记录模块
    • 2.6 园区数据模块
  • 三、系统设计
    • 3.1 用例设计
      • 3.1.1 森林园区基础系统用例设计
      • 3.1.2 森林预警数据用例设计
    • 3.2 数据库设计
      • 3.2.1 烟雾传感器
    • 3.2.2 温度传感器
      • 3.2.3 历史记录
      • 3.2.4 园区数据
  • 四、系统展示
  • 五、核心代码
    • 5.1 一键创建传感器
    • 5.2 模拟传感器数据变化
    • 5.3 WebSocket 搭建
  • 六、免责说明


一、摘要

1.1 项目介绍

基于websocket+Vue+SpringBoot+MySQL的森林火灾预警系统,包含园区数据模块、温度传感器模块、烟雾传感器模块、园区监控模块、园区报警历史模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,森林火灾预警系统基于角色的访问控制,给园区管理员、普通用户使用。

项目编号: S 019 ,源码已在 B i l i b i l i 中上架,需要的朋友请自行下载。 \color{red}{项目编号:S019,源码已在 Bilibili 中上架,需要的朋友请自行下载。} 项目编号:S019,源码已在Bilibili中上架,需要的朋友请自行下载。

https://gf.bilibili.com/item/detail/1104013029

为了帮助小白入门 Java,博主录制了本项目配套的《项目手把手启动教程》,希望能给同学们带来帮助。

1.2 项目录屏


二、功能模块

本文设计的森林火灾预警系统的包括了系统数据中心模块,用来存放管理系统通用的模块,另外分别设计了系统基础、烟雾传感器、温度传感器、历史记录、园区数据这五大模块,用于存放系统的核心业务逻辑。

2.1 数据中心模块

数据中心模块包含了对产森林火灾预警系统的基础模块,比如管理谁可以登录这套系统,记录这些人登录系统做了什么,不同的人拥有不同权限的管理。

2.2 系统基础模块

系统基础模块是对园区信息进行管理,其中包括用户管理,部门管理,云盘,角色支持,菜单支持,日志管理,数据字典,前端表格等,可以通过此模块对园区进行添加、编辑更新、删除、查询操作。

2.3 烟雾传感器模块

烟雾传感器模块是对导致森林火灾发生的重要因素——烟雾浓度进行记录,设置了烟雾浓度的阈值,达到这个阈值就会引起报警。烟雾浓度数据的精准捕捉将有效的对防止森林火灾起到作用,森林管理员可以对阈值进行更改,应对不同季节的森林情况。

2.4 温度传感器模块

温度传感器模块是对导致森林火灾发生的重要因素——森林温度进行记录,设置了森林温度的阈值,达到这个阈值就会引起报警。森林温度数据的精准捕捉将有效的对防止森林火灾起到作用,森林的温度越高,森林火灾发生的概率就会越大,所以应该及时关注森林温度的变化,这样才可以及时预警。

2.5 历史记录模块

历史记录模块的设计,是为了通过对森林火灾预警次数的观测,可以看出哪片园区的森林火灾发生概率比较高,可以安排相应的人员以及物质对高危险区域进行更多的部署,将有效缓解救援人员以及物资短缺的问题,将防火的重心放在极易发生火灾的区域,如果发生了森林火灾可以及时进行相应的措施。

2.6 园区数据模块

园区数据模块的设计,是为了整合各个园区之间的关系,将各个园区的数据统计在一个模块上,管理员可以通过园区数据模块及时的发现森林的情况,如果发生了森林火灾,或者监测到数据快达到临界值,可以达到更快的反应速度。


三、系统设计

3.1 用例设计

3.1.1 森林园区基础系统用例设计

在这里插入图片描述

3.1.2 森林预警数据用例设计

在这里插入图片描述

3.2 数据库设计

3.2.1 烟雾传感器

烟雾传感器模块是对导致森林火灾发生的重要因素——烟雾浓度进行记录,设置了烟雾浓度的阈值,达到这个阈值就会引起报警。烟雾浓度数据的精准捕捉将有效的对防止森林火灾起到作用,森林管理员可以对阈值进行更改,应对不同季节的森林情况。

在这里插入图片描述

3.2.2 温度传感器

温度传感器模块是对导致森林火灾发生的重要因素——森林温度进行记录,设置了森林温度的阈值,达到这个阈值就会引起报警。森林温度数据的精准捕捉将有效的对防止森林火灾起到作用,森林的温度越高,森林火灾发生的概率就会越大,所以应该及时关注森林温度的变化,这样才可以及时预警。

在这里插入图片描述

3.2.3 历史记录

历史记录模块的设计,是为了通过对森林火灾预警次数的观测,可以看出哪片园区的森林火灾发生概率比较高,可以安排相应的人员以及物质对高危险区域进行更多的部署,将有效缓解救援人员以及物资短缺的问题,将防火的重心放在极易发生火灾的区域,如果发生了森林火灾可以及时进行相应的措施。

在这里插入图片描述

3.2.4 园区数据

园区数据模块的设计,是为了整合各个园区之间的关系,将各个园区的数据统计在一个模块上,管理员可以通过园区数据模块及时的发现森林的情况,如果发生了森林火灾,或者监测到数据快达到临界值,可以达到更快的反应速度。

在这里插入图片描述


四、系统展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


五、核心代码

5.1 一键创建传感器

@RequestMapping(value = "/createSensor", method = RequestMethod.GET)
@ApiOperation(value = "一键创建传感器")
public Result<ForestPark> createSensor(@RequestParam String id){
    ForestPark park = iForestParkService.getById(id);
    if(park == null) {
        return ResultUtil.error("园区不存在");
    }
    // 删除原烟雾传感器
    QueryWrapper<SmokeSensor> ssOldQw = new QueryWrapper<>();
    ssOldQw.eq("park_id",park.getId());
    iSmokeSensorService.remove(ssOldQw);
    // 删除原温度传感器
    QueryWrapper<TemperatureSensor> tsOldQw = new QueryWrapper<>();
    tsOldQw.eq("park_id",park.getId());
    iTemperatureSensorService.remove(tsOldQw);
    // 创建传感器
    SmokeSensor ss = new SmokeSensor();
    ss.setParkId(park.getId());
    ss.setParkName(park.getTitle());
    ss.setValue(0);
    ss.setLastTime("");
    iSmokeSensorService.saveOrUpdate(ss);
    TemperatureSensor ts = new TemperatureSensor();
    ts.setParkId(park.getId());
    ts.setParkName(park.getTitle());
    ts.setValue(0);
    ts.setLastTime("");
    iTemperatureSensorService.saveOrUpdate(ts);
    return ResultUtil.success();
}

5.2 模拟传感器数据变化

private void changeValue1Fx() {
    List<SmokeSensor> sensorList = iSmokeSensorService.list();
    Random r = new Random();
    for (SmokeSensor ss : sensorList) {
        int tempValue = r.nextInt(100);
        ss.setValue(tempValue);
        ss.setLastTime(DateUtil.now());
        iSmokeSensorService.saveOrUpdate(ss);
        try {
            parkTask.updatePartAlertTime(ss.getParkId());
        } catch (InterruptedException e) {}
        BaseWebSocketService.sendInfo("Smoke@@" + ss.getParkId() + "@@" + tempValue);
    }
}

5.3 WebSocket 搭建

@Configuration
@EnableWebSocketMessageBroker
public class StompWebSocketConfig implements WebSocketMessageBrokerConfigurer {

    @Autowired
    private StompChannelInterceptor myChannelInterceptor;

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        // 1.定义客户端连接地址/stomp-ws
        // 2.使用sockJS,stomp协议
        // 3.配置跨域
        registry.addEndpoint("/stomp-ws").setAllowedOriginPatterns("*").withSockJS();
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        // 1.设置服务端推送数据的主题节点
        registry.enableSimpleBroker("/topic", "/queue");
        // 2.设置客户端向服务端推送消息的前缀
//        registry.setApplicationDestinationPrefixes("app");
    }

    @Override
    public void configureClientInboundChannel(ChannelRegistration registration) {
        // 注册拦截器中间件
        registration.interceptors(myChannelInterceptor);
    }
}


六、免责说明

  • 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
  • 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
  • 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。

下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!

  1. 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
  2. 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
  3. 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
  4. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1140301.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

性能测试工具——Jmeter的安装【超详细】

目录 1、性能测试工具&#xff1a;JMeter和LoadRunner对比 2、为什么学习JMeter&#xff1f; 3、JMeter环境搭建 3.1、安装JDK 3.2、下载安装JMeter 3.3、配置环境变量 2.4、启动验证JMeter是否安装成功 4、认识JMeter的目录结构 1&#xff09;bin目录&#xff1a;存放…

接口自动化测试工具,Postman使用详解

一、概念 1、Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件&#xff0c;Postman分为Postman native app和Postman Chrome app两个版本。目前Chrome app已经停止维护&#xff0c;官方也不推荐使用该版本。 2、官网下载地址&#xff1a;http://www.getpostman…

便利连锁:如何增加收益?教你一招轻松搞定!

自动售货机&#xff0c;作为零售行业的一项颠覆性技术&#xff0c;正逐渐改变着我们的购物方式和商业格局。这一创新技术不仅重新定义了零售业务模式&#xff0c;还为企业提供了更多的机会来满足不断演变的消费者需求。 客户案例 便利连锁店 成都某便利连锁店面临一系列挑战&am…

input 输入中文,高频触发 onchange和oninput事件(CompositionEvent API解决)

问题描述&#xff1a; input onchange和oninput 事件输入中文时高频触发。 输入字母&#xff0c;数字&#xff0c;符号都没问题&#xff1a; 输入中文时问题就出来了&#xff1a; 每个拼音字母都触发了change&#xff0c;甚至输入法里的nin’hao 把拼音分开的字符也会触发。…

git clone 遇到了 early EOF index-pack failed 问题

问题 由于仓库包含了很多文件&#xff0c;仓库过大&#xff0c;导致clone的时候一直报错&#xff1a; 解决方案 注意&#xff1a;过程中需要耐心等待&#xff0c;如果遇到失败&#xff0c;可以多尝试几遍。 压缩目标仓库文件 compression 是压缩的意思&#xff0c;从 clo…

javaweb请求

1.给类加上RestController表示该类是请求处理类 2.判断类里面的hello()方法处理哪个请求&#xff0c;需在方法上加上注解RequestMapping("/hello"),表示浏览器请求localhost:8080/hello这个地址时&#xff0c;会调用此方法&#xff0c;

使用boost.mysql来操作mysql 数据库

准备条件 1. visual studio 2019 2. boost库 3. 安装本地的mysql 服务器&#xff0c;boost.mysql对mysql有版本要求最好8.0&#xff0c;具体参考官方文档 安装 使用Nuget安装boost 要安装 openssl&#xff0c;否则的话编译其他项目会产生依赖ssl的错误 安装mysql 省略 …

“数聚瑞安·创新未来”中国·瑞安第四届创新创业大赛圆满举办!

10月26日&#xff0c;“数聚瑞安 创新未来”中国瑞安第四届创新创业大赛决赛在瑞安东新科创园举行。本次大赛旨在挖掘优质的创新创业项目激活本地创新创业氛围&#xff0c;激发创新创业活力&#xff0c;数字科创赛道吸引了来自全国20多个省市自治区的50多个城市的100多家企业和…

IP地址与代理ip在网络安全中的关键作用

目录 前言 一、IP地址在网络安全中的作用 1、网络流量监视和分析 2、网络安全事件响应 3、网络安全检测和防御 二、代理IP在网络安全中的作用 1、流量过滤和清洗 2、匿名访问和保护隐私 3、实现全球化业务 三、IP地址和代理IP在网络安全中的应用案例 1、DDoS攻击 2…

U盘RAW格式无法格式化怎么办?

我们在使用U盘时候&#xff0c;有时会碰到U盘RAW格式无法格式化的情况。当U盘变为RAW格式时&#xff0c;无论是双击还右键选择打开U盘&#xff0c;Windows系统都会提示无法完成格式化。那遇到RAW格式U盘无法格式化怎么办&#xff1f; 什么是RAW格式&#xff1f; 在开始格式化之…

学编程如何提高自己的编程能力

以下是一些建议&#xff0c;帮助你提高编程能力&#xff1a; 掌握基础知识。了解编程语言的基本语法、数据类型、控制结构等基础知识&#xff0c;是提高编程能力的基础。多写代码。编程需要实践&#xff0c;多写代码才能提高编程能力。可以从简单的练习项目开始&#xff0c;逐…

SpringCloudAlibaba实战-nacos集群部署

写在前面&#xff1a;在学习阶段&#xff0c;我们想快速学习SpringCloudAlibaba功能&#xff0c;但总是花费大量时间跟着视频或博客做组件配置。由于版本的更迭&#xff0c;我们学习时的组件版本很可能和作者的不一致&#xff0c;又或者是各自环境不一&#xff0c;只能一坑又一…

C++前缀和算法的应用:统计得分小于K的子数组数目

本文涉及的基础知识点 C算法&#xff1a;前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 题目 一个数组的分数定义为数组之和 乘以 数组的长度。 比方说&#xff0c;[1, 2, 3, 4, 5] 的分数为 (1 2 3 4 5) * 5 75 。 给你一个正整数数组 nums 和一个整…

【C】关于动态内存的试题及解析

目录 第1题&#xff1a; 第2题&#xff1a; 第3题&#xff1a; 第4题&#xff1a; 第5题&#xff1a; 在学习了关于动态开辟内存的相关知识后&#xff0c;下面是一些涉及到动态开辟内存程序的试题及解析&#xff08;试题部分来自《高质量的C/C编程》、笔试题&#xff09;。 第1…

2023年【上海市安全员A证】报名考试及上海市安全员A证试题及解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 上海市安全员A证报名考试是安全生产模拟考试一点通总题库中生成的一套上海市安全员A证试题及解析&#xff0c;安全生产模拟考试一点通上上海市安全员A证作业手机同步练习。2023年【上海市安全员A证】报名考试及上海市…

智能指针(C++11)

行到水穷处&#xff0c;坐看云起时。 文章目录 简介内存泄漏内存泄漏分类内存泄漏检测工具 RAII智能指针原理智能指针使用std::auto_ptrstd::unique_ptrstd::shared_ptrstd::shared_ptr循环引用 std::weak_ptr 总结 简介 C智能指针是在C11标准引入的一项重要功能&#xff0c;用…

建模仿真软件 Comsol Multiphysics mac中文版软件介绍

COMSOL Multiphysics mac是一款全球通用的基于高级数值方法和模拟物理场问题的通用软件&#xff0c;拥有、网格划分、研究和优化、求解器、可视化和后处理、仿真 App等相关功能&#xff0c;轻松实现各个环节的流畅进行&#xff0c;它能够解释耦合或多物理现象。 附加产品扩展了…

Postman接口测试,全网最详细教程

Postman的脚本可以导出多种语言的脚本&#xff0c;方便二次维护开发。 Python的requests库&#xff0c;支持python2和python3&#xff0c;用于发送http/https请求 使用unittest进行接口自动化测试 0 1****环境准备 1、安装python &#xff08;使用python2或3都可以&#x…

Spring源码-4.Aware接口、初始化和销毁执行顺序、Scope域

Aware接口 其实在生命周期中&#xff0c;Aware接口也参与进来了&#xff0c;如图所示&#xff1a; 如初始化时的第三步&#xff0c;其实就是调用了Aware相关接口。 以常见的Aware接口举例&#xff1a; 1.BeanNameAware 主要是注入Bean的名字 2.BeanFactoryAware 主要是时注…

ESP32开发日志记录

用过一段时间的ESP8266开发&#xff0c; 是在ubunut下建立的开发环境&#xff0c;现在ESP32更简单&#xff0c;直接在Window下IDE即可完成系统配置、新建工程及编译下载工作&#xff0c;使用起来更加简便 一、生成ESP32的工程运行出错 大概意思的芯片是单核芯片&#xff0c;但…