基于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,博主录制了本项目配套的《项目手把手启动教程》,希望能给同学们带来帮助。
本文设计的森林火灾预警系统的包括了系统数据中心模块,用来存放管理系统通用的模块,另外分别设计了系统基础、烟雾传感器、温度传感器、历史记录、园区数据这五大模块,用于存放系统的核心业务逻辑。
数据中心模块包含了对产森林火灾预警系统的基础模块,比如管理谁可以登录这套系统,记录这些人登录系统做了什么,不同的人拥有不同权限的管理。
系统基础模块是对园区信息进行管理,其中包括用户管理,部门管理,云盘,角色支持,菜单支持,日志管理,数据字典,前端表格等,可以通过此模块对园区进行添加、编辑更新、删除、查询操作。
烟雾传感器模块是对导致森林火灾发生的重要因素——烟雾浓度进行记录,设置了烟雾浓度的阈值,达到这个阈值就会引起报警。烟雾浓度数据的精准捕捉将有效的对防止森林火灾起到作用,森林管理员可以对阈值进行更改,应对不同季节的森林情况。
温度传感器模块是对导致森林火灾发生的重要因素——森林温度进行记录,设置了森林温度的阈值,达到这个阈值就会引起报警。森林温度数据的精准捕捉将有效的对防止森林火灾起到作用,森林的温度越高,森林火灾发生的概率就会越大,所以应该及时关注森林温度的变化,这样才可以及时预警。
历史记录模块的设计,是为了通过对森林火灾预警次数的观测,可以看出哪片园区的森林火灾发生概率比较高,可以安排相应的人员以及物质对高危险区域进行更多的部署,将有效缓解救援人员以及物资短缺的问题,将防火的重心放在极易发生火灾的区域,如果发生了森林火灾可以及时进行相应的措施。
园区数据模块的设计,是为了整合各个园区之间的关系,将各个园区的数据统计在一个模块上,管理员可以通过园区数据模块及时的发现森林的情况,如果发生了森林火灾,或者监测到数据快达到临界值,可以达到更快的反应速度。
烟雾传感器模块是对导致森林火灾发生的重要因素——烟雾浓度进行记录,设置了烟雾浓度的阈值,达到这个阈值就会引起报警。烟雾浓度数据的精准捕捉将有效的对防止森林火灾起到作用,森林管理员可以对阈值进行更改,应对不同季节的森林情况。
温度传感器模块是对导致森林火灾发生的重要因素——森林温度进行记录,设置了森林温度的阈值,达到这个阈值就会引起报警。森林温度数据的精准捕捉将有效的对防止森林火灾起到作用,森林的温度越高,森林火灾发生的概率就会越大,所以应该及时关注森林温度的变化,这样才可以及时预警。
历史记录模块的设计,是为了通过对森林火灾预警次数的观测,可以看出哪片园区的森林火灾发生概率比较高,可以安排相应的人员以及物质对高危险区域进行更多的部署,将有效缓解救援人员以及物资短缺的问题,将防火的重心放在极易发生火灾的区域,如果发生了森林火灾可以及时进行相应的措施。
园区数据模块的设计,是为了整合各个园区之间的关系,将各个园区的数据统计在一个模块上,管理员可以通过园区数据模块及时的发现森林的情况,如果发生了森林火灾,或者监测到数据快达到临界值,可以达到更快的反应速度。
@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();
}
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);
}
}
@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);
}
}
下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!