1. 项目概述
这个基于SSM框架的疫情健康上报管理系统,是我去年指导计算机专业学生完成的毕业设计项目。系统主要包含行程上报和健康上报两大核心功能模块,采用Spring+SpringMVC+MyBatis技术栈实现,配套完整的前后端代码、说明文档和毕业论文。下面我将从技术选型、功能实现到部署调试,详细拆解这个项目的完整实现过程。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术选型解析
2.1 为什么选择SSM框架
SSM(Spring+SpringMVC+MyBatis)组合是JavaWeb开发的经典架构。对于毕业设计级别的项目来说,它比SpringBoot更合适:
- 分层明确:SpringMVC负责控制层,Spring管理业务层,MyBatis处理持久层
- 配置可见性:XML配置方式让初学者更易理解框架工作原理
- 教学资源丰富:高校实验室环境普遍支持,调试排错资料齐全
2.2 技术栈明细
- 前端:Bootstrap3 + jQuery + ECharts
- 后端:Spring4 + SpringMVC + MyBatis3
- 数据库:MySQL5.7
- 构建工具:Maven3
- 开发工具:IntelliJ IDEA + Navicat
提示:建议使用JDK8环境,避免高版本JDK与Spring4的兼容性问题
3. 核心功能实现
3.1 行程上报模块
3.1.1 数据库设计
sql复制CREATE TABLE `trip_report` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL COMMENT '用户ID',
`start_city` varchar(50) NOT NULL COMMENT '出发城市',
`end_city` varchar(50) NOT NULL COMMENT '到达城市',
`transport_type` tinyint(4) NOT NULL COMMENT '交通工具类型',
`trip_date` datetime NOT NULL COMMENT '行程日期',
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3.1.2 关键业务逻辑
- 行程数据校验:
java复制public void validateTrip(TripReport trip) {
if(StringUtils.isEmpty(trip.getStartCity()) ||
StringUtils.isEmpty(trip.getEndCity())){
throw new BusinessException("城市信息不能为空");
}
if(trip.getTripDate().after(new Date())){
throw new BusinessException("行程日期不能晚于当前时间");
}
}
- 行程冲突检测(防止重复上报):
java复制public boolean checkTripConflict(Integer userId, Date tripDate) {
TripReportExample example = new TripReportExample();
example.createCriteria()
.andUserIdEqualTo(userId)
.andTripDateEqualTo(tripDate);
return tripReportMapper.countByExample(example) > 0;
}
3.2 健康上报模块
3.2.1 体温异常检测算法
java复制public String checkTemperature(Float temperature) {
if(temperature > 37.3f) {
return "RED"; // 红色预警
} else if(temperature > 37.0f) {
return "YELLOW"; // 黄色预警
} else {
return "GREEN"; // 正常
}
}
3.2.2 健康数据统计
使用ECharts实现7天体温变化曲线:
javascript复制function initTempChart(tempData) {
let chart = echarts.init(document.getElementById('temp-chart'));
chart.setOption({
xAxis: { type: 'category', data: tempData.dates },
yAxis: { type: 'value', max: 40 },
series: [{
type: 'line',
data: tempData.temps,
markLine: {
data: [{ type: 'average', name: '平均体温' }]
}
}]
});
}
4. 系统特色功能
4.1 智能提醒机制
- 每日9:00自动发送上报提醒(Quartz定时任务)
- 连续3天未上报触发二级提醒
- 体温异常立即通知管理员
4.2 多维度数据看板
- 区域风险热力图(基于高德地图API)
- 异常症状统计饼图
- 上报完成率趋势图
5. 部署与调试
5.1 环境准备清单
| 组件 | 版本要求 | 备注 |
|---|---|---|
| JDK | 1.8+ | 建议Oracle JDK |
| Tomcat | 8.5+ | 需配置UTF-8编码 |
| MySQL | 5.7+ | 初始化字符集为utf8mb4 |
| Maven | 3.6+ | 配置阿里云镜像 |
5.2 常见部署问题
- 乱码问题解决:
xml复制<!-- web.xml增加编码过滤器 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
- 数据库连接失败检查:
- 确认mysql-connector-java版本与MySQL服务版本匹配
- 检查applicationContext.xml中的连接参数
- 测试数据库账号的远程连接权限
6. 项目扩展建议
6.1 功能增强方向
- 添加微信小程序端上报入口
- 对接健康码API实现自动核验
- 引入Redis缓存高频访问数据
6.2 性能优化方案
- MyBatis二级缓存配置:
xml复制<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
- 报表数据分页查询优化:
java复制public PageInfo<ReportVO> getReportPage(int pageNum, int pageSize) {
PageHelper.startPage(pageNum, pageSize);
List<ReportVO> list = reportMapper.selectReportList();
return new PageInfo<>(list);
}
7. 开发心得
- 表单验证要前后端双重保障:
- 前端用jQuery Validation减轻服务器压力
- 后端必须做最终数据校验
- MyBatis逆向工程使用技巧:
- 生成的Example类适合简单查询
- 复杂SQL建议手写XML映射文件
- 时间字段处理经验:
- 数据库使用datetime类型
- Java端统一用java.util.Date
- 前端传递时间字符串时指定格式:
javascript复制$.ajaxSetup({
converters: {
"text json": function(jsonString) {
return JSON.parse(jsonString, dateReviver);
}
}
});
function dateReviver(key, value) {
if (typeof value === 'string' &&
/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/.test(value)) {
return new Date(value);
}
return value;
}
