Vue.js+SpringBoot开发森林火灾预警系统

在这里插入图片描述


目录

  • 一、摘要
    • 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的森林火灾预警系统,包含园区数据模块、温度传感器模块、烟雾传感器模块、园区监控模块、园区报警历史模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,森林火灾预警系统基于角色的访问控制,给园区管理员、普通用户使用。

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 {@Autowiredprivate StompChannelInterceptor myChannelInterceptor;@Overridepublic void registerStompEndpoints(StompEndpointRegistry registry) {// 1.定义客户端连接地址/stomp-ws// 2.使用sockJS,stomp协议// 3.配置跨域registry.addEndpoint("/stomp-ws").setAllowedOriginPatterns("*").withSockJS();}@Overridepublic void configureMessageBroker(MessageBrokerRegistry registry) {// 1.设置服务端推送数据的主题节点registry.enableSimpleBroker("/topic", "/queue");// 2.设置客户端向服务端推送消息的前缀
//        registry.setApplicationDestinationPrefixes("app");}@Overridepublic void configureClientInboundChannel(ChannelRegistration registration) {// 注册拦截器中间件registration.interceptors(myChannelInterceptor);}
}

六、免责说明

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

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

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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 之二:CentOS7 的 IP 常用命令和配置及 xshell 基本使用方法

1. 进入虚拟机 点击右键---进入终端--输入 ip adrr 或 ifconfig 查看ip地址 下面输入命令 ifconfig&#xff08;注意&#xff1a;不是 ipconfig &#xff09; 或 ip addr 来查看当前系统 IP 查看到IP 后&#xff0c;比如&#xff1a;上面是 192.168.184.137 1.1 IP 常用命令…

【python】对角线遍历

python系列文章目录 【python】基于cv2提取图片上的文本内容 【python】简单作图 【python】数组字符串等实用 【python】sort与sorted排序使用 【python】对角线遍历 python系列文章目录说明1.分析2.注意事项2.1 遍历2.2 区间2.3 顺序 3.代码实现 说明 给你一个大小为 m x n…

Linux——网络基础

计算机网络背景 网络发展 独立模式: 计算机之间相互独立 在早期的时候&#xff0c;计算机之间是相互独立的&#xff0c;此时如果多个计算机要协同完成某种业务&#xff0c;那么就只能等一台计算机处理完后再将数据传递给下一台计算机&#xff0c;然后下一台计算机再进行相应…

Docker数据卷篇

1. 数据卷&#xff08;容器数据管理&#xff09; 引言&#xff1a;在之前的nginx案例中&#xff0c;修改nginx的html页面时&#xff0c;需要进入nginx内部。并且因为没有编辑器&#xff0c;修改文件也很麻烦。 这就是因为容器与数据&#xff08;容器内文件&#xff09;耦合带…

UDP通信发送和接收 || UDP实现全双工通信

recvfrom ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); 功能: 从套接字中接收数据 参数: sockfd:套接字文件描述符 buf:存放数据空间首地址 …

6.5 共享数据

本节介绍Android的四大组件之一ContentProvider的基本概念和常见用法&#xff1a;首先说明如何使用内容提供器封装内部数据的外部访问接口&#xff0c;然后阐述如何使用内容解析器通过外部接口操作内部数据&#xff0c;最后叙述如何利用内容解析器读写联系人信息&#xff0c;以…

从0开始学习NEON(1)

1、前言 在上个博客中对NEON有了基础的了解&#xff0c;本文将针对一个图像下采样的例子对NEON进行学习。 学习链接:CPU优化技术 - NEON 开发进阶 上文链接:https://blog.csdn.net/weixin_42108183/article/details/136412104 2、第一个例子 现在有一张图片&#xff0c;需…

LeetCode 2673. 使二叉树所有路径值相等的最小代价【贪心】1917

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

Java项目:39 springboot008房屋租赁系统

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 房屋租赁系统的设计基于现有的网络平台&#xff0c;主要有管理员、房东、用户三个角色 管理员可以在线查看系统已有的人中心、房屋类型管理、房屋信息…

