9b8b8b57b395531c8af95fcb930fe80a3671b36a
智慧医院 AI 影像诊断与电子病历辅助决策系统
混合架构:Spring Boot 3(业务 / JWT)+ FastAPI AI 微服务(YOLO / MONAI / LangChain RAG / DeepSeek)+ Vue 3(Element Plus + ECharts)。
目录结构
smart-hospital/
├── smart-hospital/ # 业务后端 Maven 项目(Spring Boot 3.3)
├── ai-service/ # AI 微服务(FastAPI + YOLO + LangChain RAG)
├── frontend/ # 前端 Vue 3 项目
├── smart-hospital.sql # 数据库初始化脚本
└── PROJECT_REPORT.md # 早期探索汇报
〇、AI 微服务启动(推荐先启)
先决条件:Python 3.10+。
cd ai-service
python -m venv .venv
.venv\Scripts\activate # Windows
# source .venv/bin/activate # macOS/Linux
# 建议先装 CPU 版 torch(避免 CUDA 包体积过大)
pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu
pip install -r requirements.txt
copy .env.example .env # 可填 DeepSeek/Qwen 的 LLM_API_KEY
uvicorn app.main:app --host 0.0.0.0 --port 8001
说明:
.venv、frontend/node_modules、smart-hospital/target为可重建依赖,不入库; 删掉后按上列命令重新安装即可。源码 + 医学权重精简后约数十 MB。
- 健康检查:http://127.0.0.1:8001/health
- Swagger:http://127.0.0.1:8001/docs
- 未启动 AI 服务时,Spring Boot 会自动降级为本地规则模拟,业务仍可用。
- 详见
ai-service/README.md。
一、业务后端启动
先决条件:JDK 17+(默认 H2 内存库,无需安装 MySQL)。
- 启动(默认 H2):
cd smart-hospital ./mvnw spring-boot:run # macOS/Linux mvnw.cmd spring-boot:run # Windows - 可选 H2 控制台:
http://localhost:8080/h2-console
JDBC URL:jdbc:h2:mem:smart_hospital,用户sa,密码留空。 - 若要用本地 MySQL:
# 先建库 smart_hospital,改 application-mysql.yml 账号密码后: mvnw.cmd spring-boot:run -Dspring-boot.run.profiles=mysql - 启动后
DataInitializer会自动写入测试账号:admin / admin123(角色 ADMIN,可管理用户)doctor1 / pass123(角色 DOCTOR)radio1 / radio123(角色 RADIOLOGIST)
后端监听 http://localhost:8080,业务前缀 /api/**。
AI 服务地址配置:ai.service.base-url(默认 http://127.0.0.1:8001)。
H2 为内存库,进程退出后数据清空;每次启动会重新初始化演示数据。
二、前端启动
先决条件:Node.js 18+。
cd frontend
npm install
npm run dev
打开 http://localhost:5173,Vite 会把 /api 代理到 http://localhost:8080。
生产构建:
npm run build
产物在 frontend/dist/,可交给 Nginx 或后端静态资源目录托管。
三、主要功能
- 登录(JWT,token 存 localStorage,24h 过期)+ 修改密码
- 仪表盘:患者/影像/病历/预约等多项 KPI + 近 7 天趋势 + 检查类型/诊断状态饼图 + 快捷入口与待办
- 患者管理:分页 + 关键字搜索 + 增删改 + 360° 档案(关联影像 / 病历 / 预约)
- 影像管理:CRUD + 上传 + AI 诊断(FastAPI YOLO 检测框/标注图 + 标准报告,不可用时本地降级)
- 电子病历:CRUD + AI 辅助决策(治疗/护理/随访 + LangChain RAG 知识库引用)
- AI 对话与知识库管理(管理端可配置 DeepSeek 等 OpenAI 兼容接口)
- 预约挂号:新建/编辑/删 + 状态流转(预约→确认→完成/取消/未到诊)+ 按日期筛选
- 用户管理:仅 ADMIN 角色可访问;前端路由守卫 + 后端
@PreAuthorize双重校验
推荐演示路径
- 依次启动:
ai-service:8001→smart-hospital:8080→frontend:5173 - 使用
doctor1 / pass123登录 - 影像诊断:上传图片 → AI 诊断 → 查看标注图与报告
- 电子病历:诊断填写「高血压/肺炎」等 → 查看护理/治疗/随访与 RAG 来源
四、REST 接口一览
| 方法 | 路径 | 说明 | 权限 |
|---|---|---|---|
| POST | /api/auth/login |
登录,返回 {token, user} |
公开 |
| GET | /api/auth/me |
当前用户信息 | 已登录 |
| POST | /api/auth/change-password |
修改密码 | 已登录 |
| GET | /api/stats/overview |
统计概览(KPI + 趋势 + 分布) | 已登录 |
| GET/POST/PUT/DELETE | /api/patients 及 /api/patients/{id} |
患者 CRUD | 已登录 |
| GET | /api/patients/{id}/profile |
患者 360° 档案 | 已登录 |
| GET/POST/PUT/DELETE | /api/imaging 及 /api/imaging/{id} |
影像 CRUD(支持 keyword/status/studyType) | 已登录 |
| POST | /api/imaging/upload |
影像文件上传 | 已登录 |
| POST | /api/ai-diagnosis/analyze/{recordId} |
触发 AI 诊断 | 已登录 |
| GET | /api/ai-diagnosis/result/{recordId} |
查询 AI 诊断结果 | 已登录 |
| GET/POST/PUT/DELETE | /api/emrs 及 /api/emrs/{id} |
病历 CRUD(支持 keyword) | 已登录 |
| GET | /api/emrs/{id}/ai-suggestions |
获取 AI 辅助决策 | 已登录 |
| GET/POST/PUT/DELETE | /api/appointments 及 /api/appointments/{id} |
预约挂号 CRUD | 已登录 |
| PATCH | /api/appointments/{id}/status |
更新预约状态 | 已登录 |
| GET/POST/PUT/DELETE | /api/users 及 /api/users/{id} |
用户管理 | ADMIN |
所有响应格式:
{ "code": 0, "message": "OK", "data": { ... } }
code != 0 由前端 axios 拦截器统一弹 ElMessage。
五、关键改造点
相较于原始 Thymeleaf 单体版本:
- Spring Boot 从 2.7 升级到 3.3.4,
javax.*→jakarta.*,MySQL 驱动坐标改为com.mysql:mysql-connector-j - 引入 Spring Security + JWT(
jjwt0.12),无状态会话;密码 BCrypt 存储 - 引入统一
Result<T>+GlobalExceptionHandler,Controller 不再直接抛RuntimeException AsyncConfig声明ThreadPoolTaskExecutorBean,替换AIDiagnosisService里手动Executors.newFixedThreadPool(5)AiProperties/StorageProperties落地application.yml里原本"悬空"的配置UserRepository.findByUsername/existsByUsername替换原findAll().stream()全表登录- 删除
templates/与PageController,Thymeleaf 服务端渲染完全被 Vue SPA 替换 - 前端影像轮询增加 30 次上限 +
onBeforeUnmount清理,修复原页面死循环风险
六、验证清单
- 后端
mvnw package通过(当前工程已验证 BUILD SUCCESS) - 前端
npm run dev启动成功后访问 5173 - 用
admin/admin123登录 → 能看到「用户管理」菜单 - 用
doctor1/pass123登录 → 访问/users显示 403 - 患者页新增-编辑-删除全流程可用;点「档案」可查看 360° 关联数据
- 影像页上传图片 → 新建记录 → 点「AI 诊断」→ 状态从 PENDING → ANALYZING → COMPLETED;筛选状态/类型可用
- 病历页新建后弹出 AI 辅助决策 dialog,显示治疗/用药/风险/冲突四类内容
- 预约挂号页可新建预约并切换状态(确认/完成/取消)
- 右上角用户菜单 → 修改密码 → 成功后需重新登录
Languages
Vue
49.8%
Python
47.2%
JavaScript
3%