1. 项目概述
这个基于SpringBoot+Vue的社区疫情返乡管控系统,是我在2022年毕业季完成的本科毕业设计。当时正值疫情防控关键期,各地返乡政策频繁调整,社区工作人员每天要处理上百份纸质申报表,效率低下且容易出错。我开发的这套系统,用技术手段解决了以下核心痛点:
- 实现返乡申报全流程电子化,审批时间从原来的平均3天缩短至2小时内
- 动态关联卫健委发布的疫情风险地区数据,自动校验申报合规性
- 通过数据看板实时展示社区人员流动情况,辅助防疫决策
系统上线后在我家乡的3个社区试运行两个月,累计处理了2174人次返乡申报,错误率从人工处理时的8.3%降至0.4%。下面我就从技术选型、系统设计和实战经验三个维度,详细拆解这个项目的实现过程。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构解析
2.1 为什么选择SpringBoot+Vue组合
后端技术栈选择依据:
- SpringBoot 2.7.3:相比传统SSM框架,内置Tomcat和自动配置让部署更简单,特别适合快速迭代的毕业设计项目
- JWT认证:选用Auth0的java-jwt库实现无状态认证,解决session共享难题
- Redis 6.x:用作缓存和消息队列,应对春节返乡期间的申报高峰
前端技术决策过程:
- Vue 3.2 + Element Plus:对比React后发现Vue的学习曲线更平缓,Element Plus的Form组件完美适配申报表单需求
- ECharts 5.3:社区领导特别强调数据可视化,这个库的疫情地图模板可直接复用
- Axios:配合后端RESTful API设计,拦截器统一处理401超时问题
技术选型心得:毕业设计切忌堆砌新技术,要选择文档丰富、社区活跃的技术栈。我曾尝试用Kotlin重写部分服务,结果被Gradle配置问题卡了两天,最后乖乖换回Java。
2.2 数据库设计中的坑
最初设计的MySQL表结构存在严重问题:
sql复制-- 错误示范:把审批记录和申报表合并设计
CREATE TABLE `application` (
`id` int NOT NULL AUTO_INCREMENT,
`user_id` int NOT NULL,
`travel_info` json DEFAULT NULL,
`approval_status` tinyint DEFAULT '0',
`approver_id` int DEFAULT NULL,
`approval_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
);
这个设计导致:
- 审批历史无法追溯
- 状态变更逻辑混乱
- 并发更新时出现脏读
最终采用的解决方案:
sql复制-- 优化后的三表结构
CREATE TABLE `application` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` bigint NOT NULL,
`departure_code` varchar(12) NOT NULL COMMENT '出发地行政区划代码',
`destination_code` varchar(12) NOT NULL,
`planned_time` datetime NOT NULL,
`transport_type` enum('TRAIN','FLIGHT','BUS','PRIVATE_CAR') NOT NULL,
`create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
);
CREATE TABLE `approval_flow` (
`id` bigint NOT NULL AUTO_INCREMENT,
`application_id` bigint NOT NULL,
`status` enum('PENDING','APPROVED','REJECTED','CANCELLED') NOT NULL,
`comment` varch
