1. 项目背景与核心需求
2020年以来的全球公共卫生事件彻底改变了人们的生活方式,居家隔离成为阻断病毒传播链的重要手段。但传统人工管理模式存在信息滞后、监管困难、服务缺失等痛点。这个基于Java B/S架构的智慧居家隔离系统,正是为解决这些实际问题而设计。
我在开发这个系统前,曾参与过三个城市的隔离管理信息化建设,亲眼目睹基层工作人员用Excel表格手动统计上千人的体温数据,经常忙到凌晨两三点。这种低效的现状促使我思考:如何用技术手段实现精准化、人性化的隔离管理?
系统需要同时满足三类用户的核心诉求:
- 管理员:实时掌握隔离人员动态、异常预警、资源调度
- 社区工作者:减少重复报表工作、快速响应需求
- 隔离居民:一键上报健康状态、在线问诊、生活保障
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计解析
2.1 为什么选择B/S架构
与传统的C/S架构相比,B/S架构在隔离管理场景中展现出三大优势:
- 零客户端安装:居民通过浏览器即可访问,避免指导安装客户端的沟通成本
- 跨平台兼容:无论是Windows电脑、Mac还是手机浏览器都能正常使用
- 维护便捷性:服务端更新后所有用户立即生效,特别适合政策频繁调整的防疫场景
我曾在一个老旧小区试点C/S版本,结果30%的老年人无法完成客户端安装,最终不得不改用网页版。这个教训让我坚定选择B/S架构。
2.2 Java技术栈选型
核心采用SpringBoot+MyBatis组合,具体技术矩阵如下:
| 层级 | 技术选型 | 选择理由 |
|---|---|---|
| 前端 | Thymeleaf+Bootstrap | 适合快速开发管理后台,避免前后端分离带来的复杂度 |
| 业务层 | SpringBoot 2.7.3 | 内嵌Tomcat简化部署,starter机制快速集成各组件 |
| 持久层 | MyBatis 3.5.10 | SQL可控性强,适合需要复杂统计查询的防疫报表 |
| 安全控制 | Spring Security 5.7.1 | 提供完善的权限控制,满足居民/社区/疾控中心三级权限体系 |
| 消息推送 | WebSocket+SockJS | 实时推送隔离到期提醒、核酸检测通知等时效性信息 |
| 地图服务 | 高德地图JS API | 实现隔离人员电子围栏监控,偏移预警精度可达10米内 |
实际开发中发现:高德地图API免费版并发量有限,当某次全员核酸时需要临时升级企业版。建议初期就评估峰值访问量。
3. 核心功能模块实现
3.1 健康打卡智能预警
采用规则引擎Drools实现多级预警机制:
java复制// 体温异常规则示例
rule "Fever Alert"
when
$report : HealthReport(
temperature > 37.3,
submitTime > new DateTime().minusHours(12)
)
then
insert(new Alert($report.getUserId(), "体温异常"));
end
开发中遇到的坑:
- 最初用简单if-else判断,导致规则修改需要重新部署
- 改用Drools后,社区工作人员可通过Excel导入临时规则(如新增"咳嗽+乏力"组合预警)
- 必须配套开发规则验证功能,避免错误规则导致误报
3.2 电子围栏动态监控
结合LBS技术实现:
- 居民端每15分钟上报一次GPS坐标(iOS/Android有差异)
- 服务端使用JTS拓扑套件计算与登记地址的偏差
- 采用渐进式预警策略:
- 首次越界:APP弹窗提醒
- 持续越界:自动通知社区网格员
- 严重违规:联动公安系统
实测数据表明,该功能使违规外出率下降72%,但需要注意:
- 安卓各厂商后台保活机制不同,需要针对性适配
- 部分老旧小区GPS漂移严重,需结合WiFi定位补偿
4. 关键业务逻辑优化
4.1 并发上报处理
全员健康打卡时面临的高并发挑战:
java复制// 错误示范:直接操作数据库
public void submitReport(HealthReport report) {
// 存在并发更新丢失问题
User user = userDao.selectById(report.getUserId());
user.setLastReportTime(new Date());
userDao.updateById(user);
}
// 正确方案:Redis分布式锁+乐观锁
public void submitReport(HealthReport report) {
String lockKey = "report_lock:" + report.getUserId();
try {
// 获取分布式锁(Redisson实现)
RLock lock = redissonClient.getLock(lockKey);
if (lock.tryLock(5, 10, TimeUnit.SECONDS)) {
// 乐观锁更新
User user = userDao.selectById(report.getUserId());
int version = user.getVersion();
user.setLastReportTime(new Date());
int updated = userDao.updateWithVersion(user, version);
if (updated == 0) {
throw new OptimisticLockException("数据已被修改");
}
}
} finally {
lock.unlock();
}
}
4.2 分级缓存策略
针对不同数据特性设计缓存方案:
| 数据类型 | 缓存策略 | 过期时间 | 更新机制 |
|---|---|---|---|
| 静态配置 | 本地缓存(Caffeine) | 1小时 | 管理员修改后主动清除 |
| 隔离政策 | Redis集群 | 动态 | 按政策有效期自动过期 |
| 居民健康状态 | 不缓存 | - | 保证实时性 |
| 物资库存 | Redis+本地缓存二级缓存 | 5分钟 | 库存变更时MQ通知各节点 |
5. 安全与隐私保护方案
5.1 敏感数据加密
采用国密SM4算法加密关键字段:
java复制// 加密工具类示例
public class SM4Util {
private static final String KEY = "系统密钥需定期轮换";
public static String encrypt(String plainText) {
// 实际实现需包含IV向量、填充模式等完整参数
SM4Engine engine = new SM4Engine();
engine.init(true, new KeyParameter(KEY.getBytes()));
byte[] encrypted = engine.processBlock(plainText.getBytes());
return Base64.encode(encrypted);
}
}
// 在Entity中使用
public class HealthReport {
@ColumnEncrypt(algorithm = "SM4")
private String idCardNumber;
}
5.2 审计日志设计
满足《个人信息保护法》要求:
- 所有敏感操作记录完整操作链:
- 操作人(包括系统自动任务)
- 操作时间
- 操作内容
- 修改前后的值(Diff格式)
- 日志存储采用WORM(一次写入多次读取)模式
- 定期生成隐私保护报告
6. 部署与性能调优
6.1 服务器配置建议
经过压力测试得出的推荐配置:
| 并发用户数 | CPU | 内存 | 带宽 | JVM参数建议 |
|---|---|---|---|---|
| <500 | 4核 | 8GB | 5Mbps | -Xms4g -Xmx4g -XX:MaxMetaspaceSize=512m |
| 500-2000 | 8核 | 16GB | 20Mbps | -Xms12g -Xmx12g -XX:ParallelGCThreads=4 |
| >2000 | 16核+ | 32GB+ | 50Mbps | 需集群部署+负载均衡 |
6.2 常见性能问题解决
-
OOM问题:
- 现象:频繁出现java.lang.OutOfMemoryError
- 排查:使用jmap -histo:live [pid]分析内存对象
- 解决方案:限制报表导出时的分批查询大小
-
Full GC频繁:
- 现象:系统卡顿,GC日志显示Full GC > 2次/分钟
- 排查:jstat -gcutil [pid] 1000
- 优化:调整年轻代与老年代比例(-XX:NewRatio=2)
-
慢SQL:
sql复制-- 优化前(执行时间>3s) SELECT * FROM health_report WHERE create_time > '2023-01-01' ORDER BY user_id DESC; -- 优化后(添加复合索引) ALTER TABLE health_report ADD INDEX idx_time_user (create_time, user_id);
7. 扩展功能建议
-
智能物资调度:
- 基于隔离人员密度热力图预测各社区物资需求
- 结合路线规划算法优化配送路径
-
语音交互支持:
- 集成ASR/TTS技术方便老年人操作
- 开发疫情政策语音问答机器人
-
区块链存证:
- 将关键操作记录上链(如解除隔离通知)
- 提供不可篡改的法律依据
这个项目让我深刻体会到:技术不只是冰冷的代码,当用于解决真实的社会问题时,每个if判断都可能影响数百人的生活质量。在后续迭代中,我计划加入更多人性化设计,比如根据隔离时长自动调整心理辅导频次,这才是智慧防疫系统的真正价值。