GDB调试入门笔记

文章目录 What&#xff1f;WhyHow安装GDB安装命令查看是否安装成功调试简单的程序预备一个程序调试 使用breakinfolistnextprintstep一些小技巧在gdb前shell日志功能watch point| catch point 调试core调试一个运行的程序 What&#xff1f; GDB是什么&#xff1f; 全称GNU sym…

决策树实验分析(分类和回归任务,剪枝,数据对决策树影响)

目录 1. 前言 2. 实验分析 2.1 导入包 2.2 决策树模型构建及树模型的可视化展示 2.3 概率估计 2.4 绘制决策边界 2.5 决策树的正则化&#xff08;剪枝&#xff09; 2.6 对数据敏感 2.7 回归任务 2.8 对比树的深度对结果的影响 2.9 剪枝 1. 前言 本文主要分析了决策树的分类和回…

第十三届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组 统计子矩阵

#include<iostream> #include<algorithm> #include<cstring> #include<string> #include<vector> #include<queue>using namespace std;int cnt,temp; int n,m,K; int a[505][505]; int pre[505][505];//二维前缀和void sol() {cin>>…

回溯算法01-组合(Java)

1.组合 题目描述 给定两个整数 n 和 k&#xff0c;返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;n 4, k 2 输出&#xff1a; [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4]]示例 2&#xff1a; 输入&#x…

智慧城市中的公共服务创新:让城市生活更便捷

目录 一、引言 二、智慧城市公共服务创新的实践 1、智慧交通系统 2、智慧医疗服务 3、智慧教育系统 4、智慧能源管理 三、智慧城市公共服务创新的挑战 四、智慧城市公共服务创新的前景 五、结论 一、引言 随着信息技术的迅猛发展&#xff0c;智慧城市已成为现代城市发…

Python光速入门 - Flask轻量级框架

FlASK是一个轻量级的WSGI Web应用程序框架&#xff0c;Flask的核心包括Werkzeug工具箱和Jinja2模板引擎&#xff0c;它没有默认使用的数据库或窗体验证工具&#xff0c;这意味着用户可以根据自己的需求选择不同的数据库和验证工具。Flask的设计理念是保持核心简单&#xff0c…

【C语言】还有柔性数组?

前言 也许你从来没有听说过柔性数组&#xff08;flexible array&#xff09;这个概念&#xff0c;但是它确实是存在的。C99中&#xff0c;结构中的最后⼀个元素允许是未知⼤⼩的数组&#xff0c;这就叫做『柔性数组』成员。 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xf…

Java基于微信小程序的旅游出行必备小程序,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

RabbitMQ如何保证消息不丢

如何保证Queue消息能不丢呢&#xff1f; RabbitMQ在接收到消息后&#xff0c;默认并不会立即进行持久化&#xff0c;而是先把消息暂存在内存中&#xff0c;这时候如果MQ挂了&#xff0c;那么消息就会丢失。所以需要通过持久化机制来保证消息可以被持久化下来。 队列和交换机的…

【论文阅读】Usenix Security 2023 你看不见我:对基于激光雷达的自动驾驶汽车驾驶框架的物理移除攻击

文章目录 一.论文信息二.论文内容1.摘要2.引言3.作者贡献4.主要图表5.结论 一.论文信息 论文题目&#xff1a; You Can’t See Me: Physical Removal Attacks on LiDAR-based Autonomous Vehicles Driving Frameworks&#xff08;你看不见我:对基于激光雷达的自动驾驶汽车驾驶…

如何搭建Nacos集群

1.搭建Nacos集群 众所周知&#xff0c;在实际的工作中&#xff0c;Nacos的生成环境下一定要部署为集群状态 其中包含3个nacos节点&#xff0c;然后一个负载均衡器代理3个Nacos。这里负载均衡器可以使用nginx。 我们计划的集群结构&#xff1a; 我就直接在本机上开三个Nacos来搭…