1. 项目概述
校园疫情防控系统是基于SpringBoot+Vue+MySQL技术栈开发的一套完整解决方案,专为教育机构在特殊时期进行师生健康监测、出入管理、信息上报等防疫需求设计。这套系统采用前后端分离架构,后端使用SpringBoot提供RESTful API,前端采用Vue.js构建响应式界面,MySQL作为数据存储引擎,开箱即用。
我在实际部署测试中发现,这套系统具有三个显著特点:
- 模块化设计使得各防疫功能可独立配置
- 基于RBAC的权限控制适应不同角色的防疫需求
- 内置数据可视化看板方便管理人员掌握全局情况
2. 技术架构解析
2.1 后端技术栈
SpringBoot 2.7.3作为后端框架,配置了以下核心依赖:
xml复制<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.83</version>
</dependency>
</dependencies>
采用三层架构设计:
- Controller层:处理HTTP请求,参数校验
- Service层:业务逻辑实现
- DAO层:通过MyBatis与MySQL交互
2.2 前端技术栈
Vue 2.6.11作为前端框架,主要技术组件:
- Vue Router:实现前端路由
- Vuex:状态管理
- Axios:HTTP请求库
- Element UI:UI组件库
典型页面组件结构:
bash复制src/
├── api/ # 接口定义
├── assets/ # 静态资源
├── components/ # 公共组件
├── router/ # 路由配置
├── store/ # Vuex状态
└── views/ # 页面视图
2.3 数据库设计
MySQL 8.0主要包含以下表结构:
2.3.1 用户表(users)
sql复制CREATE TABLE `users` (
`id` int NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`password` varchar(100) NOT NULL,
`real_name` varchar(50) DEFAULT NULL,
`role` enum('admin','teacher','student') NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2.3.2 健康上报表(health_reports)
sql复制CREATE TABLE `health_reports` (
`id` int NOT NULL AUTO_INCREMENT,
`user_id` int NOT NULL,
`temperature` decimal(3,1) NOT NULL,
`symptoms` varchar(255) DEFAULT NULL,
`report_date` date NOT NULL,
PRIMARY KEY (`id`),
KEY `user_id` (`user_id`),
CONSTRAINT `health_reports_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3. 核心功能实现
3.1 健康上报模块
后端Controller示例:
java复制@RestController
@RequestMapping("/api/health")
public class HealthController {
@Autowired
private HealthService healthService;
@PostMapping("/report")
public Result reportHealth(@Valid @RequestBody HealthReportDTO dto) {
return healthService.saveReport(dto);
}
@GetMapping("/stats")
public Result getStats(@RequestParam String date) {
return healthService.getDailyStats(date);
}
}
前端上报页面关键逻辑:
javascript复制export default {
data() {
return {
form: {
temperature: null,
symptoms: []
}
}
},
methods: {
async submitReport() {
try {
await this.$api.health.report(this.form)
this.$message.success('上报成功')
} catch (error) {
this.$message.error(error.message)
}
}
}
}
3.2 出入管理模块
采用QRCode实现无接触登记:
- 系统为每位师生生成专属二维码
- 门卫扫码后自动记录出入时间
- 异常情况(如未上报健康信息)实时预警
二维码生成服务:
java复制@Service
public class QrCodeService {
public byte[] generateQrCode(String content) throws WriterException, IOException {
QRCodeWriter writer = new QRCodeWriter();
BitMatrix matrix = writer.encode(content, BarcodeFormat.QR_CODE, 200, 200);
ByteArrayOutputStream out = new ByteArrayOutputStream();
MatrixToImageWriter.writeToStream(matrix, "PNG", out);
return out.toByteArray();
}
}
4. 部署与运行
4.1 环境准备
推荐配置:
- JDK 1.8+
- Node.js 14+
- MySQL 8.0+
4.2 后端部署步骤
- 数据库初始化:
bash复制mysql -u root -p < database/schema.sql
- 修改配置文件:
yaml复制# application.yml
spring:
datasource:
url: jdbc:mysql://localhost:3306/campus_epidemic?useSSL=false
username: root
password: yourpassword
- 启动应用:
bash复制mvn spring-boot:run
4.3 前端部署步骤
- 安装依赖:
bash复制npm install
- 配置API地址:
javascript复制// src/api/config.js
export const BASE_URL = 'http://localhost:8080/api'
- 启动开发服务器:
bash复制npm run serve
5. 常见问题解决
5.1 跨域问题
解决方案:配置SpringBoot跨域支持
java复制@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.allowedHeaders("*");
}
}
5.2 性能优化建议
- 数据库层面:
- 为高频查询字段添加索引
- 合理使用MyBatis二级缓存
- 前端层面:
- 路由懒加载
- 组件按需引入
- 部署层面:
- 启用Gzip压缩
- 配置Nginx静态资源缓存
6. 扩展与定制
系统支持以下扩展方向:
- 对接微信小程序:通过uni-app改造前端
- 增加物联网设备支持:如红外测温仪自动录入
- 疫情数据分析:集成Python数据分析模块
我在实际部署中发现,系统预留了良好的扩展接口,比如在com.example.epidemic.handler包中定义了事件处理机制,可以方便地添加新的业务逻辑。
