1. 项目背景与核心价值
空巢老人健康管理是当前社会亟需解决的现实问题。随着人口老龄化加剧,子女外出工作导致大量老人独自生活,他们的健康状况往往无法得到及时关注。传统健康管理系统存在使用门槛高、操作复杂等问题,而微信小程序凭借其无需安装、即用即走的特性,成为解决这一痛点的理想载体。
这个基于SpringBoot和Vue的前后端分离系统,通过微信小程序为老人提供便捷的健康数据记录功能,同时为子女和管理员提供实时监控界面。系统采用现代化技术栈实现,具有以下核心优势:
- 低使用门槛:老人只需会使用微信,无需学习复杂操作
- 实时监控:子女可随时查看父母健康数据,异常情况自动提醒
- 多端协同:小程序+管理后台的组合满足不同角色需求
- 技术先进性:前后端分离架构保证系统可维护性和扩展性
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 技术架构设计
2.1 整体架构方案
系统采用经典的三层架构设计,各层职责明确:
code复制[微信小程序] ←HTTP/HTTPS→ [SpringBoot后端] ←JDBC→ [MySQL数据库]
↑
│ WebSocket
↓
[Vue管理后台]
前端部分包含两个独立项目:
- 微信小程序:使用原生小程序开发,面向老人用户
- 管理后台:基于Vue+ElementUI,面向子女和管理员
后端采用SpringBoot 2.7.x版本,主要模块划分:
health-api:RESTful接口模块health-service:业务逻辑实现health-dao:数据持久层health-common:公共工具类
2.2 关键技术选型
小程序端技术栈:
- 基础框架:微信小程序原生开发
- UI组件:Vant Weapp + 自定义组件
- 图表库:wx-charts
- 网络请求:封装wx.request
后端技术栈:
- 核心框架:SpringBoot 2.7.12
- 安全框架:Spring Security + JWT
- 数据库:MySQL 8.0 + MyBatis-Plus
- 缓存:Redis 6.2
- 消息队列:RabbitMQ 3.9(用于异步处理告警通知)
- 文件存储:七牛云OSS
管理后台技术栈:
- 基础框架:Vue 2.6 + Vue Router + Vuex
- UI组件:ElementUI 2.15
- 图表库:ECharts 5.3
- HTTP客户端:axios
提示:技术选型时特别考虑了微信小程序的兼容性问题,避免使用需要polyfill的ES6+特性
3. 核心功能实现
3.1 健康数据采集模块
这是系统的核心功能模块,包含以下子功能:
- 手动录入功能:
javascript复制// 小程序端血压录入示例
Page({
data: {
systolic: null, // 收缩压
diastolic: null, // 舒张压
pulse: null // 脉搏
},
submitData() {
wx.request({
url: 'https://api.example.com/health/data',
method: 'POST',
data: {
type: 'blood_pressure',
value: `${this.data.systolic}/${this.data.diastolic}`,
pulse: this.data.pulse,
timestamp: new Date().getTime()
},
success(res) {
wx.showToast({ title: '记录成功' })
}
})
}
})
- 设备自动同步:
- 通过蓝牙连接智能设备(如血压计、血糖仪)
- 使用微信小程序蓝牙API实现数据传输
- 数据格式转换中间件处理不同厂商协议
- 数据校验机制:
- 后端采用Hibernate Validator进行数据校验
- 异常值检测算法(基于历史数据3σ原则)
3.2 实时监控与告警
实现方案:
- 数据存储:时序数据库存储健康指标
- 分析引擎:基于规则引擎Drools实现异常检测
- 通知服务:
- 微信模板消息(子女端)
- SMS短信(紧急情况)
- 语音电话(严重异常)
核心规则示例:
java复制// 血压异常检测规则
rule "HighBloodPressureAlert"
when
$r : HealthRecord(type == "blood_pressure",
value.split("/")[0] > 140)
then
insert(new Alert($r.getUserId(), "高血压预警",
"收缩压"+$r.getValue()));
end
3.3 多端数据同步方案
采用混合同步策略保证数据一致性:
| 场景 | 同步方式 | 频率 | 触发条件 |
|---|---|---|---|
| 小程序提交 | HTTP POST | 实时 | 用户操作 |
| 管理后台查询 | WebSocket | 准实时 | 数据变更 |
| 历史数据 | 定时任务 | 每天 | 凌晨2点 |
| 紧急通知 | 推送 | 立即 | 规则触发 |
4. 开发实践与优化
4.1 微信小程序性能优化
- 分包加载策略:
json复制// app.json配置
{
"pages": [
"pages/index/index",
"pages/logs/logs"
],
"subpackages": [
{
"root": "packageHealth",
"pages": [
"bloodPressure/index",
"bloodSugar/index"
]
}
]
}
- 数据缓存策略:
- 高频访问数据:wx.setStorageSync
- 大型资源:wx.downloadFile + 本地缓存
- 时效性数据:HTTP缓存头控制
- 渲染优化技巧:
- 使用hidden替代wx:if减少节点切换开销
- 复杂列表使用recycle-view组件
- 避免在scroll-view中嵌套大量元素
4.2 前后端分离实践
接口规范设计:
java复制@RestController
@RequestMapping("/api/health")
public class HealthController {
@GetMapping("/records")
public Result<List<HealthRecord>> getRecords(
@RequestParam String userId,
@RequestParam @DateTimeFormat(pattern="yyyy-MM-dd") Date start,
@RequestParam @DateTimeFormat(pattern="yyyy-MM-dd") Date end) {
// 实现逻辑
}
@PostMapping("/record")
public Result<Void> addRecord(@Valid @RequestBody HealthRecordDTO dto) {
// 实现逻辑
}
}
跨域解决方案:
java复制@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.allowedHeaders("*")
.maxAge(3600);
}
}
4.3 安全防护措施
- 认证与授权:
- JWT + Spring Security实现无状态认证
- 角色权限模型:RBAC(基于角色的访问控制)
- 接口级别权限控制:@PreAuthorize注解
- 数据安全:
- 敏感字段加密:采用SM4国密算法
- 传输安全:HTTPS + 数据签名
- 防SQL注入:MyBatis参数化查询
- 小程序安全:
- 请求签名验证
- 敏感接口调用频率限制
- 用户行为异常检测
5. 部署与运维方案
5.1 生产环境部署
服务器配置建议:
| 组件 | 规格 | 数量 | 备注 |
|---|---|---|---|
| 应用服务器 | 4核8G | 2 | 负载均衡 |
| MySQL | 8核16G | 1 | 主从复制 |
| Redis | 4核8G | 1 | 哨兵模式 |
| Nginx | 2核4G | 1 | 反向代理 |
Docker部署示例:
dockerfile复制# SpringBoot应用Dockerfile
FROM openjdk:11-jre
COPY target/health-system.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
5.2 监控与日志
- 监控体系:
- 基础设施:Prometheus + Grafana
- 应用性能:SkyWalking
- 业务指标:自定义埋点
- 日志方案:
- 日志收集:ELK Stack
- 日志规范:
xml复制<!-- logback-spring.xml示例 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
- 告警规则:
- 接口错误率 > 1%
- 平均响应时间 > 500ms
- JVM内存使用 > 80%
6. 项目扩展与演进
6.1 功能扩展方向
- 智能分析增强:
- 引入机器学习模型预测健康风险
- 集成可穿戴设备数据
- 用药提醒与追踪
- 社交功能:
- 老人社区交流
- 志愿者帮扶系统
- 在线问诊对接
- 多平台支持:
- 支付宝小程序版本
- 微信公众号接入
- Android/iOS原生应用
6.2 技术演进路线
- 架构升级:
- 微服务化改造(Spring Cloud)
- 服务网格(Istio)
- 事件驱动架构
- 性能优化:
- 引入CDN加速静态资源
- 数据库分库分表
- 多级缓存策略
- 智能化运维:
- AIOps异常检测
- 自动化扩缩容
- 混沌工程实践
在实际开发过程中,我们遇到了微信小程序网络请求并发限制的问题,通过封装请求队列和重试机制解决。另一个值得分享的经验是健康数据波动分析算法,最初采用固定阈值,后来改进为基于个人历史数据的动态基线算法,大幅降低了误报率
