Files
Shixun/README.md
T
2026-07-31 12:27:41 +08:00

7.1 KiB
Raw Blame History

智慧医院 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。

一、业务后端启动

先决条件:JDK 17+(默认 H2 内存库,无需安装 MySQL)。

  1. 启动(默认 H2):
    cd smart-hospital
    ./mvnw spring-boot:run       # macOS/Linux
    mvnw.cmd spring-boot:run     # Windows
    
  2. 可选 H2 控制台:http://localhost:8080/h2-console
    JDBC URL:jdbc:h2:mem:smart_hospital,用户 sa,密码留空。
  3. 若要用本地 MySQL:
    # 先建库 smart_hospital,改 application-mysql.yml 账号密码后:
    mvnw.cmd spring-boot:run -Dspring-boot.run.profiles=mysql
    
  4. 启动后 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 双重校验

推荐演示路径

  1. 依次启动:ai-service:8001 → smart-hospital:8080 → frontend:5173
  2. 使用 doctor1 / pass123 登录
  3. 影像诊断:上传图片 → AI 诊断 → 查看标注图与报告
  4. 电子病历:诊断填写「高血压/肺炎」等 → 查看护理/治疗/随访与 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(jjwt 0.12),无状态会话;密码 BCrypt 存储
  • 引入统一 Result<T> + GlobalExceptionHandler,Controller 不再直接抛 RuntimeException
  • AsyncConfig 声明 ThreadPoolTaskExecutor Bean,替换 AIDiagnosisService 里手动 Executors.newFixedThreadPool(5)
  • AiProperties / StorageProperties 落地 application.yml 里原本"悬空"的配置
  • UserRepository.findByUsername / existsByUsername 替换原 findAll().stream() 全表登录
  • 删除 templates/ 与 PageController,Thymeleaf 服务端渲染完全被 Vue SPA 替换
  • 前端影像轮询增加 30 次上限 + onBeforeUnmount 清理,修复原页面死循环风险

六、验证清单

  1. 后端 mvnw package 通过(当前工程已验证 BUILD SUCCESS)
  2. 前端 npm run dev 启动成功后访问 5173
  3. 用 admin/admin123 登录 → 能看到「用户管理」菜单
  4. 用 doctor1/pass123 登录 → 访问 /users 显示 403
  5. 患者页新增-编辑-删除全流程可用;点「档案」可查看 360° 关联数据
  6. 影像页上传图片 → 新建记录 → 点「AI 诊断」→ 状态从 PENDING → ANALYZING → COMPLETED;筛选状态/类型可用
  7. 病历页新建后弹出 AI 辅助决策 dialog,显示治疗/用药/风险/冲突四类内容
  8. 预约挂号页可新建预约并切换状态(确认/完成/取消)
  9. 右上角用户菜单 → 修改密码 → 成功后需重新登录