毕业设计实战:基于SSM+Vue的新冠病毒校园监控平台设计与实现全攻略

0 阅读14分钟

毕业设计实战:基于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)idyonghu_name(学生姓名)、yonghu_photo(头像)、yonghu_phone(联系方式)、yonghu_email(邮箱)、banji_types(班级)、yonghu_delete(假删标记)、insert_time(添加时间)。
  • 教师表(jiaoshi)idjiaoshi_name(教师姓名)、jiaoshi_photo(头像)、jiaoshi_phone(联系方式)、jiaoshi_email(邮箱)、banji_types(负责班级)、jiaoshi_delete
  • 学生体温表(xueshengtiwen)这是核心健康数据表。包含yonghu_id(学生)、xueshengtiwen_tiwen(体温)、xueshengtiwen_types(时间类型:早/中/晚)、insert_time(上报时间)、xueshengtiwen_content(身体详情/症状)。
  • 核酸检测情况表(hejianzhaungtai)idyonghu_idhejianzhaungtai_types(检测状态:已检/未检)、hejianzhaungtai_time(检测时间)、hejianzhaungtai_content(详情)。
  • 疫苗接种情况表(yimiaojiezhong)idyonghu_idyimiaojiezhong_types(接种状态:未接种/第一剂/第二剂/加强针)、yimiaojiezhong_time(接种时间)、yimiaojiezhong_content(备注)。
  • 学生请假表(xueshengqingjia)idyonghu_idxueshengqingjia_name(请假原因)、xueshengqingjia_text(详情)、xueshengqingjia_types(请假类型:病假/事假/隔离假)、xueshengqingjia_time(请假开始时间)、xueshengqingjia_number(请假天数)、xueshengqingjia_yesno_types(审核结果:待审核/通过/拒绝)、xueshengqingjia_yesno_text(处理结果/审批意见)。
  • 论坛信息表(forum)idforum_name(帖子标题)、yonghu_id/jiaoshi_id/users_id(发布人)、forum_content(发布内容)、super_ids(父id)、forum_state_types(帖子状态)。
  • 公告资讯表(news)idnews_name(公告标题)、news_types(公告类型:防疫通知/校园动态)、news_photoinsert_timenews_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. 答辩准备技巧

  • 演示流程分角色演示,强调健康监控闭环
    1. 管理员端:展示添加学生/教师、查看全校健康统计、发布公告、管理论坛。
    2. 学生端:展示每日体温上报、填报核酸/疫苗记录、提交请假申请、查看个人健康档案、参与论坛。
    3. 教师端:展示查看班级健康报表、审批学生请假、查看体温异常预警。
    4. 最终展示:在教师端查看班级健康报表,展示体温上报率、核酸覆盖率,强调系统对校园防疫的辅助作用。
  • 业务讲解:准备一页PPT展示系统业务流程图,从“健康数据上报”到“防疫措施跟进”的全过程。
  • 技术亮点
    • 健康数据联动:体温上报与异常预警的联动机制。
    • 定时任务:核酸逾期提醒的定时调度实现。
    • 数据可视化:使用ECharts展示体温趋势图和覆盖率饼图。
    • 请假审批流程:多状态流转和审批意见记录。
  • 突出问题解决讲清楚“如何实现体温异常的自动预警”(条件判断+消息推送)“如何实现核酸逾期的自动提醒”(定时任务扫描)“如何实现健康数据的统计分析”(SQL聚合查询+ECharts可视化)

结语

本文核心是“聚焦校园健康监控核心业务、实现健康数据与防疫措施的智能联动、设计一套完整的防疫监控平台”。毕设无需追求技术多炫酷,把健康数据(体温/核酸/疫苗)防疫措施(请假/预警)、**统计分析(报表/可视化)**之间的业务逻辑讲透,实现一个功能完整、流程闭环的系统,就足以成为答辩中的亮点。

若需完整项目源码(带详细注释)、测试数据SQL脚本、以及体温异常预警和核酸逾期提醒的完整代码,可在评论区留言“新冠病毒校园监控平台”获取;开发中遇问题(如定时任务配置、数据可视化、异常预警机制),也可留言咨询~ 祝毕设顺利!🎉