1. 项目概述:大健康养老公寓管理系统的技术架构解析
最近在养老行业数字化升级过程中,我参与开发了一套基于SpringBoot+Vue3+MyBatis的全栈管理系统。这个系统专门针对养老公寓的日常运营管理需求设计,实现了从老人入住到健康监测的全流程数字化管理。采用前后端分离架构,后端使用Java技术栈,前端选用Vue3组合式API,数据库采用MySQL 8.0,整套系统目前已在多个养老机构落地运行。
这个系统最核心的价值在于将传统的养老机构管理流程标准化、数字化。通过信息化手段解决了纸质档案易丢失、健康数据难追踪、护理排班效率低等行业痛点。特别在疫情后时期,无接触的健康监测和家属远程关怀功能显得尤为重要。
2. 技术栈选型与架构设计
2.1 后端技术栈深度解析
选择SpringBoot 2.7作为后端框架主要考虑其快速启动特性和丰富的Starter依赖。实际开发中我们特别使用了:
- Spring Security OAuth2实现RBAC权限控制
- Spring Batch处理每日健康数据批处理
- Spring Cache Redis实现热点数据缓存
数据库访问层采用MyBatis-Plus 3.5,其强大的CRUD接口和Lambda表达式大大简化了DAO层开发。一个典型的老人信息查询示例:
java复制public Page<Resident> getResidentsByCondition(ResidentQuery query) {
return lambdaQuery()
.eq(query.getStatus() != null, Resident::getStatus, query.getStatus())
.like(StringUtils.isNotBlank(query.getName()), Resident::getName, query.getName())
.between(query.getStartDate() != null && query.getEndDate() != null,
Resident::getCheckInDate, query.getStartDate(), query.getEndDate())
.page(new Page<>(query.getPageNum(), query.getPageSize()));
}
2.2 前端架构设计要点
Vue3组合式API相比Options API更适合复杂管理系统开发。我们主要采用以下技术方案:
- Pinia替代Vuex作为状态管理
- Element Plus + Vant组件库混合使用
- Axios封装实现自动化错误处理
特别开发了可复用的健康数据看板组件:
vue复制<script setup>
const { bloodData, loading } = useHealthData(residentId)
onMounted(() => {
initEcharts()
})
</script>
2.3 数据库设计关键表结构
MySQL数据库设计中几个核心表需要特别注意:
- 老人信息表(resident_info):包含基础信息、紧急联系人、医保信息等
- 健康记录表(health_record):每日测量的血压、血糖等指标
- 护理计划表(care_plan):包含护理等级、特殊注意事项
sql复制CREATE TABLE `health_record` (
`id` bigint NOT NULL AUTO_INCREMENT,
`resident_id` bigint NOT NULL COMMENT '老人ID',
`measure_time` datetime NOT NULL COMMENT '测量时间',
`blood_pressure` varchar(20) COMMENT '血压值',
`blood_sugar` decimal(5,1) COMMENT '血糖值',
`temperature` decimal(3,1) COMMENT '体温',
`nurse_id` bigint COMMENT '测量护士',
PRIMARY KEY (`id`),
INDEX `idx_resident` (`resident_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
3. 核心功能模块实现
3.1 老人健康监测系统
健康数据采集采用双通道设计:
- 护士手动录入:通过Pad端应用实时上传
- 智能设备对接:与血压仪、血糖仪等IoT设备直连
数据展示采用Echarts实现动态趋势图,关键实现点:
- 使用WebSocket推送实时数据更新
- 异常数据阈值预警(血压>140/90自动标红)
- 周报/月报PDF生成功能
3.2 智能排班管理模块
基于以下规则实现自动排班:
- 护理等级匹配(1对1、1对多)
- 护士技能资质校验
- 工作时长均衡算法
排班冲突检测逻辑示例:
java复制public boolean checkScheduleConflict(Long nurseId, LocalDateTime start, LocalDateTime end) {
return scheduleMapper.exists(
new QueryWrapper<Schedule>()
.eq("nurse_id", nurseId)
.lt("start_time", end)
.gt("end_time", start)
);
}
3.3 家属远程关怀系统
开发了微信小程序端供家属使用,主要功能:
- 老人每日健康数据查看
- 视频通话预约系统
- 电子围栏异常出入预警
采用JWT+短信验证码双重认证确保信息安全,关键配置:
yaml复制security:
oauth2:
client:
wechat:
client-id: ${WECHAT_APPID}
client-secret: ${WECHAT_SECRET}
scope: snsapi_userinfo
4. 系统部署与性能优化
4.1 生产环境部署方案
推荐使用Docker Compose部署:
yaml复制services:
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
volumes:
- mysql_data:/var/lib/mysql
redis:
image: redis:6-alpine
ports:
- "6379:6379"
backend:
build: ./backend
ports:
- "8080:8080"
depends_on:
- mysql
- redis
4.2 性能调优实战经验
- MySQL优化:
- 老人信息表增加全文索引
- 大表按养老楼栋分片
- JVM参数调整:
bash复制JAVA_OPTS="-Xms2g -Xmx2g -XX:+UseG1GC" - 前端懒加载优化:
javascript复制const modules = import.meta.glob('./views/**/*.vue')
5. 典型问题排查指南
5.1 健康数据同步异常
常见现象:设备数据未及时更新到系统
排查步骤:
- 检查WebSocket连接状态
- 验证设备授权token是否过期
- 查看消息队列积压情况
5.2 排班规则冲突
典型错误:护士同时被分配到多个房间
解决方案:
- 增加事务锁机制
- 实现排班预检查接口
- 添加历史冲突记录分析
5.3 高并发场景处理
在预约探访高峰期可能出现的问题:
- 使用Redis分布式锁
java复制String lockKey = "visit:lock:" + residentId; boolean locked = redisTemplate.opsForValue() .setIfAbsent(lockKey, "1", 30, TimeUnit.SECONDS); - 数据库查询添加限流
- 热点数据本地缓存
6. 项目演进方向
在实际运营中我们持续迭代的几个重点:
- 接入更多智能健康监测设备
- 开发跌倒检测等AI算法
- 与医保系统对接实现线上结算
- 构建养老机构运营分析大屏
特别在数据分析方面,我们正在将Hadoop生态引入到健康大数据分析中,未来可以实现个性化的健康预警预测。