温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片!
1. 项目背景与意义
随着人口老龄化进程加快以及慢性疾病患者数量持续增长,康复医疗资源供需矛盾日益突出。传统康复训练管理多依赖纸质记录和人工排班,存在训练计划制定不科学、执行进度难追踪、患者依从性评估困难等问题。开发一套基于 Spring Boot 和 Vue3 的康复训练计划管理系统,能够帮助康复医师、治疗师和患者实现训练计划的数字化、个性化与闭环管理,提升康复治疗的质量与效率。
2. 系统需求分析
2.1 功能需求
系统面向管理员、康复医师、治疗师和患者四类角色,核心功能包括:
- 用户管理:支持多角色账号注册、登录、权限分配与个人信息维护。
- 患者档案管理:维护患者基本信息、病史、康复评估记录和影像资料。
- 训练计划管理:医师根据评估结果制定个性化训练方案,支持训练项目、频次、强度、周期等参数配置。
- 训练执行与打卡:患者按计划执行训练并提交打卡记录,支持图文反馈。
- 进度跟踪与评估:治疗师实时查看患者执行情况,定期更新康复评估结果。
- 数据统计与报表:提供训练完成率、康复效果趋势等可视化统计图表。
- 消息通知:训练提醒、计划调整通知、评估结果推送等。
2.2 非功能需求
- 安全性:基于 JWT 的身份认证与角色权限控制,敏感数据加密存储。
- 可靠性:关键业务操作具备事务保障,系统支持异常日志记录与告警。
- 易用性:界面简洁清晰,操作流程符合医护人员使用习惯。
- 可扩展性:前后端分离架构,模块化设计,便于后续功能扩展与维护。
3. 系统总体设计
3.1 技术架构
系统采用前后端分离架构,前端基于 Vue3 和 Element Plus 构建单页应用,后端基于 Spring Boot 提供 RESTful API 服务,数据层使用 MySQL 存储业务数据,Redis 用于缓存热点数据与登录会话。
flowchart TD A[Vue3 前端] -->|HTTP/JSON| B[Nginx 反向代理] B --> C[Spring Boot 后端] C --> D[MySQL 数据库] C --> E[Redis 缓存] C --> F[MinIO 文件存储]3.2 功能模块划分
系统按业务域划分为以下核心模块:
- 认证授权模块:登录、登出、Token 刷新、权限校验。
- 患者管理模块:患者档案的增删改查与康复评估记录管理。
- 训练计划模块:计划制定、模板管理、计划调整与审批。
- 训练执行模块:训练打卡、进度记录、异常反馈。
- 统计报表模块:训练数据统计、康复效果分析与导出。
- 系统管理模块:用户管理、角色管理、菜单权限配置。
3.3 数据库设计
系统核心数据表包括用户表、角色表、患者表、训练计划表、训练项目表、打卡记录表、评估记录表等。以下为训练计划相关核心表结构:
| 表名 | 说明 | 关键字段 |
|---|---|---|
| user | 用户表 | id、username、password、role_id、real_name |
| patient | 患者表 | id、user_id、gender、age、diagnosis、phone |
| training_plan | 训练计划表 | id、patient_id、doctor_id、start_date、end_date、status |
| training_item | 训练项目表 | id、plan_id、item_name、frequency、intensity、duration |
| training_record | 打卡记录表 | id、item_id、patient_id、record_date、completed、remark |
| assessment_record | 评估记录表 | id、patient_id、therapist_id、assess_date、score、conclusion |
4. 后端核心实现
4.1 项目结构
后端采用分层架构,按职责划分为 controller、service、mapper、entity、dto 等包,并引入通用响应封装与全局异常处理。
com.rehab ├── controller // REST 接口层 ├── service // 业务逻辑层 ├── mapper // 数据访问层 ├── entity // 数据库实体 ├── dto // 数据传输对象 ├── config // 配置类(安全、跨域、Redis) ├── common // 通用工具与响应封装 └── RehabApplication.java4.2 认证与权限控制
系统使用 Spring Security 结合 JWT 实现无状态认证。用户登录成功后签发 Token,后续请求通过拦截器校验 Token 并解析用户角色,实现接口级权限控制。核心配置如下:
@Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http.csrf().disable() .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS) .and() .authorizeHttpRequests(auth -> auth .requestMatchers("/api/auth/**").permitAll() .requestMatchers("/api/admin/**").hasRole("ADMIN") .requestMatchers("/api/doctor/**").hasAnyRole("DOCTOR", "ADMIN") .requestMatchers("/api/patient/**").hasAnyRole("PATIENT", "THERAPIST", "DOCTOR", "ADMIN") .anyRequest().authenticated() ) .addFilterBefore(jwtAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class); return http.build(); } }4.3 训练计划管理接口
训练计划模块提供计划创建、查询、更新和状态流转接口。以下为创建训练计划的核心 Service 实现:
@Service public class TrainingPlanServiceImpl implements TrainingPlanService { @Autowired private TrainingPlanMapper planMapper; @Autowired private TrainingItemMapper itemMapper; @Override @Transactional public Long createPlan(TrainingPlanCreateDTO dto) { TrainingPlan plan = new TrainingPlan(); BeanUtils.copyProperties(dto, plan); plan.setStatus(PlanStatusEnum.PENDING); plan.setCreateTime(LocalDateTime.now()); planMapper.insert(plan); for (TrainingItemDTO itemDTO : dto.getItems()) { TrainingItem item = new TrainingItem(); BeanUtils.copyProperties(itemDTO, item); item.setPlanId(plan.getId()); itemMapper.insert(item); } return plan.getId(); } }5. 前端核心实现
5.1 项目结构
前端基于 Vue3 组合式 API 和 Vite 构建,使用 Vue Router 管理路由、Pinia 管理全局状态、Axios 发起 HTTP 请求、Element Plus 提供 UI 组件。
src ├── api // 接口请求封装 ├── assets // 静态资源 ├── components // 通用组件 ├── router // 路由配置 ├── stores // Pinia 状态管理 ├── views // 页面视图 ├── utils // 工具函数 └── main.js5.2 登录与权限路由
前端通过路由守卫校验登录状态和用户角色,未登录用户跳转登录页,无权限用户提示无访问权限。核心实现如下:
router.beforeEach((to, from, next) => { const token = localStorage.getItem('token'); if (to.path !== '/login' && !token) { next('/login'); return; } if (token) { const userStore = useUserStore(); if (!userStore.roles.length) { userStore.fetchUserInfo().then(() => { if (to.meta.roles && !to.meta.roles.some(r => userStore.roles.includes(r))) { next('/403'); } else { next(); } }); return; } } next(); });5.3 训练计划页面
训练计划管理页面支持按患者查询计划列表、查看计划详情、新增计划和调整训练项目。以下为计划列表页面的核心代码:
<template> <div class="plan-page"> <el-card> <el-form :inline="true"> <el-form-item label="患者姓名"> <el-input v-model="query.patientName" placeholder="请输入患者姓名" /> </el-form-item> <el-form-item> <el-button type="primary" @click="loadPlans">查询</el-button> <el-button type="success" @click="openCreateDialog">新增计划</el-button> </el-form-item> </el-form> <el-table :data="planList" border stripe> <el-table-column prop="patientName" label="患者" width="120" /> <el-table-column prop="startDate" label="开始日期" width="120" /> <el-table-column prop="endDate" label="结束日期" width="120" /> <el-table-column prop="status" label="状态" width="100"> <template #default="{ row }"> <el-tag :type="statusTag(row.status)">{{ row.status }}</el-tag> </template> </el-table-column> <el-table-column label="操作"> <template #default="{ row }"> <el-button link type="primary" @click="viewDetail(row)">详情</el-button> <el-button link type="warning" @click="openEditDialog(row)">调整</el-button> </template> </el-table-column> </el-table> </el-card> </div> </template>6. 系统测试
6.1 测试策略
系统测试覆盖单元测试、接口测试和前端页面功能测试。后端使用 JUnit 和 Mockito 编写核心业务单元测试,接口层通过 Postman 进行集成验证;前端使用 Vitest 对关键组件和工具函数进行测试。
6.2 核心接口测试用例
| 接口 | 测试场景 | 预期结果 |
|---|---|---|
| POST /api/auth/login | 正确账号密码登录 | 返回 Token 与用户信息 |
| POST /api/auth/login | 错误密码登录 | 返回 401 与错误提示 |
| POST /api/doctor/plans | 医师创建训练计划 | 返回计划 ID,数据库新增记录 |
| GET /api/patient/plans | 患者查询本人计划 | 返回该患者全部计划列表 |
| POST /api/patient/records | 患者提交训练打卡 | 返回打卡记录 ID,状态更新 |
| GET /api/therapist/statistics | 治疗师查询统计报表 | 返回完成率与趋势数据 |
7. 总结与展望
本文设计并实现了一套基于 Spring Boot 和 Vue3 的康复训练计划管理系统,覆盖患者档案、训练计划制定、执行打卡、进度跟踪和统计报表等核心业务环节,实现了康复训练管理的数字化闭环。系统采用前后端分离架构,具备良好的可维护性和可扩展性。
后续可从以下方向继续优化:引入康复知识库辅助智能推荐训练方案;结合可穿戴设备自动采集训练数据;增加视频指导与远程康复功能;基于历史数据构建康复效果预测模型,进一步提升系统的智能化水平。