1. 项目概述
疫情健康上报管理系统是近年来企事业单位和高校广泛采用的信息化管理工具。这个基于SSM框架开发的系统,主要解决两个核心需求:一是人员行程轨迹的精准记录,二是健康状况的日常监测。我在实际部署过程中发现,这类系统能否真正发挥作用,关键在于数据采集的便捷性和统计分析的实时性。
传统纸质登记方式存在信息滞后、易丢失、难追溯等问题。而这个系统通过微信端或网页端提交,管理员可实时查看异常数据,大幅提升了疫情防控响应速度。系统采用经典的SSM(Spring+SpringMVC+MyBatis)架构,这种组合在中小型Web应用中具有开发效率高、运行稳定的特点,特别适合这类需要快速上线的疫情防控项目。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构解析
2.1 SSM框架选型考量
选择SSM框架主要基于三个实际考量:首先,Spring的IOC容器管理Bean生命周期非常方便,特别是对于需要频繁变更的疫情上报规则;其次,SpringMVC的拦截器机制完美适配权限验证需求,比如区分普通用户和管理员角色;最后,MyBatis的灵活SQL编写能力,能满足复杂的数据统计查询需求。
在具体版本选择上:
- Spring 4.3.18(稳定版,兼容性强)
- MyBatis 3.4.6(支持注解和XML两种配置方式)
- Tomcat 8.5(匹配JDK1.8环境)
2.2 系统模块划分
核心模块采用Maven多模块设计:
code复制epidemic-report
├── report-core // 实体类及工具类
├── report-dao // MyBatis映射文件
├── report-service // 业务逻辑层
├── report-web // 控制器和页面
└── report-scheduler // 定时任务模块
这种结构在后期新增功能时(比如添加核酸检测模块),只需在对应层级添加代码,不会影响整体架构。我在实际开发中特别添加了scheduler模块,用于每日凌晨自动生成前一天的疫情统计报表。
3. 核心功能实现
3.1 行程上报功能
行程记录采用"时间+地点"的轨迹点模型:
java复制public class TravelRecord {
private Long id;
private Date time; // 到访时间
private String address; // 详细地址
private Integer type; // 场所类型(1=办公 2=餐饮 3=交通)
private String coordinate; // 经纬度坐标
}
前端实现要点:
- 使用高德地图API实现地点选择
- 时间选择器限制只能上报当日及前3天的行程
- 提交时自动获取设备IP作为辅助验证
重要提示:实际部署中发现,部分用户会忘记上报行程。后来我们添加了每日18点的短信提醒功能,上报率提升了62%。
3.2 健康上报功能
健康表单设计包含关键指标:
html复制<form>
<input type="radio" name="fever" value="0"> 体温正常(≤37.2℃)
<input type="radio" name="fever" value="1"> 发热(>37.2℃)
<select name="healthCode">
<option value="0">绿码</option>
<option value="1">黄码</option>
<option value="2">红码</option>
</select>
<textarea name="symptom" placeholder="如有咳嗽等症状请详细描述"></textarea>
</form>
后台采用状态机模式处理健康状态变更:
mermaid复制stateDiagram
[*] --> 绿码
绿码 --> 黄码: 发热上报
黄码 --> 红码: 症状加重
红码 --> 绿码: 核酸阴性证明
4. 关键技术实现
4.1 数据可视化看板
使用ECharts实现管理员视图的核心代码:
javascript复制// 近7天发热人数统计
function initFeverChart() {
var chart = echarts.init(document.getElementById('fever-chart'));
chart.setOption({
tooltip: { trigger: 'axis' },
xAxis: { data: ['周一','周二','周三','周四','周五','周六','周日'] },
yAxis: { type: 'value' },
series: [{
name: '发热人数',
type: 'line',
data: [12,8,15,9,11,6,4],
markLine: {
data: [{ type: 'average', name: '平均值' }]
}
}]
});
}
4.2 异常数据预警机制
采用观察者模式实现预警:
- 当用户上报异常健康信息时,触发HealthEvent事件
- 预警服务监听事件并执行:
- 向防疫负责人发送短信
- 在管理端生成待处理工单
- 记录异常信息到预警日志
核心配置:
xml复制<!-- 事件监听配置 -->
<bean id="healthListener" class="com.epidemic.listener.HealthWarningListener"/>
<bean class="org.springframework.context.event.ApplicationEventMulticaster">
<property name="listeners">
<map>
<entry key="com.epidemic.event.HealthEvent" value-ref="healthListener"/>
</map>
</property>
</bean>
5. 系统部署实践
5.1 环境准备清单
| 组件 | 版本要求 | 备注 |
|---|---|---|
| JDK | 1.8+ | 建议使用Oracle JDK |
| MySQL | 5.7+ | 需开启InnoDB引擎 |
| Redis | 3.2+ | 用于缓存健康码状态 |
| Tomcat | 8.5+ | 需配置UTF-8编码 |
5.2 常见部署问题
-
乱码问题解决:
- 确认MySQL字符集为utf8mb4
- 在JDBC连接串添加参数:
code复制jdbc:mysql://localhost:3306/epidemic?useUnicode=true&characterEncoding=UTF-8 - Tomcat的server.xml添加URIEncoding="UTF-8"
-
性能优化建议:
- 为travel_record表添加复合索引:
sql复制ALTER TABLE travel_record ADD INDEX idx_user_date (user_id, record_date); - 配置MyBatis二级缓存:
xml复制<cache eviction="LRU" flushInterval="60000" size="1024"/>
- 为travel_record表添加复合索引:
6. 项目扩展建议
在实际使用中,我们陆续添加了三个实用功能:
-
行程冲突检测:通过比对确诊患者的行程轨迹,自动标记有时空交集的用户。实现原理是将地址坐标转换为GeoHash编码,通过范围查询快速匹配。
-
批量导入导出:使用Apache POI处理Excel文件,支持从旧系统迁移数据。关键代码:
java复制// 导出健康记录示例
HSSFWorkbook workbook = new HSSFWorkbook();
Sheet sheet = workbook.createSheet("健康记录");
Row headerRow = sheet.createRow(0);
headerRow.createCell(0).setCellValue("姓名");
headerRow.createCell(1).setCellValue("体温");
// ...填充数据逻辑
- 微信小程序接入:通过uniapp框架开发配套小程序,扫码即可快速上报。需要注意微信鉴权流程与现有账号体系的对接。
这个项目最让我有成就感的是,系统上线后真正帮助学校在疫情期间实现了精准防控。技术上的收获是深入理解了SSM框架在应急项目中的快速开发优势,特别是在需要频繁调整业务规则的场景下,Spring的配置化优势体现得淋漓尽致。
