1. 项目背景与核心价值
社区独居老人健康管理是个越来越受关注的社会议题。随着老龄化程度加深,很多子女在外工作无法时刻照顾家中老人,而传统的社区服务又存在信息不对称、响应不及时等问题。去年我在参与某社区数字化改造项目时,就亲眼见过居委会工作人员还在用纸质表格登记老人需求,效率低且容易遗漏。
这个基于SpringBoot的系统正是为了解决这些痛点而生。它把家政服务、医疗保健等老人最需要的功能整合到一个平台上,让社区工作人员可以高效管理,也让家属能远程了解老人状况。技术上选择SpringBoot框架,主要是考虑到社区级应用的快速迭代需求——居委会通常没有专业IT团队,系统必须做到开箱即用、维护简单。
2. 系统架构设计解析
2.1 技术选型决策
后端采用SpringBoot 2.7 + MyBatis Plus组合,这个选择经过了实际验证。在初期技术调研时,我们对比过纯Spring MVC方案,发现要手动配置的内容太多。而SpringBoot的自动配置特性让居委会工作人员也能通过简单培训完成基础运维。数据库选用MySQL 8.0,主要是考虑社区数据量通常在10万条记录以内,MySQL完全够用且运维成本低。
前端用了Thymeleaf模板引擎而非前后端分离架构,这是经过实地考察后的决定。很多社区服务中心的电脑还是老旧的Windows 7系统,浏览器版本较低,Vue/React在这些环境经常出现兼容性问题。Thymeleaf直接服务端渲染的方案虽然"不够时髦",但保证在所有机器上都能稳定运行。
2.2 核心功能模块
系统主要包含四大功能模块:
- 健康档案管理:持续记录血压、血糖等指标,自动生成变化曲线
- 服务预约系统:对接家政公司和社区卫生站,实现服务在线预约
- 紧急呼叫功能:老人一键触发,自动通知家属和社区工作人员
- 数据分析看板:用ECharts可视化展示社区老人整体健康状况
特别要说明的是健康数据采集方案。我们测试过智能设备直连的方案,但很多老人不习惯戴智能手环。最终采用"人工录入+设备可选"的混合模式:社区工作人员定期上门测量,同时系统也开放接口支持欧姆龙等主流血压计的数据导入。
3. 关键实现细节剖析
3.1 多角色权限控制
系统涉及三类用户角色:
- 社区管理员(最高权限)
- 家属(可查看关联老人数据)
- 服务提供商(只能看到与自己相关的订单)
这里用Spring Security实现了基于RBAC的权限控制。特别注意到了一个易错点:家属权限需要精确到老人个体。解决方案是在权限注解里加入动态参数校验:
java复制@PreAuthorize("hasRole('FAMILY') and @permissionCheck.canAccessUser(principal, #elderId)")
public HealthData getHealthData(Long elderId) {
//...
}
3.2 服务预约的状态机设计
家政服务订单包含以下状态:
mermaid复制stateDiagram
[*] --> PENDING
PENDING --> CONFIRMED: 服务商确认
PENDING --> CANCELLED: 用户取消
CONFIRMED --> COMPLETED: 服务完成
CONFIRMED --> CANCELLED: 服务商取消
实现时没有用复杂的状态机框架,而是采用了枚举+策略模式的轻量级方案:
java复制public enum OrderStatus {
PENDING {
public boolean canChangeTo(OrderStatus newStatus) {
return newStatus == CONFIRMED || newStatus == CANCELLED;
}
},
//...其他状态定义
}
3.3 健康预警算法
系统会根据历史数据自动识别异常指标。初期尝试了机器学习模型,但实际运行发现社区医疗数据量太小,效果不理想。最终采用基于临床医学指南的规则引擎:
java复制public class BloodPressureRule implements HealthRule {
@Override
public WarningLevel check(HealthRecord record) {
if (record.getSystolic() > 180 || record.getDiastolic() > 110) {
return WarningLevel.URGENT;
}
//...其他规则
}
}
4. 部署与运维实战
4.1 服务器配置建议
经过多个社区的实际部署,总结出以下配置经验:
- 用户数<100的社区:2核4G云服务器足够
- 必须配置定时任务自动备份数据库
- 推荐使用Docker部署,方便后期升级
典型的docker-compose.yml配置:
yaml复制version: '3'
services:
app:
image: openjdk:11-jre
ports:
- "8080:8080"
volumes:
- ./application.yml:/config/application.yml
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
4.2 常见问题排查
问题1:服务商接收不到订单通知
- 检查RabbitMQ是否正常运行
- 验证短信/邮件网关配置
- 查看服务商是否设置了通知屏蔽
问题2:健康数据曲线显示异常
- 确认时间区间参数格式(前端传参常见问题)
- 检查MySQL时区配置
- 验证ECharts版本兼容性
5. 项目扩展方向
现有系统已经可以满足基础需求,但根据实际使用反馈,还有几个值得优化的方向:
- 移动端适配:很多家属希望能在微信小程序查看数据,可以考虑开发小程序版本
- 智能预警升级:接入更多智能设备数据,实现跌倒检测等AI功能
- 服务评价体系:建立家政服务人员的星级评分机制
在技术架构上,如果后续需要扩展到区县级管理平台,可以考虑引入Spring Cloud组件实现多社区系统联动。不过要特别注意,社区级应用永远应该把稳定性放在技术先进性之前——这是我们实施多个项目后最深刻的体会。