776 lines
31 KiB
Markdown
776 lines
31 KiB
Markdown
# 智慧医院 AI 影像诊断与电子病历辅助决策系统
|
||
|
||
## 项目详细文档
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 项目名称 | 智慧医院 AI 影像诊断与电子病历辅助决策系统(Smart Hospital) |
|
||
| 项目类型 | 高校/实训教学演示级 Web 应用 |
|
||
| 文档版本 | 1.0 |
|
||
| 文档日期 | 2026-07-27 |
|
||
| 代码根目录 | `smart-hospital/` |
|
||
|
||
---
|
||
|
||
## 目录
|
||
|
||
1. [项目主题](#一项目主题)
|
||
2. [需求分析](#二需求分析)
|
||
3. [项目功能](#三项目功能)
|
||
4. [技术栈](#四技术栈)
|
||
5. [系统架构](#五系统架构)
|
||
6. [目录与模块结构](#六目录与模块结构)
|
||
7. [核心业务流程](#七核心业务流程)
|
||
8. [数据模型概要](#八数据模型概要)
|
||
9. [接口与权限](#九接口与权限)
|
||
10. [部署与运行](#十部署与运行)
|
||
11. [演示账号与推荐路径](#十一演示账号与推荐路径)
|
||
12. [设计说明与边界](#十二设计说明与边界)
|
||
|
||
---
|
||
|
||
## 一、项目主题
|
||
|
||
### 1.1 主题定位
|
||
|
||
本项目以 **「智慧医院」** 为主题,围绕医院日常诊疗中的两条核心链路展开:
|
||
|
||
1. **医学影像检查 → AI 辅助读片 → 结构化诊断报告**
|
||
2. **电子病历录入 → AI 辅助决策(治疗 / 用药 / 护理 / 随访)→ 知识库引用**
|
||
|
||
在传统 HIS(医院信息系统)业务能力之上,引入 **计算机视觉(YOLO)** 与 **大语言模型 / RAG 知识检索**,形成「业务系统 + AI 微服务」的混合架构,用于实训教学、课程答辩与功能演示。
|
||
|
||
### 1.2 建设目标
|
||
|
||
| 目标 | 说明 |
|
||
|------|------|
|
||
| 业务闭环 | 覆盖登录鉴权、患者档案、影像检查、病历、预约挂号、用户管理等完整业务面 |
|
||
| AI 可演示 | 影像侧可真实跑 YOLO 权重检测;报告与决策侧可接 DeepSeek 等 OpenAI 兼容大模型,也可模板降级 |
|
||
| 前后端分离 | Vue 3 SPA + Spring Boot REST + FastAPI AI 服务,职责清晰、便于分模块讲解 |
|
||
| 可离线实训 | 默认 H2 内存库,无需强制安装 MySQL;AI 服务不可用时业务仍可降级运行 |
|
||
| 安全可讲 | JWT 无状态认证、角色权限(ADMIN / DOCTOR / RADIOLOGIST)、BCrypt 密码、前后端双重路由守卫 |
|
||
|
||
### 1.3 应用场景(教学/演示)
|
||
|
||
- 影像科:上传胸片等影像 → 一键 AI 诊断 → 查看 YOLO 标注框、置信度与分段报告
|
||
- 临床医生:书写病历(如含「高血压 / 肺炎 / 糖尿病 / 结节」等关键词)→ 获取治疗、护理、随访建议与知识库来源
|
||
- 管理员:配置 LLM 接口、管理知识库文档、切换/上传 YOLO 权重、管理系统用户
|
||
- 挂号窗口:预约登记与状态流转(预约 → 确认 → 完成 / 取消 / 未到诊)
|
||
|
||
### 1.4 项目声明
|
||
|
||
> 本系统输出内容 **仅供教学实训与辅助决策演示**,**不能替代执业医师的正式诊断与医疗文书**。涉及真实患者数据与临床部署时,需另行满足医疗信息化、隐私与合规要求。
|
||
|
||
---
|
||
|
||
## 二、需求分析
|
||
|
||
### 2.1 背景与问题
|
||
|
||
传统教学型医院管理系统往往只做 CRUD 与简单页面,存在以下不足:
|
||
|
||
| 问题 | 表现 |
|
||
|------|------|
|
||
| 业务割裂 | 患者、影像、病历、预约缺少统一档案视图 |
|
||
| AI 仅「假数据」 | 随机文案或关键字匹配,无法展示真实检测框与模型链路 |
|
||
| 技术栈陈旧 | 早期版本以 Thymeleaf 服务端渲染为主,前后端耦合 |
|
||
| 权限薄弱 | 仅 Session 判断登录,缺少角色级接口保护 |
|
||
| 不可降级 | 外部依赖一旦失败,整条演示链路中断 |
|
||
|
||
本项目在原始 Spring Boot + Thymeleaf 原型基础上完成改造,形成当前 **前后端分离 + AI 微服务** 版本,以解决上述问题。
|
||
|
||
### 2.2 用户角色与诉求
|
||
|
||
| 角色 | 代码枚举 | 核心诉求 |
|
||
|------|----------|----------|
|
||
| 系统管理员 | `ADMIN` | 用户管理、AI 大模型配置、YOLO 权重管理、全局运维 |
|
||
| 临床医生 | `DOCTOR` | 患者与病历、辅助决策、预约、查看影像报告 |
|
||
| 影像医师 | `RADIOLOGIST` | 影像登记、上传、触发 AI 诊断、审阅标注图与报告 |
|
||
| 访客/未登录 | — | 仅可访问登录页 |
|
||
|
||
### 2.3 功能需求(按优先级)
|
||
|
||
#### P0 — 必须具备
|
||
|
||
| 编号 | 需求 | 验收要点 |
|
||
|------|------|----------|
|
||
| F-01 | 用户登录 / 登出 / 修改密码 | JWT 签发与校验;密码 BCrypt;修改后需重新登录 |
|
||
| F-02 | 患者档案 CRUD + 搜索分页 | 姓名等关键字;360° 档案关联影像 / 病历 / 预约 |
|
||
| F-03 | 影像检查 CRUD + 文件上传 | 支持 X_RAY / CT / MRI / ULTRASOUND |
|
||
| F-04 | AI 影像诊断 | 异步状态机 `PENDING → ANALYZING → COMPLETED / ERROR`;可查看结果 |
|
||
| F-05 | 电子病历 CRUD + AI 辅助决策 | 治疗 / 用药 / 护理 / 随访 / 风险 / 冲突 / RAG 来源 |
|
||
| F-06 | 角色权限控制 | 前端路由 `meta.roles` + 后端 `@PreAuthorize` |
|
||
|
||
#### P1 — 重要增强
|
||
|
||
| 编号 | 需求 | 验收要点 |
|
||
|------|------|----------|
|
||
| F-07 | 预约挂号全流程 | 状态流转、按日筛选、统计卡片 |
|
||
| F-08 | 仪表盘可视化 | KPI、近 7 日趋势、检查类型/诊断状态分布 |
|
||
| F-09 | AI 对话助手 | 多轮对话、历史持久化(文件)、Markdown 渲染 |
|
||
| F-10 | 知识库管理 | 文档增删改查,供 RAG / 决策引用 |
|
||
| F-11 | AI 配置(管理员) | LLM Base URL / API Key / Model 配置,并同步至 FastAPI |
|
||
| F-12 | YOLO 权重管理(管理员) | 权重列表、激活、上传统计 |
|
||
|
||
#### P2 — 体验与健壮性
|
||
|
||
| 编号 | 需求 | 验收要点 |
|
||
|------|------|----------|
|
||
| F-13 | AI 服务不可用时业务降级 | Spring 侧本地规则模拟,页面仍可演示 |
|
||
| F-14 | 弹窗 / 抽屉不被布局裁切 | `append-to-body`、限高滚动、表单左右留白协调 |
|
||
| F-15 | 报告分段可读 | 影像所见 / 诊断印象 / 建议 / 声明分块展示 |
|
||
| F-16 | 页面切换过渡与仪表盘体验 | 路由过渡、半透明卡片叠背景图等 |
|
||
|
||
### 2.4 非功能需求
|
||
|
||
| 类别 | 要求 | 项目落地 |
|
||
|------|------|----------|
|
||
| 性能 | 诊断异步,避免阻塞 HTTP 线程 | `@Async` + 线程池;前端轮询(有上限,卸载时清理) |
|
||
| 可用性 | 无 MySQL 亦可演示 | 默认 H2 内存库 + `DataInitializer` 种子数据 |
|
||
| 安全 | 接口鉴权、密码加密、CORS 白名单 | Spring Security + JWT;`cors.allowed-origins` |
|
||
| 可维护 | 统一响应与异常 | `Result<T>` + `GlobalExceptionHandler` |
|
||
| 可扩展 | AI 与业务解耦 | FastAPI 独立进程;配置 `ai.service.base-url` |
|
||
| 兼容 | 大模型厂商可切换 | OpenAI 兼容协议(DeepSeek / Qwen 等) |
|
||
|
||
### 2.5 约束与假设
|
||
|
||
- 面向 **实训 / 课程设计 / 答辩演示**,非生产级 HIS 或 PACS 替代品。
|
||
- 医学影像以常见图片格式为主(JPG / PNG 等),DICOM 完整工作流未作为重点。
|
||
- YOLO 权重与检测类别为演示级配置,输出置信度与框选结果需医师复核。
|
||
- H2 内存模式下进程退出即丢库内业务数据;AI 配置与对话历史另存 `./data/ai/` 文件,可跨重启保留。
|
||
|
||
---
|
||
|
||
## 三、项目功能
|
||
|
||
### 3.1 功能总览
|
||
|
||
```
|
||
┌─────────────────────────────────────────────────────────────────┐
|
||
│ 智慧医院功能全景 │
|
||
├──────────────┬──────────────┬──────────────┬────────────────────┤
|
||
│ 身份与权限 │ 业务主数据 │ 诊疗业务 │ 智能能力 │
|
||
├──────────────┼──────────────┼──────────────┼────────────────────┤
|
||
│ 登录 / JWT │ 患者管理 │ 影像检查 │ YOLO 影像检测 │
|
||
│ 修改密码 │ 用户管理 │ 电子病历 │ AI 诊断报告 │
|
||
│ 角色菜单 │ 知识库文档 │ 预约挂号 │ EMR 辅助决策 + RAG │
|
||
│ 头像上传 │ │ 仪表盘统计 │ AI 对话助手 │
|
||
│ │ │ │ LLM / YOLO 管理端 │
|
||
└──────────────┴──────────────┴──────────────┴────────────────────┘
|
||
```
|
||
|
||
### 3.2 功能模块详述
|
||
|
||
#### 3.2.1 登录与个人中心
|
||
|
||
- 账号密码登录,返回 JWT 与用户信息,前端 `localStorage` 持久化(约 24h 过期,见 `jwt.expiration-ms`)。
|
||
- 右上角用户菜单:修改密码、更换头像。
|
||
- 未登录访问业务页自动跳转登录;已登录访问登录页跳转仪表盘。
|
||
|
||
#### 3.2.2 仪表盘(Dashboard)
|
||
|
||
- 多项 KPI:患者数、影像数、病历数、预约数及状态分布等。
|
||
- 近 7 天业务趋势折线 / 柱状图(ECharts)。
|
||
- 检查类型分布、诊断状态分布饼图。
|
||
- 快捷入口与待办提示,便于演示导览。
|
||
|
||
#### 3.2.3 患者管理
|
||
|
||
- 分页列表、关键字搜索(姓名等)。
|
||
- 新增 / 编辑 / 删除:姓名、性别、年龄、身份证、电话、地址、既往病史。
|
||
- **患者 360° 档案**(抽屉):基本信息 + 关联影像记录、电子病历、预约列表及计数统计。
|
||
- 表单弹窗采用顶栏标签与等宽两列布局,避免左右留白不均。
|
||
|
||
#### 3.2.4 影像诊断
|
||
|
||
- 检查登记:选择患者、检查类型(X 光 / CT / MRI / 超声)、部位、上传影像或填写路径。
|
||
- 列表筛选:关键字、状态、检查类型;状态 KPI 卡片可快速过滤。
|
||
- **AI 诊断**:触发后状态流转;完成后展示:
|
||
- 诊断印象与置信度仪表盘
|
||
- 原始影像 vs YOLO 标注图对比
|
||
- 影像所见(分段段落)
|
||
- 建议(编号列表)
|
||
- 检测明细表(类别、置信度、bbox)
|
||
- 完整报告(报告头 / 所见 / 印象 / 建议 / 声明 分块卡片)
|
||
- AI 服务不可用时,业务后端可降级为本地规则结果,保证演示不断链。
|
||
|
||
#### 3.2.5 电子病历
|
||
|
||
- 病历录入:患者、就诊日期、主诉、现病史、体格检查、诊断、治疗方案、用药、随访。
|
||
- 保存后可自动弹出 **AI 辅助决策**;列表亦可再次查看。
|
||
- 决策内容包括:治疗建议表、用药建议表、护理建议、随访计划、风险评估、药物冲突提示、知识库引用(RAG)。
|
||
- 诊断含「高血压 / 糖尿病 / 肺炎 / 结节」等关键词时,模板/RAG 效果更明显;配置 LLM 后由大模型增强。
|
||
|
||
#### 3.2.6 预约挂号
|
||
|
||
- 新建 / 编辑 / 删除预约。
|
||
- 状态流转:预约 → 确认 → 完成 / 取消 / 未到诊。
|
||
- 按日期筛选、统计卡片、详情抽屉。
|
||
|
||
#### 3.2.7 AI 助手
|
||
|
||
- 对话式问答界面,支持 Markdown 渲染(`marked` + `DOMPurify` 消毒)。
|
||
- 对话历史持久化到业务端 `./data/ai/chat-history.json`(不依赖 H2 是否清空)。
|
||
|
||
#### 3.2.8 知识库
|
||
|
||
- 知识文档的新增、编辑、查看、启用/停用。
|
||
- 与 AI 服务 RAG 管线配合;AI 服务内置医学相关 Markdown 知识片段(如高血压、肺炎、肺结节、糖尿病等)。
|
||
|
||
#### 3.2.9 AI 配置(仅管理员)
|
||
|
||
- 配置 OpenAI 兼容接口:Base URL、API Key、Model 等。
|
||
- 设置持久化到 `./data/ai/settings.json`。
|
||
- 启动或保存时通过同步机制推送到 FastAPI(`llm_config`),使报告生成与决策走大模型而非纯模板。
|
||
|
||
#### 3.2.10 YOLO 权重管理(仅管理员)
|
||
|
||
- 查看当前权重、模式(real / demo)、推理统计。
|
||
- 上传 / 激活权重文件,支撑影像检测能力切换。
|
||
|
||
#### 3.2.11 用户管理(仅管理员)
|
||
|
||
- 用户 CRUD:账号、密码、姓名、角色、科室、电话、邮箱、启用状态。
|
||
- 头像设置;禁止停用当前登录账号等业务保护。
|
||
- 前端菜单与路由按角色隐藏/拦截;后端接口权限校验。
|
||
|
||
### 3.3 前端页面与路由对照
|
||
|
||
| 路由 | 页面 | 权限 |
|
||
|------|------|------|
|
||
| `/login` | 登录 | 公开 |
|
||
| `/dashboard` | 仪表盘 | 已登录 |
|
||
| `/patients` | 患者管理 | 已登录 |
|
||
| `/imaging` | 影像诊断 | 已登录 |
|
||
| `/emrs` | 电子病历 | 已登录 |
|
||
| `/appointments` | 预约挂号 | 已登录 |
|
||
| `/ai-assistant` | AI 助手 | 已登录 |
|
||
| `/ai-knowledge` | 知识库 | 已登录 |
|
||
| `/ai-settings` | AI 配置 | ADMIN |
|
||
| `/ai-yolo` | YOLO 权重 | ADMIN |
|
||
| `/users` | 用户管理 | ADMIN |
|
||
| `/403` | 无权访问 | 已登录 |
|
||
|
||
### 3.4 与早期版本的能力对比
|
||
|
||
| 维度 | 早期(PROJECT_REPORT 描述) | 当前实现 |
|
||
|------|------------------------------|----------|
|
||
| 前端 | Thymeleaf + Bootstrap | Vue 3 + Element Plus + ECharts |
|
||
| 安全 | HttpSession | Spring Security + JWT |
|
||
| AI 影像 | 规则/随机模拟 | FastAPI + YOLO 实检 + 报告(LLM 或模板) |
|
||
| 决策 | 关键字规则 | RAG + 可选 LLM,失败回退模板 |
|
||
| 业务广度 | 患者 / 影像 / 病历 | 增加预约、仪表盘增强、知识库、AI 配置、YOLO 管理 |
|
||
| 数据库 | 依赖 MySQL | 默认 H2,可选 MySQL profile |
|
||
|
||
---
|
||
|
||
## 四、技术栈
|
||
|
||
### 4.1 总体一览
|
||
|
||
| 层级 | 技术 | 版本(项目实际) | 用途 |
|
||
|------|------|------------------|------|
|
||
| 前端框架 | Vue | 3.5.10 | SPA |
|
||
| 构建工具 | Vite | 5.4.8 | 开发与打包 |
|
||
| UI | Element Plus | 2.8.4 | 组件库 |
|
||
| 状态 | Pinia | 2.2.4 | 用户会话等 |
|
||
| 路由 | Vue Router | 4.4.5 | 前端路由与守卫 |
|
||
| HTTP | Axios | 1.7.7 | 调用 `/api` |
|
||
| 图表 | ECharts + vue-echarts | 5.5.1 / 7.0.3 | 仪表盘 |
|
||
| 文档渲染 | marked + DOMPurify | 18.x / 3.x | AI 对话 Markdown |
|
||
| 业务后端 | Spring Boot | 3.3.4 | REST / 安全 / JPA |
|
||
| 语言 | Java | 17 | 后端 |
|
||
| 安全 | Spring Security + jjwt | 0.12.6 | JWT |
|
||
| ORM | Spring Data JPA / Hibernate | 随 Boot 3.3 | 持久化 |
|
||
| 数据库 | H2(默认)/ MySQL(可选) | — | 业务数据 |
|
||
| 工具 | Lombok | — | 实体简化 |
|
||
| 构建 | Maven(含 mvnw) | — | 后端构建 |
|
||
| AI 服务 | FastAPI + Uvicorn | ≥0.110 / ≥0.27 | AI 微服务 |
|
||
| 视觉 | Ultralytics YOLO + OpenCV | — | 检测与标注 |
|
||
| 预处理 | OpenCV / 可选 MONAI | — | 影像预处理 |
|
||
| LLM / RAG | LangChain 生态 + httpx | ≥0.2 | 报告、决策、检索 |
|
||
| 大模型 | DeepSeek 等 OpenAI 兼容 API | 可配置 | 文本生成 |
|
||
|
||
### 4.2 前端技术细节
|
||
|
||
- **工程**:`frontend/`,`type: module`,Vite 开发服务器默认 **5173**。
|
||
- **代理**:开发态将 `/api` 代理到 `http://localhost:8080`。
|
||
- **自动导入**:`unplugin-auto-import`、`unplugin-vue-components` 简化 Element Plus 使用。
|
||
- **布局**:`BasicLayout` 侧边栏 + 顶栏 + 主内容滚动;Dialog/Drawer 普遍 `append-to-body`,避免被 `overflow` 裁切。
|
||
- **生产构建**:`npm run build` 产物可置于 Nginx 或由 Spring 静态资源 / SPA 回退托管。
|
||
|
||
### 4.3 业务后端技术细节
|
||
|
||
- **工程**:`smart-hospital/`(Maven 子工程)。
|
||
- **端口**:`8080`。
|
||
- **包结构**:`controller` / `service` / `repository` / `model` / `dto` / `security` / `config` / `common`。
|
||
- **统一响应**:`Result<T>`,`code == 0` 表示成功;全局异常处理业务码与校验错误。
|
||
- **异步诊断**:`AsyncConfig` 线程池 + `AIDiagnosisService` 异步分析。
|
||
- **文件存储**:影像与头像本地目录 `./uploads/`;AI 设置与聊天 `./data/ai/`。
|
||
- **AI 客户端**:`AiServiceClient` 调用 FastAPI;失败时服务内降级逻辑保证可用性。
|
||
- **LLM 同步**:`AiLlmSyncRunner` / `AiSettingsService` 将管理端配置同步到 AI 微服务。
|
||
|
||
### 4.4 AI 微服务技术细节
|
||
|
||
- **工程**:`ai-service/`,Python 3.10+(开发环境实测 3.12 可用)。
|
||
- **端口**:`8001`。
|
||
- **主要路由模块**:
|
||
- `/health` — 健康与能力探测
|
||
- `/imaging/analyze` — YOLO 检测 + 报告
|
||
- `/report/imaging`、`/report/decision` — 报告与决策
|
||
- `/rag/*` — 知识检索与写入
|
||
- `/yolo/*` — 权重与统计
|
||
- `/llm-config` — 运行时 LLM 配置
|
||
- **报告策略**:
|
||
- 启用 LLM:结构化 JSON(所见 / 印象 / 建议),再由模板拼接分段 `full_report`
|
||
- 未启用或失败:模板 / 规则文案
|
||
- **内置知识**:`app/knowledge/` 下高血压、糖尿病、肺炎、肺结节、骨折等 Markdown 片段。
|
||
- **权重目录**:`data/weights/`(如 `best.pt`、`yolov8n.pt` 等演示权重)。
|
||
|
||
### 4.5 数据库与配置
|
||
|
||
| 项 | 默认(H2) | MySQL Profile |
|
||
|----|------------|---------------|
|
||
| 连接 | `jdbc:h2:mem:smart_hospital` | `application-mysql.yml` |
|
||
| 控制台 | `/h2-console`(sa / 空密码) | — |
|
||
| DDL | `hibernate.ddl-auto: update` | 同左或按环境调整 |
|
||
| 种子数据 | `DataInitializer` 自动写入 | 同左 |
|
||
|
||
其他关键配置(`application.yml`):
|
||
|
||
- `jwt.*`:密钥、过期时间、Header 前缀
|
||
- `cors.allowed-origins`:含 `http://localhost:5173`
|
||
- `ai.service.base-url`:`http://127.0.0.1:8001`
|
||
- `imaging.storage.path`:`./uploads/images`
|
||
- 上传限制:业务 multipart 最大约 500MB(兼容 YOLO 权重上传)
|
||
|
||
---
|
||
|
||
## 五、系统架构
|
||
|
||
### 5.1 逻辑架构
|
||
|
||
```
|
||
┌──────────────────────┐
|
||
│ 浏览器 Vue SPA │
|
||
│ localhost:5173 │
|
||
└──────────┬───────────┘
|
||
│ /api (Vite 代理)
|
||
▼
|
||
┌──────────────────────┐
|
||
│ Spring Boot 业务端 │
|
||
│ localhost:8080 │
|
||
│ JWT / JPA / 文件 │
|
||
└──────────┬───────────┘
|
||
│ HTTP(可选)
|
||
┌─────────────┴─────────────┐
|
||
▼ ▼
|
||
┌────────────────┐ ┌─────────────────┐
|
||
│ H2 / MySQL │ │ FastAPI AI 服务 │
|
||
│ 业务库 │ │ localhost:8001 │
|
||
└────────────────┘ │ YOLO / RAG / LLM│
|
||
└────────┬────────┘
|
||
│
|
||
┌──────────────┼──────────────┐
|
||
▼ ▼ ▼
|
||
本地权重 pt 知识 Markdown 外部 LLM API
|
||
```
|
||
|
||
### 5.2 调用关系原则
|
||
|
||
1. **浏览器只访问业务后端**(开发时经 Vite 代理),不直接依赖 AI 端口(管理端部分 YOLO 能力可经 Spring 转发)。
|
||
2. **AI 能力集中在 FastAPI**;Spring 负责鉴权、落库、任务状态与降级。
|
||
3. **配置单向同步**:管理端保存 LLM 配置 → 持久化 JSON → 同步 AI 运行时。
|
||
4. **失败可降级**:AI 超时或宕机时,诊断与决策仍可返回规则/模板结果。
|
||
|
||
### 5.3 部署形态(实训推荐)
|
||
|
||
| 进程 | 命令摘要 | 端口 |
|
||
|------|----------|------|
|
||
| AI | `uvicorn app.main:app --host 0.0.0.0 --port 8001` | 8001 |
|
||
| 业务 | `mvnw spring-boot:run` 或 `java -jar …jar` | 8080 |
|
||
| 前端 | `npm run dev` | 5173 |
|
||
|
||
生产可仅保留 AI + 业务 jar,前端 `build` 后由 Nginx 或 Spring 静态托管。
|
||
|
||
---
|
||
|
||
## 六、目录与模块结构
|
||
|
||
```
|
||
smart-hospital/ # 仓库根
|
||
├── README.md # 启动与接口速览
|
||
├── PROJECT_REPORT.md # 早期探索报告(历史参考)
|
||
├── 项目详细文档.md # 本文件
|
||
├── smart-hospital.sql # MySQL 初始化脚本(可选)
|
||
├── data/ai/ # 根目录侧 AI 文件(若存在)
|
||
├── uploads/ # 根目录侧上传样例(若存在)
|
||
│
|
||
├── frontend/ # Vue 3 前端
|
||
│ ├── package.json
|
||
│ ├── vite.config.js
|
||
│ └── src/
|
||
│ ├── api/ # 按域划分的 HTTP 封装
|
||
│ ├── layouts/ # BasicLayout
|
||
│ ├── router/ # 路由与守卫
|
||
│ ├── stores/ # Pinia(用户)
|
||
│ ├── utils/ # 标签映射、Markdown 等
|
||
│ └── views/ # 各业务页面
|
||
│
|
||
├── smart-hospital/ # Spring Boot 业务后端
|
||
│ ├── pom.xml
|
||
│ ├── mvnw / mvnw.cmd
|
||
│ ├── data/ai/ # settings.json、chat-history.json
|
||
│ ├── uploads/ # 影像、头像、标注图
|
||
│ └── src/main/
|
||
│ ├── java/com/hospital/ # 应用代码
|
||
│ └── resources/
|
||
│ ├── application.yml
|
||
│ ├── application-mysql.yml
|
||
│ └── static/ # 可选内嵌前端构建产物
|
||
│
|
||
└── ai-service/ # FastAPI AI 微服务
|
||
├── requirements.txt
|
||
├── README.md
|
||
├── data/weights/ # YOLO 权重
|
||
├── samples/ # 示例影像
|
||
└── app/
|
||
├── main.py
|
||
├── api/ # imaging / report / rag / yolo / llm_config
|
||
├── services/ # yolo、report、rag、llm
|
||
├── schemas/
|
||
└── knowledge/ # RAG 文档片段
|
||
```
|
||
|
||
---
|
||
|
||
## 七、核心业务流程
|
||
|
||
### 7.1 AI 影像诊断流程
|
||
|
||
```
|
||
医生/技师 新建影像记录(上传图片)
|
||
│
|
||
▼
|
||
状态 = PENDING
|
||
│
|
||
│ 点击「AI 诊断」
|
||
▼
|
||
状态 = ANALYZING ──异步──► Spring AIDiagnosisService
|
||
│ │
|
||
│ ▼
|
||
│ 调用 FastAPI /imaging/analyze
|
||
│ │
|
||
│ ┌─────────┴─────────┐
|
||
│ ▼ ▼
|
||
│ YOLO 检测框 报告生成
|
||
│ 绘制标注图 (LLM 或模板)
|
||
│ │ │
|
||
│ └─────────┬─────────┘
|
||
│ ▼
|
||
│ 写 AIDiagnosisResult
|
||
│ 更新 ImagingRecord
|
||
▼
|
||
状态 = COMPLETED / ERROR
|
||
│
|
||
▼
|
||
前端轮询 / 打开报告弹窗
|
||
(所见 · 印象 · 建议 · 检测明细 · 完整报告)
|
||
```
|
||
|
||
### 7.2 电子病历辅助决策流程
|
||
|
||
```
|
||
医生填写并保存病历(含诊断等字段)
|
||
│
|
||
▼
|
||
Spring DecisionSupportService
|
||
│
|
||
▼
|
||
FastAPI /report/decision
|
||
│
|
||
├─ RAG 检索 knowledge + 业务知识库
|
||
├─ 可选 LLM 生成结构化建议
|
||
└─ 失败则按诊断关键词走模板
|
||
│
|
||
▼
|
||
返回治疗 / 用药 / 护理 / 随访 / 风险 / 冲突 / 来源
|
||
│
|
||
▼
|
||
前端 Dialog 分节展示
|
||
```
|
||
|
||
### 7.3 LLM 配置同步
|
||
|
||
```
|
||
管理员在「AI 配置」保存
|
||
│
|
||
▼
|
||
写入 ./data/ai/settings.json
|
||
│
|
||
▼
|
||
调用 AI 服务 llm_config 接口
|
||
│
|
||
▼
|
||
FastAPI 运行时启用/更新 LLM
|
||
(报告与决策从模板切到大模型)
|
||
```
|
||
|
||
---
|
||
|
||
## 八、数据模型概要
|
||
|
||
### 8.1 主要业务实体
|
||
|
||
| 实体 | 表名 | 要点 |
|
||
|------|------|------|
|
||
| User | users | 角色 ADMIN/DOCTOR/RADIOLOGIST,BCrypt 密码,科室等 |
|
||
| Patient | patients | 姓名、性别、年龄、证件、联系方式、既往史 |
|
||
| ImagingRecord | imaging_records | 患者、医生、检查类型、部位、图像 URL、状态、AI 摘要字段 |
|
||
| AIDiagnosisResult | ai_diagnosis_results | 诊断文本、置信度、所见、建议、检测 JSON、标注图、完整报告、引擎与是否降级 |
|
||
| ElectronicMedicalRecord | electronic_medical_records | 主诉至随访全字段 + 关联患者/医生 |
|
||
| DecisionSupportRecord 等 | 决策相关表 | 辅助决策落库(按实现) |
|
||
| Appointment | appointments | 预约日、科室、事由、状态机 |
|
||
| AiKnowledgeDoc | 知识文档表 | 标题、分类、正文、启用 |
|
||
| AiSettings / 聊天 | 文件为主 | `settings.json`、`chat-history.json` |
|
||
|
||
### 8.2 影像状态机
|
||
|
||
| 状态 | 含义 |
|
||
|------|------|
|
||
| PENDING | 已登记,待诊断 |
|
||
| ANALYZING | 诊断进行中 |
|
||
| COMPLETED | 成功,可查看报告 |
|
||
| ERROR | 失败 |
|
||
|
||
### 8.3 检查类型
|
||
|
||
`X_RAY` · `CT` · `MRI` · `ULTRASOUND`
|
||
|
||
### 8.4 关系简图
|
||
|
||
```
|
||
User ──┬──< ImagingRecord >── Patient
|
||
│ │
|
||
│ └── AIDiagnosisResult
|
||
│
|
||
├──< ElectronicMedicalRecord >── Patient
|
||
│ │
|
||
│ └── Decision / Suggestions(按实现落库)
|
||
│
|
||
└──< Appointment >── Patient
|
||
```
|
||
|
||
---
|
||
|
||
## 九、接口与权限
|
||
|
||
### 9.1 统一响应
|
||
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"message": "OK",
|
||
"data": {}
|
||
}
|
||
```
|
||
|
||
`code != 0` 时,前端 Axios 拦截器统一 `ElMessage` 提示。
|
||
|
||
### 9.2 业务 REST 一览(节选)
|
||
|
||
| 方法 | 路径 | 说明 | 权限 |
|
||
|------|------|------|------|
|
||
| POST | `/api/auth/login` | 登录 | 公开 |
|
||
| GET | `/api/auth/me` | 当前用户 | 已登录 |
|
||
| POST | `/api/auth/change-password` | 修改密码 | 已登录 |
|
||
| GET | `/api/stats/overview` | 统计概览 | 已登录 |
|
||
| * | `/api/patients/**` | 患者 CRUD / profile | 已登录 |
|
||
| * | `/api/imaging/**` | 影像 CRUD / 上传 | 已登录 |
|
||
| POST | `/api/ai-diagnosis/analyze/{id}` | 触发诊断 | 已登录 |
|
||
| GET | `/api/ai-diagnosis/result/{id}` | 诊断结果 | 已登录 |
|
||
| * | `/api/emrs/**` | 病历 CRUD | 已登录 |
|
||
| GET | `/api/emrs/{id}/ai-suggestions` | 辅助决策 | 已登录 |
|
||
| * | `/api/appointments/**` | 预约 CRUD / 状态 | 已登录 |
|
||
| * | `/api/users/**` | 用户管理 | ADMIN |
|
||
| * | AI 管理 / 聊天 / 知识库等 | 见对应 Controller | 已登录或 ADMIN |
|
||
|
||
### 9.3 AI 微服务接口(节选)
|
||
|
||
| 方法 | 路径 | 说明 |
|
||
|------|------|------|
|
||
| GET | `/health` | 健康检查 |
|
||
| POST | `/imaging/analyze` | 检测 + 报告 |
|
||
| POST | `/report/decision` | 病历决策 |
|
||
| POST | `/report/imaging` | 单独报告 |
|
||
| POST | `/rag/query` | 知识问答 |
|
||
| * | `/yolo/*` | 权重与统计 |
|
||
| * | `/llm-config` | 运行时 LLM 配置 |
|
||
|
||
完整 OpenAPI:`http://127.0.0.1:8001/docs`。
|
||
|
||
---
|
||
|
||
## 十、部署与运行
|
||
|
||
### 10.1 环境要求
|
||
|
||
| 组件 | 要求 |
|
||
|------|------|
|
||
| JDK | 17+ |
|
||
| Node.js | 18+ |
|
||
| Python | 3.10+(推荐 3.11/3.12) |
|
||
| 可选 | MySQL 8.x;NVIDIA GPU(非必须,CPU 可跑) |
|
||
|
||
### 10.2 启动顺序(推荐)
|
||
|
||
```text
|
||
1) ai-service :8001
|
||
2) smart-hospital :8080
|
||
3) frontend :5173
|
||
```
|
||
|
||
#### AI 服务
|
||
|
||
```bash
|
||
cd ai-service
|
||
python -m venv .venv
|
||
# Windows: .venv\Scripts\activate
|
||
pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu
|
||
pip install -r requirements.txt
|
||
# 可选:配置 .env 中 LLM_API_KEY
|
||
uvicorn app.main:app --host 0.0.0.0 --port 8001
|
||
```
|
||
|
||
#### 业务后端
|
||
|
||
```bash
|
||
cd smart-hospital
|
||
mvnw.cmd spring-boot:run
|
||
# 或
|
||
java -jar target/smart-hospital-1.0.0.jar
|
||
```
|
||
|
||
MySQL 模式:
|
||
|
||
```bash
|
||
mvnw.cmd spring-boot:run -Dspring-boot.run.profiles=mysql
|
||
```
|
||
|
||
#### 前端
|
||
|
||
```bash
|
||
cd frontend
|
||
npm install
|
||
npm run dev
|
||
```
|
||
|
||
浏览器访问:`http://localhost:5173`。
|
||
|
||
### 10.3 健康检查
|
||
|
||
| 服务 | 地址 |
|
||
|------|------|
|
||
| 前端 | http://localhost:5173 |
|
||
| 业务 API | http://localhost:8080/api/... |
|
||
| H2 控制台 | http://localhost:8080/h2-console |
|
||
| AI 健康 | http://127.0.0.1:8001/health |
|
||
| AI 文档 | http://127.0.0.1:8001/docs |
|
||
|
||
---
|
||
|
||
## 十一、演示账号与推荐路径
|
||
|
||
### 11.1 内置账号(DataInitializer)
|
||
|
||
| 用户名 | 密码 | 角色 | 说明 |
|
||
|--------|------|------|------|
|
||
| admin | admin123 | ADMIN | 用户管理、AI 配置、YOLO 权重 |
|
||
| doctor1 | pass123 | DOCTOR | 临床业务主演示账号 |
|
||
| radio1 | radio123 | RADIOLOGIST | 影像相关演示 |
|
||
|
||
### 11.2 推荐演示剧本
|
||
|
||
1. 使用 `doctor1 / pass123` 登录,浏览仪表盘 KPI 与图表。
|
||
2. **患者管理**:查看列表 → 打开 360° 档案。
|
||
3. **影像诊断**:新建检查并上传样例图 → AI 诊断 → 对比原图/标注图 → 阅读分段完整报告。
|
||
4. **电子病历**:新建病历,诊断填写「高血压」或「肺炎」→ 查看 AI 建议与知识库引用。
|
||
5. **预约挂号**:新建预约并切换状态。
|
||
6. 切换 `admin`:进入 AI 配置(可填 DeepSeek Key)、YOLO 权重、用户管理。
|
||
7. 对比:关闭 AI 服务后再次诊断,观察 **降级** 是否仍返回结果。
|
||
|
||
### 11.3 验证清单(节选)
|
||
|
||
- [ ] 三端均能启动,5173 可登录
|
||
- [ ] admin 可见用户管理;doctor1 访问 `/users` 为 403
|
||
- [ ] 患者增删改与档案抽屉正常
|
||
- [ ] 影像 AI 状态能到 COMPLETED,报告分段清晰
|
||
- [ ] 病历 AI 建议弹窗含多类内容
|
||
- [ ] 预约状态可流转
|
||
- [ ] 修改密码后需重新登录
|
||
|
||
---
|
||
|
||
## 十二、设计说明与边界
|
||
|
||
### 12.1 关键设计取舍
|
||
|
||
| 取舍 | 原因 |
|
||
|------|------|
|
||
| 默认 H2 | 降低实训环境门槛,开箱即演示 |
|
||
| AI 独立进程 | 隔离 Python 视觉/LLM 依赖,避免撑爆 Java 工程 |
|
||
| JWT 无状态 | 适配前后端分离与多端调用 |
|
||
| LLM 可关 | 无 Key 时用模板/RAG,保证答辩可演示 |
|
||
| 报告强制分段拼接 | 避免大模型输出「墙文本」影响阅读 |
|
||
| Dialog append-to-body | Element Plus 2.8 默认不挂 body,易被布局 overflow 裁切 |
|
||
|
||
### 12.2 已知边界(非缺陷说明)
|
||
|
||
- 非完整 PACS/RIS/HIS 产品,无医保、收费、电子签名、CA 等模块。
|
||
- YOLO 类别与权重为演示级,不保证临床敏感性/特异性。
|
||
- H2 内存库重启丢失业务表数据;需持久化请改用 MySQL profile。
|
||
- 大模型与外部 API 受网络、额度、延迟影响;超时有配置上限。
|
||
- 早期 `PROJECT_REPORT.md` 描述的是改造前架构,**以本文档与当前代码为准**。
|
||
|
||
### 12.3 后续可扩展方向(建议)
|
||
|
||
- DICOM 解析与序列阅片
|
||
- 报告 PDF 导出与医师电子签收工作流
|
||
- 更细粒度的科室/数据权限与操作审计
|
||
- 向量库(如 Chroma/FAISS)替换简易 RAG
|
||
- Docker Compose 一键拉起三端
|
||
- 接口自动化测试与 CI
|
||
|
||
---
|
||
|
||
## 附录 A:技术栈版本速查表
|
||
|
||
| 名称 | 版本 |
|
||
|------|------|
|
||
| Spring Boot | 3.3.4 |
|
||
| Java | 17 |
|
||
| jjwt | 0.12.6 |
|
||
| Vue | 3.5.10 |
|
||
| Vite | 5.4.8 |
|
||
| Element Plus | 2.8.4 |
|
||
| Pinia | 2.2.4 |
|
||
| Vue Router | 4.4.5 |
|
||
| Axios | 1.7.7 |
|
||
| ECharts | 5.5.1 |
|
||
| FastAPI | ≥0.110 |
|
||
| Ultralytics | requirements 中指定 |
|
||
| LangChain | ≥0.2 |
|
||
|
||
## 附录 B:文档维护
|
||
|
||
| 项 | 说明 |
|
||
|----|------|
|
||
| 本文档路径 | `项目详细文档.md`(仓库根目录) |
|
||
| 快速启动 | 见 `README.md` |
|
||
| AI 专项 | 见 `ai-service/README.md` |
|
||
| 历史探索 | 见 `PROJECT_REPORT.md`(可能过时) |
|
||
|
||
---
|
||
|
||
**文档结束**
|