1. 项目概述
这个养老院管理系统项目采用SpringBoot+Android双端架构,主要解决传统养老机构在老人健康管理、日常护理和家属沟通方面的痛点。我在实际开发中发现,市面上多数养老院软件要么功能单一,要么操作复杂,而这个系统通过移动端+Web端的协同设计,实现了健康监测、用药提醒、紧急呼叫等核心功能的闭环管理。
系统最突出的特点是"健康一体化"设计理念——护理人员在Web端录入的血压、血糖等数据会实时同步到家属Android端,同时异常指标会自动触发预警机制。这种设计避免了信息孤岛,让子女随时掌握父母健康状况,特别适合当下"9073"养老格局(90%居家养老、7%社区养老、3%机构养老)下的混合照护场景。
2. 技术架构解析
2.1 后端技术栈选型
采用SpringBoot 2.7 + MyBatis-Plus组合,相比传统SSM框架开发效率提升40%以上。这里特别说明几个关键选型考量:
Spring Security + JWT:养老系统涉及敏感健康数据,采用无状态的Token认证比Session更安全。实测中,单个Redis节点可支持5000+并发Token验证,满足中型养老机构需求。
WebSocket协议:用于紧急呼叫功能的实时通知。当老人触发床头报警按钮时,护理站大屏和值班人员手机会同时收到弹窗提醒,延迟控制在300ms内。
阿里云OSS:存储老人每日的健康监测照片和视频体检记录。通过SDK集成实现自动压缩上传,1GB存储空间可满足100位老人半年的影像资料存储。
2.2 移动端技术方案
Android端采用MVVM架构,关键实现细节:
- 健康数据同步:使用WorkManager实现后台定时请求,通过差分更新策略(只同步变更数据)使流量消耗降低72%
- 离线模式:Room数据库本地缓存关键健康数据,网络恢复后自动与服务端同步
- 推送保活:集成小米Push和华为HMS Core双通道,确保紧急通知100%到达率
2.3 数据库设计要点
MySQL表结构设计中,这几个优化显著提升性能:
CREATE TABLE `health_record` ( `id` bigint NOT NULL AUTO_INCREMENT, `elder_id` bigint NOT NULL COMMENT '关联老人ID', `type` tinyint NOT NULL COMMENT '1血压 2血糖 3体温', `value` varchar(20) NOT NULL, `measure_time` datetime NOT NULL, `device_id` varchar(32) DEFAULT NULL COMMENT '检测设备ID', `is_abnormal` tinyint DEFAULT '0' COMMENT '是否异常', PRIMARY KEY (`id`), KEY `idx_elder_time` (`elder_id`,`measure_time`) USING BTREE, KEY `idx_abnormal` (`is_abnormal`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;特别建立了复合索引和异常状态索引,使健康数据查询速度提升8倍。
3. 核心功能实现
3.1 健康监测闭环流程
数据采集端:
- 蓝牙血压计/血糖仪通过Android APP传输数据
- 手动录入模式支持语音输入(集成科大讯飞SDK)
数据分析引擎:
// 血压异常检测算法示例 public HealthWarning checkBloodPressure(HealthRecord record) { // 获取老人基准值(根据年龄、病史计算) Elder elder = elderService.getById(record.getElderId()); int baseHigh = elder.getBaseBloodHigh(); int baseLow = elder.getBaseBloodLow(); String[] values = record.getValue().split("/"); int currentHigh = Integer.parseInt(values[0]); int currentLow = Integer.parseInt(values[1]); if (currentHigh > baseHigh + 30 || currentLow > baseLow + 20) { return new HealthWarning(record.getId(), "血压过高预警", 1); } else if (currentHigh < 90 || currentLow < 60) { return new HealthWarning(record.getId(), "血压过低预警", 2); } return null; }- 预警通知:
- 短信+APP推送双通道
- 采用责任链模式逐级通知(护理员→护士长→院长)
3.2 用药管理系统
解决老人漏服、错服药品的痛点:
智能分药提醒:
- 对接药房系统获取电子处方
- 生成每日用药清单(含药品图片和服用动画演示)
服药确认机制:
- NFC药盒扫描确认
- 人脸识别服药验证
- 未按时服药自动通知家属
药品库存预警:
SELECT medicine_id, SUM(stock) as total FROM pharmacy_stock WHERE expiry_date > NOW() GROUP BY medicine_id HAVING total < 10;4. 系统部署方案
4.1 私有化部署配置
中小型养老院推荐配置:
- 服务器:4核8G内存(阿里云ECS共享型n4)
- 带宽:5Mbps(支持50个并发)
- 存储:500GB高效云盘(健康数据保留5年)
4.2 安全防护措施
数据加密:
- 健康数据AES-256加密存储
- 传输层HTTPS+国密SM2算法
权限控制:
@PreAuthorize("hasRole('NURSE') && @permission.checkDept(#deptId)") public List<Elder> getEldersByDept(Long deptId) { return elderMapper.selectByDept(deptId); }- 审计日志:
- 关键操作留痕(谁在什么时间修改了哪些健康数据)
- 日志异地备份(每日凌晨2点同步到OSS)
5. 典型问题解决方案
5.1 多终端数据同步冲突
当Web端和APP端同时修改健康数据时,采用乐观锁策略:
@Transactional public boolean updateHealthRecord(HealthRecord record) { HealthRecord old = healthRecordMapper.selectById(record.getId()); if (old.getVersion() != record.getVersion()) { throw new OptimisticLockingFailureException("数据已被他人修改"); } record.setVersion(record.getVersion() + 1); return healthRecordMapper.updateById(record) > 0; }5.2 高并发下的通知风暴
当同时触发多个老人异常预警时:
- 使用Guava RateLimiter做限流
- 重要通知进入RabbitMQ优先级队列
- 非关键通知合并发送(每小时汇总报告)
5.3 Android端内存泄漏
在健康数据展示页面特别注意:
- 使用WeakReference持有Activity引用
- 在onDestroy中取消RxJava订阅
- 大图加载使用Glide.with(context).clear()
6. 项目扩展方向
物联网设备集成:
- 智能床垫(离床监测)
- 室内定位手环(防走失)
- 环境传感器(温湿度/空气质量)
AI健康助手:
- 基于历史数据的疾病预测
- 用药禁忌自动检查
- 语音交互式健康咨询
家属协作功能:
- 探视预约系统
- 在线缴费对接医保
- 远程视频关怀
这个系统在实际部署中需要特别注意护理人员的使用培训——我们开发了模拟操作模式,让工作人员先在测试环境练习所有流程。另外建议养老院配备1-2名专职系统管理员,负责日常数据维护和设备管理。