毕业设计实战:基于SSM+Vue的新冠病毒校园监控平台设计与实现全攻略
在开发“新冠病毒校园监控平台”这套毕设时,我曾因“健康数据与防疫措施脱节”踩过一个关键坑。初期设计时,我将“学生体温上报”“核酸检测记录”“疫苗接种情况”“请假申请”视为四个独立模块,导致学生体温异常时系统未自动提醒、请假申请与防疫政策无法关联、核酸检测逾期未做无通知提醒,耗费4天重构了数据联动机制、引入健康预警规则和自动提醒功能才解决了问题📝。
基于此次实战经验,本文将精简拆解这套涵盖管理员、教师、学生三大角色的校园防疫监控平台,分享核心开发流程与实操细节,为同类公共卫生监控类毕设提供一份可落地的参考。
一、需求分析:聚焦“健康监控”核心,避免功能冗余
很多同学在做防疫监控类系统时,容易陷入“功能堆砌”的误区。我最初也曾想加入一个复杂的“校园通行码”模块,结果因技术难度大且偏离“健康数据采集、防疫措施跟踪”等核心业务,被导师要求删减。
在做这套系统时,我的核心思路是抓住**“人员健康”这个监控主体,围绕“防疫管理”这个场景,理清“学生(被监控对象)”、“教师/辅导员(管理者)”、“管理员(系统统筹者)”**之间的关系,最终形成 “健康数据上报 → 异常预警 → 防疫措施跟进(核酸检测/疫苗接种/请假管理) → 数据统计分析” 的业务闭环。
1. 核心角色与功能(精简版)
| 角色 | 核心功能 |
|---|---|
| 管理员 | 学生/教师管理、班级管理、健康数据总览(体温/核酸/疫苗统计)、防疫公告发布、论坛管理、请假审批 |
| 教师/辅导员 | 查看所负责班级学生的健康数据(体温/核酸/疫苗)、学生请假审批、发布班级通知、查看健康异常预警 |
| 学生 | 每日体温上报、核酸检测记录填报、疫苗接种记录填报、请假申请、查看个人健康档案、查看公告、参与论坛交流 |
2. 需求避坑要点
- 拒绝空想,模拟流程:在开发前,我邀请了20名学生和5名辅导员模拟了“学生每日体温上报→体温异常系统预警→辅导员跟进→核酸检测记录更新→疫苗接种记录更新→请假申请审批”的完整流程。发现辅导员最关心“班级整体健康状况”,于是增加了“班级健康报表”功能;学生最关心“请假审批进度”,于是增加了“审批状态跟踪”。
- 明确约束条件:提前规定“体温正常范围35.5℃-37.3℃”“体温≥37.3℃自动标记为异常并推送预警”“核酸检测超过7天未做自动提醒”“疫苗接种信息需记录接种剂次和时间”“请假需关联防疫要求”,这些明确的约束为后续系统实现提供了清晰的业务边界。
二、技术选型:稳定框架 + 健康数据联动,新手友好
这套系统涉及健康数据的实时上报和预警,前期我曾尝试使用WebSocket实现实时推送,结果复杂度较高,最终采用了定时轮询+消息通知的简化方案:
| 技术工具 | 选型理由 | 避坑提醒 |
|---|---|---|
| SSM框架(Spring+SpringMVC+MyBatis) | 经典成熟的企业级后台框架,稳定可靠,适合健康数据系统的后端开发 | 重点掌握Spring声明式事务管理;体温上报和请假审批操作必须加事务 |
| Vue.js | 渐进式前端框架,数据双向绑定让健康数据展示更直观 | 使用v-if控制异常数据的高亮显示;使用el-date-picker组件方便日期选择 |
| MySQL 5.7 | 存储所有健康业务数据 | 体温字段用Decimal类型;合理设置索引提升健康数据查询效率 |
| ECharts | 数据可视化图表库,用于健康数据统计分析 | 在管理后台使用折线图展示体温趋势、使用饼图展示核酸检测覆盖率 |
三、数据库设计:业务关联清晰,支撑健康监控闭环
数据库设计直接影响后续开发效率。前期因未设计“健康预警规则表”和“数据联动机制”,导致体温异常时无自动提醒、核酸逾期无通知。
1. 核心表结构(精选核心表)
- 学生表(yonghu):
id、yonghu_name(学生姓名)、yonghu_photo(头像)、yonghu_phone(联系方式)、yonghu_email(邮箱)、banji_types(班级)、yonghu_delete(假删标记)、insert_time(添加时间)。 - 教师表(jiaoshi):
id、jiaoshi_name(教师姓名)、jiaoshi_photo(头像)、jiaoshi_phone(联系方式)、jiaoshi_email(邮箱)、banji_types(负责班级)、jiaoshi_delete。 - 学生体温表(xueshengtiwen):这是核心健康数据表。包含
yonghu_id(学生)、xueshengtiwen_tiwen(体温)、xueshengtiwen_types(时间类型:早/中/晚)、insert_time(上报时间)、xueshengtiwen_content(身体详情/症状)。 - 核酸检测情况表(hejianzhaungtai):
id、yonghu_id、hejianzhaungtai_types(检测状态:已检/未检)、hejianzhaungtai_time(检测时间)、hejianzhaungtai_content(详情)。 - 疫苗接种情况表(yimiaojiezhong):
id、yonghu_id、yimiaojiezhong_types(接种状态:未接种/第一剂/第二剂/加强针)、yimiaojiezhong_time(接种时间)、yimiaojiezhong_content(备注)。 - 学生请假表(xueshengqingjia):
id、yonghu_id、xueshengqingjia_name(请假原因)、xueshengqingjia_text(详情)、xueshengqingjia_types(请假类型:病假/事假/隔离假)、xueshengqingjia_time(请假开始时间)、xueshengqingjia_number(请假天数)、xueshengqingjia_yesno_types(审核结果:待审核/通过/拒绝)、xueshengqingjia_yesno_text(处理结果/审批意见)。 - 论坛信息表(forum):
id、forum_name(帖子标题)、yonghu_id/jiaoshi_id/users_id(发布人)、forum_content(发布内容)、super_ids(父id)、forum_state_types(帖子状态)。 - 公告资讯表(news):
id、news_name(公告标题)、news_types(公告类型:防疫通知/校园动态)、news_photo、insert_time、news_content。
2. 关键业务SQL示例
示例SQL(查询学生的完整健康档案):
-- 查询学生“张三”的完整健康数据(体温、核酸、疫苗、请假)
SELECT
y.yonghu_name,
y.yonghu_phone,
c.clazz_name AS class_name,
t.xueshengtiwen_tiwen AS latest_temperature,
t.insert_time AS temperature_time,
h.hejianzhaungtai_types AS nucleic_status,
h.hejianzhaungtai_time AS nucleic_time,
m.yimiaojiezhong_types AS vaccine_status,
m.yimiaojiezhong_time AS vaccine_time,
q.xueshengqingjia_name AS leave_reason,
q.xueshengqingjia_yesno_types AS leave_status
FROM yonghu y
LEFT JOIN banji_types c ON y.banji_types = c.code_index
LEFT JOIN xueshengtiwen t ON y.id = t.yonghu_id AND t.id = (
SELECT id FROM xueshengtiwen WHERE yonghu_id = y.id ORDER BY insert_time DESC LIMIT 1
)
LEFT JOIN hejianzhaungtai h ON y.id = h.yonghu_id AND h.id = (
SELECT id FROM hejianzhaungtai WHERE yonghu_id = y.id ORDER BY hejianzhaungtai_time DESC LIMIT 1
)
LEFT JOIN yimiaojiezhong m ON y.id = m.yonghu_id AND m.id = (
SELECT id FROM yimiaojiezhong WHERE yonghu_id = y.id ORDER BY yimiaojiezhong_time DESC LIMIT 1
)
LEFT JOIN xueshengqingjia q ON y.id = q.yonghu_id AND q.xueshengqingjia_yesno_types = 1
WHERE y.yonghu_name = '张三'
ORDER BY q.insert_time DESC
LIMIT 1;
关键避坑:
- 体温异常预警:学生上报体温时,后端判断体温是否≥37.3℃,若是则自动记录异常并推送通知给对应辅导员。
- 核酸逾期提醒:定时任务扫描核酸检测记录,若超过7天未检测则生成提醒记录。
- 数据一致性:涉及体温上报、异常预警等多表操作,务必使用事务注解
@Transactional。
四、核心功能实现:6大模块满足答辩需求
这套系统功能点清晰,答辩时只需讲清楚核心业务流程即可。以下6个模块是重中之重,也是答辩评委最可能提问的地方。
1. 每日体温上报(核心业务流程 - 学生端)
- 核心逻辑:学生每日上报体温(早/中/晚)、填写身体症状→系统判断体温是否正常→异常时自动标记并推送预警给辅导员。
- 代码要点(体温上报 + 异常预警):
@Service
@Transactional
public void addTemperature(Xueshengtiwen temperature) {
// 1. 保存体温记录
temperature.setInsertTime(new Date());
xueshengtiwenMapper.insert(temperature);
// 2. 判断是否异常(体温≥37.3℃)
BigDecimal abnormalTemp = new BigDecimal("37.3");
if (temperature.getXueshengtiwenTiwen().compareTo(abnormalTemp) >= 0) {
// 创建异常预警记录
createAbnormalAlert(temperature);
log.info("学生 {} 体温异常:{}℃", temperature.getYonghuId(), temperature.getXueshengtiwenTiwen());
}
log.info("学生 {} 上报体温:{}℃", temperature.getYonghuId(), temperature.getXueshengtiwenTiwen());
}
// 创建体温异常预警
private void createAbnormalAlert(Xueshengtiwen temperature) {
// 可设计预警表存储预警记录,或直接推送消息
// 此处简化:记录日志或发送通知
// 实际开发中可插入预警消息表,供辅导员查看
}
2. 核酸检测管理(防疫数据模块)
- 核心逻辑:学生填报核酸检测记录(检测时间、结果)→系统自动计算最近检测时间→超期未检自动提醒。
- 代码要点:
@Service
@Transactional
public void addNucleicTest(Hejianzhaungtai test) {
test.setCreateTime(new Date());
hejianzhaungtaiMapper.insert(test);
log.info("学生 {} 填报核酸检测记录,检测时间:{}", test.getYonghuId(), test.getHejianzhaungtaiTime());
}
// 定时任务:检查超期未检学生(超过7天)
@Scheduled(cron = "0 0 8 * * ?") // 每天早上8点执行
public void checkOverdueNucleic() {
LocalDate sevenDaysAgo = LocalDate.now().minusDays(7);
// 查询最近一次核酸检测时间超过7天的学生
List<Yonghu> overdueStudents = yonghuMapper.selectOverdueNucleic(sevenDaysAgo);
for (Yonghu student : overdueStudents) {
// 发送提醒通知(可插入消息表或发送邮件/短信)
log.info("学生 {} 核酸检测超期,请尽快检测", student.getYonghuName());
}
}
3. 疫苗接种管理(防疫数据模块)
- 核心逻辑:学生填报疫苗接种记录(接种剂次、接种时间)→系统自动判断接种完成状态(未接种/第一剂/第二剂/加强针)。
- 页面设计:疫苗记录列表按时间倒序排列;学生可查看自己的接种进度。
4. 请假申请管理(防疫联动模块)
- 核心逻辑:学生提交请假申请(类型、原因、起止时间、天数)→辅导员/教师审批→通过后请假信息生效→可根据防疫要求判断是否需要额外材料(如隔离假需核酸证明)。
- 代码要点(请假申请 + 防疫联动):
@Service
@Transactional
public void addLeaveRequest(Xueshengqingjia leave) {
// 1. 自动计算请假天数
long days = ChronoUnit.DAYS.between(
leave.getXueshengqingjiaTime().toInstant(),
leave.getXueshengqingjiaTime().toInstant().plusSeconds(86400 * leave.getXueshengqingjiaNumber())
);
leave.setXueshengqingjiaNumber((int) days);
// 2. 设置初始审核状态为“待审核”
leave.setXueshengqingjiaYesnoTypes(1); // 1=待审核
leave.setInsertTime(new Date());
leave.setCreateTime(new Date());
xueshengqingjiaMapper.insert(leave);
// 3. 如果是隔离假,自动提醒上传核酸证明
if (leave.getXueshengqingjiaTypes() == 3) { // 3=隔离假
log.info("学生 {} 申请隔离假,请上传核酸证明", leave.getYonghuId());
}
log.info("学生 {} 提交请假申请", leave.getYonghuId());
}
// 辅导员审批请假
@Transactional
public void approveLeave(Integer leaveId, Integer status, String remark) {
Xueshengqingjia leave = xueshengqingjiaMapper.selectByPrimaryKey(leaveId);
leave.setXueshengqingjiaYesnoTypes(status); // 2=通过 3=拒绝
leave.setXueshengqingjiaYesnoText(remark);
xueshengqingjiaMapper.updateByPrimaryKey(leave);
log.info("请假申请 {} 审核完成,状态:{}", leaveId, status == 2 ? "通过" : "拒绝");
}
5. 健康数据统计与可视化(管理员/教师端)
- 核心逻辑:管理员/教师查看班级健康数据报表,包括体温趋势图、核酸检测覆盖率、疫苗接种覆盖率等。
- 代码要点(数据统计):
// 统计班级核酸检测覆盖率
public Map<String, Object> getNucleicCoverage(Integer classId) {
Map<String, Object> result = new HashMap<>();
// 查询班级学生总数
int totalStudents = yonghuMapper.countByClass(classId);
// 查询已完成核酸检测的学生数(最近7天内)
int testedStudents = hejianzhaungtaiMapper.countTestedInDays(classId, 7);
double coverageRate = totalStudents == 0 ? 0 : (double) testedStudents / totalStudents * 100;
result.put("total", totalStudents);
result.put("tested", testedStudents);
result.put("coverageRate", String.format("%.2f", coverageRate));
return result;
}
6. 论坛交流与公告发布(信息传达模块)
- 核心逻辑:学生/教师可在论坛交流防疫心得、提问答疑;管理员发布防疫通知、校园动态。
- 代码要点:
// 发布帖子
@Transactional
public void addPost(Forum post) {
post.setInsertTime(new Date());
post.setForumStateTypes(1); // 1=正常
forumMapper.insert(post);
}
// 回复帖子
@Transactional
public void replyPost(Integer parentId, String content, Integer userId, String userType) {
Forum reply = new Forum();
reply.setSuperIds(parentId);
reply.setForumContent(content);
reply.setInsertTime(new Date());
// 根据用户类型设置发布人
if ("student".equals(userType)) {
reply.setYonghuId(userId);
} else if ("teacher".equals(userType)) {
reply.setJiaoshiId(userId);
}
forumMapper.insert(reply);
}
五、新冠病毒校园监控平台特色功能设计(关键加分项)
这套系统的核心在于“健康数据的实时监控与防疫措施的智能联动”,以下几个特色设计能让你的毕设脱颖而出:
1. 体温趋势分析
-- 统计某学生近7天体温变化
SELECT
DATE(insert_time) AS report_date,
AVG(xueshengtiwen_tiwen) AS avg_temperature,
MAX(xueshengtiwen_tiwen) AS max_temperature
FROM xueshengtiwen
WHERE yonghu_id = #{studentId}
AND insert_time >= DATE_SUB(NOW(), INTERVAL 7 DAY)
GROUP BY DATE(insert_time)
ORDER BY report_date;
在个人中心展示体温趋势折线图,帮助师生了解自身健康状况变化。
2. 班级健康排行榜
-- 统计各班级健康数据完成率(体温上报率、核酸完成率)
SELECT
c.clazz_name,
COUNT(DISTINCT t.yonghu_id) / COUNT(DISTINCT y.id) * 100 AS temp_report_rate,
COUNT(DISTINCT h.yonghu_id) / COUNT(DISTINCT y.id) * 100 AS nucleic_rate,
COUNT(DISTINCT m.yonghu_id) / COUNT(DISTINCT y.id) * 100 AS vaccine_rate
FROM banji_types c
LEFT JOIN yonghu y ON c.code_index = y.banji_types
LEFT JOIN xueshengtiwen t ON y.id = t.yonghu_id AND t.insert_time >= CURDATE()
LEFT JOIN hejianzhaungtai h ON y.id = h.yonghu_id AND h.hejianzhaungtai_time >= DATE_SUB(NOW(), INTERVAL 7 DAY)
LEFT JOIN yimiaojiezhong m ON y.id = m.yonghu_id
GROUP BY c.id;
在管理员后台展示班级健康排名,激励班级加强防疫管理。
3. 健康异常自动预警
- 体温异常:学生上报体温≥37.3℃时,系统自动记录异常并推送通知给辅导员
- 核酸逾期:定时任务每天检查核酸检测记录,超过7天未检自动提醒
- 疫苗到期:加强针接种满6个月后自动提醒接种下一剂
4. 请假与防疫政策联动
- 请假类型中设置“隔离假”,需上传核酸证明
- 请假审批通过后,系统自动更新学生考勤状态(可选)
- 请假天数统计用于判断是否需要上报社区(可选)
六、测试与答辩:流程演示为主,突出健康监控闭环
1. 核心测试用例
| 测试场景 | 操作步骤 | 预期结果 |
|---|---|---|
| 学生体温上报 | 学生登录→上报体温(正常/异常)→提交 | 体温记录保存,异常时自动预警 |
| 核酸检测填报 | 学生登录→填报核酸检测记录→提交 | 记录保存,超期未检自动提醒 |
| 疫苗接种填报 | 学生登录→填报疫苗接种记录→提交 | 记录保存,接种状态正确显示 |
| 请假申请审批 | 学生提交请假→辅导员审批通过→学生查看 | 请假状态变为“已通过” |
| 健康数据统计 | 教师登录→查看班级健康报表 | 体温上报率、核酸覆盖率正确显示 |
| 论坛交流 | 学生发帖→教师回复→学生查看 | 帖子正常显示,回复正确 |
2. 答辩准备技巧
- 演示流程:分角色演示,强调健康监控闭环。
- 管理员端:展示添加学生/教师、查看全校健康统计、发布公告、管理论坛。
- 学生端:展示每日体温上报、填报核酸/疫苗记录、提交请假申请、查看个人健康档案、参与论坛。
- 教师端:展示查看班级健康报表、审批学生请假、查看体温异常预警。
- 最终展示:在教师端查看班级健康报表,展示体温上报率、核酸覆盖率,强调系统对校园防疫的辅助作用。
- 业务讲解:准备一页PPT展示系统业务流程图,从“健康数据上报”到“防疫措施跟进”的全过程。
- 技术亮点:
- 健康数据联动:体温上报与异常预警的联动机制。
- 定时任务:核酸逾期提醒的定时调度实现。
- 数据可视化:使用ECharts展示体温趋势图和覆盖率饼图。
- 请假审批流程:多状态流转和审批意见记录。
- 突出问题解决:讲清楚“如何实现体温异常的自动预警”(条件判断+消息推送)、“如何实现核酸逾期的自动提醒”(定时任务扫描)、“如何实现健康数据的统计分析”(SQL聚合查询+ECharts可视化)。
结语
本文核心是“聚焦校园健康监控核心业务、实现健康数据与防疫措施的智能联动、设计一套完整的防疫监控平台”。毕设无需追求技术多炫酷,把健康数据(体温/核酸/疫苗)、防疫措施(请假/预警)、**统计分析(报表/可视化)**之间的业务逻辑讲透,实现一个功能完整、流程闭环的系统,就足以成为答辩中的亮点。
若需完整项目源码(带详细注释)、测试数据SQL脚本、以及体温异常预警和核酸逾期提醒的完整代码,可在评论区留言“新冠病毒校园监控平台”获取;开发中遇问题(如定时任务配置、数据可视化、异常预警机制),也可留言咨询~ 祝毕设顺利!🎉