基于SpringBoot与微信小程序的消防安全隐患上报平台设计与实现
系统概述
随着城市建筑密度增加,消防安全隐患频发,传统的人工举报方式已难以满足高效响应的需求。为此,本文提出一种融合移动互联网技术的消防隐患上报解决方案。系统采用前后端分离架构,后端基于SpringBoot构建稳定服务接口,前端依托微信小程序实现轻量化用户入口,结合MySQL进行数据持久化管理,通过MyBatis完成数据库操作映射,提升公众参与安全管理的积极性。
技术架构设计
系统整体分为三层:表现层、业务逻辑层和数据访问层。后端使用SpringBoot框架简化配置流程,集成嵌入式Tomcat服务器支持独立部署;前端利用微信小程序原生组件实现快速加载与交互体验。通信协议采用RESTful风格API,确保接口清晰且易于扩展。权限控制方面,普通用户可提交隐患信息,管理员具备审核处理及数据分析能力。
核心功能模块
- 用户身份认证:基于微信OpenID自动注册登录,减少用户输入负担
- 隐患信息采集:支持文字描述、图片上传、GPS定位一键提交
- 举报状态追踪:用户可实时查看举报记录的处理进度
- 后台审核机制:管理人员对上报内容进行核实并反馈处理结果
- 数据统计分析:生成区域高发隐患类型图表,辅助决策制定
数据库结构设计
系统主要包含三张核心数据表,用于存储用户信息、举报记录以及审核日志。
用户信息表(user_info)
| 字段名 | 数据类型 | 说明 |
|---|---|---|
| user_id | BIGINT | 主键,唯一标识用户 |
| open_id | VARCHAR(64) | 微信开放平台唯一ID |
| nickname | VARCHAR(50) | 用户昵称 |
| phone_number | VARCHAR(20) | 联系电话 |
| register_time | DATETIME | 注册时间戳 |
| last_login | DATETIME | 最后登录时间 |
隐患举报表(hazard_report)
| 字段名 | 数据类型 | 说明 |
|---|---|---|
| report_id | BIGINT | 主键,举报记录编号 |
| user_id | BIGINT | 外键,关联用户ID |
| hazard_type | VARCHAR(30) | 隐患类别(如线路老化、通道堵塞等) |
| description | TEXT | 详细问题说明 |
| location | VARCHAR(100) | 地理位置坐标或地址描述 |
| image_url | VARCHAR(255) | 证据图片存储路径 |
| report_time | DATETIME | 举报发起时间 |
| status | TINYINT | 处理状态(0-待处理,1-已处理) |
管理员审核表(admin_review)
| 字段名 | 数据类型 | 说明 |
|---|---|---|
| review_id | BIGINT | 主键,审核记录ID |
| report_id | BIGINT | 外键,对应举报条目 |
| admin_id | BIGINT | 执行审核的管理员ID |
| review_comment | TEXT | 处理意见说明 |
| review_result | TINYINT | 审核结果(1-通过,2-驳回) |
| review_time | DATETIME | 审核操作时间 |
关键技术实现
后端启动类启用MyBatis扫描机制,自动绑定DAO接口与XML映射文件,代码如下:
@SpringBootApplication
@MapperScan(basePackages = "com.dao")
public class FireSafetyApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(FireSafetyApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(FireSafetyApplication.class);
}
}
用户控制器提供注册、登录、信息更新等功能接口,关键方法示例如下:
@RestController
@RequestMapping("/api/user")
public class UserController {
@Autowired
private UserService userService;
@Autowired
private TokenService tokenService;
// 用户登录接口
@PostMapping("/login")
public Result login(@RequestParam String account, @RequestParam String password) {
UserEntity user = userService.findByAccount(account);
if (user == null || !user.getPassword().equals(password)) {
return Result.error("账户或密码错误");
}
String token = tokenService.createToken(user.getUserId(), account, "user");
return Result.ok().put("token", token);
}
// 新用户注册
@PostMapping("/register")
public Result register(@RequestBody UserEntity user) {
if (userService.existsByAccount(user.getAccount())) {
return Result.error("该账号已被注册");
}
user.setUserId(System.currentTimeMillis());
user.setRegisterTime(new Date());
userService.save(user);
return Result.ok();
}
// 修改用户资料
@PutMapping("/update")
public Result updateInfo(@RequestBody UserEntity user) {
userService.updateById(user);
return Result.ok();
}
}
系统通过统一返回对象封装响应数据,提升前后端协作效率。同时引入分页工具类,支持海量举报记录的高效查询展示。