改后端端口
This commit is contained in:
+757
@@ -0,0 +1,757 @@
|
||||
# 智慧医院 API 接口文档
|
||||
|
||||
基于当前源码整理。前端开发走 Vite 代理;联调可直接请求业务后端。
|
||||
|
||||
---
|
||||
|
||||
## 目录
|
||||
|
||||
1. [服务地址](#1-服务地址)
|
||||
2. [通用约定](#2-通用约定)
|
||||
3. [接口一览](#3-接口一览)
|
||||
4. [业务后端详解](#4-业务后端详解)
|
||||
5. [AI 微服务详解](#5-ai-微服务详解)
|
||||
6. [数据模型](#6-数据模型)
|
||||
7. [枚举与错误码](#7-枚举与错误码)
|
||||
|
||||
---
|
||||
|
||||
## 1. 服务地址
|
||||
|
||||
| 服务 | 地址 | 说明 |
|
||||
|------|------|------|
|
||||
| 前端 | `http://localhost:5173` | `/api` 代理到后端 |
|
||||
| 业务后端 | `http://localhost:8080` | 前缀 `/api/**`,JWT 鉴权 |
|
||||
| AI 微服务 | `http://127.0.0.1:8001` | 后端内网调用;Swagger:`/docs` |
|
||||
|
||||
```
|
||||
前端 :5173 → 后端 :8080/api → AI :8001(影像 / 决策 / YOLO)
|
||||
```
|
||||
|
||||
**演示账号**
|
||||
|
||||
| 用户名 | 密码 | 角色 |
|
||||
|--------|------|------|
|
||||
| admin | admin123 | ADMIN |
|
||||
| doctor1 | pass123 | DOCTOR |
|
||||
| radio1 | radio123 | RADIOLOGIST |
|
||||
|
||||
---
|
||||
|
||||
## 2. 通用约定
|
||||
|
||||
### 鉴权
|
||||
|
||||
| 项 | 说明 |
|
||||
|----|------|
|
||||
| Header | `Authorization: Bearer <token>` |
|
||||
| 获取 Token | `POST /api/auth/login` |
|
||||
| 有效期 | 24 小时 |
|
||||
| 公开 | `/api/auth/login`、`/api/auth/logout`、`/uploads/**` |
|
||||
| 需登录 | 其余 `/api/**` |
|
||||
| 仅 ADMIN | `/api/users/**`;AI 配置写操作;知识库写操作;YOLO 管理 |
|
||||
|
||||
### 统一响应(业务后端)
|
||||
|
||||
```json
|
||||
{ "code": 0, "message": "OK", "data": {} }
|
||||
```
|
||||
|
||||
### 分页(业务后端)
|
||||
|
||||
| 参数 | 默认 | 说明 |
|
||||
|------|------|------|
|
||||
| page | 0 | 页码,从 0 开始 |
|
||||
| size | 10 | 每页条数 |
|
||||
|
||||
```json
|
||||
{
|
||||
"content": [],
|
||||
"number": 0,
|
||||
"size": 10,
|
||||
"totalElements": 100,
|
||||
"totalPages": 10
|
||||
}
|
||||
```
|
||||
|
||||
### Content-Type
|
||||
|
||||
| 类型 | 场景 |
|
||||
|------|------|
|
||||
| `application/json` | 普通接口 |
|
||||
| `multipart/form-data` | 文件上传 |
|
||||
|
||||
---
|
||||
|
||||
## 3. 接口一览
|
||||
|
||||
### 3.1 业务后端 `http://localhost:8080`
|
||||
|
||||
**认证**
|
||||
|
||||
| 方法 | 路径 | 权限 | 说明 |
|
||||
|------|------|------|------|
|
||||
| POST | `/api/auth/login` | 公开 | 登录,返回 token |
|
||||
| POST | `/api/auth/logout` | 公开 | 登出 |
|
||||
| GET | `/api/auth/me` | 登录 | 当前用户 |
|
||||
| POST | `/api/auth/change-password` | 登录 | 修改密码 |
|
||||
| POST | `/api/auth/avatar` | 登录 | 上传头像 |
|
||||
|
||||
**统计**
|
||||
|
||||
| 方法 | 路径 | 权限 | 说明 |
|
||||
|------|------|------|------|
|
||||
| GET | `/api/stats/overview` | 登录 | 仪表盘总览 |
|
||||
|
||||
**患者**
|
||||
|
||||
| 方法 | 路径 | 权限 | 说明 |
|
||||
|------|------|------|------|
|
||||
| GET | `/api/patients` | 登录 | 分页列表 |
|
||||
| GET | `/api/patients/{id}` | 登录 | 详情 |
|
||||
| GET | `/api/patients/{id}/profile` | 登录 | 360° 档案 |
|
||||
| POST | `/api/patients` | 登录 | 新建 |
|
||||
| PUT | `/api/patients/{id}` | 登录 | 更新 |
|
||||
| DELETE | `/api/patients/{id}` | 登录 | 删除 |
|
||||
|
||||
**影像**
|
||||
|
||||
| 方法 | 路径 | 权限 | 说明 |
|
||||
|------|------|------|------|
|
||||
| GET | `/api/imaging` | 登录 | 分页列表 |
|
||||
| GET | `/api/imaging/{id}` | 登录 | 详情 |
|
||||
| POST | `/api/imaging` | 登录 | 新建记录 |
|
||||
| PUT | `/api/imaging/{id}` | 登录 | 更新 |
|
||||
| DELETE | `/api/imaging/{id}` | 登录 | 删除 |
|
||||
| POST | `/api/imaging/upload` | 登录 | 上传影像文件 |
|
||||
| POST | `/api/ai-diagnosis/analyze/{recordId}` | 登录 | 提交 AI 诊断 |
|
||||
| GET | `/api/ai-diagnosis/result/{recordId}` | 登录 | 查询诊断结果 |
|
||||
|
||||
**电子病历**
|
||||
|
||||
| 方法 | 路径 | 权限 | 说明 |
|
||||
|------|------|------|------|
|
||||
| GET | `/api/emrs` | 登录 | 分页列表 |
|
||||
| GET | `/api/emrs/{id}` | 登录 | 详情 |
|
||||
| POST | `/api/emrs` | 登录 | 新建(含 AI 决策) |
|
||||
| PUT | `/api/emrs/{id}` | 登录 | 更新 |
|
||||
| DELETE | `/api/emrs/{id}` | 登录 | 删除 |
|
||||
| GET | `/api/emrs/{id}/ai-suggestions` | 登录 | AI 辅助决策 |
|
||||
|
||||
**预约**
|
||||
|
||||
| 方法 | 路径 | 权限 | 说明 |
|
||||
|------|------|------|------|
|
||||
| GET | `/api/appointments` | 登录 | 分页列表 |
|
||||
| GET | `/api/appointments/stats` | 登录 | 统计 |
|
||||
| GET | `/api/appointments/doctors` | 登录 | 医生列表 |
|
||||
| GET | `/api/appointments/{id}` | 登录 | 详情 |
|
||||
| POST | `/api/appointments` | 登录 | 新建 |
|
||||
| PUT | `/api/appointments/{id}` | 登录 | 更新 |
|
||||
| PATCH | `/api/appointments/{id}/status` | 登录 | 变更状态 |
|
||||
| DELETE | `/api/appointments/{id}` | 登录 | 删除 |
|
||||
|
||||
**用户管理**
|
||||
|
||||
| 方法 | 路径 | 权限 | 说明 |
|
||||
|------|------|------|------|
|
||||
| GET | `/api/users` | ADMIN | 分页列表 |
|
||||
| GET | `/api/users/stats` | ADMIN | 统计 |
|
||||
| GET | `/api/users/{id}` | ADMIN | 详情 |
|
||||
| POST | `/api/users` | ADMIN | 新建 |
|
||||
| PUT | `/api/users/{id}` | ADMIN | 更新 |
|
||||
| POST | `/api/users/{id}/avatar` | ADMIN | 上传头像 |
|
||||
| PATCH | `/api/users/{id}/enabled` | ADMIN | 启用/停用 |
|
||||
| DELETE | `/api/users/{id}` | ADMIN | 删除 |
|
||||
|
||||
**AI 对话**
|
||||
|
||||
| 方法 | 路径 | 权限 | 说明 |
|
||||
|------|------|------|------|
|
||||
| POST | `/api/ai/chat` | 登录 | 对话(CHAT / RAG) |
|
||||
| GET | `/api/ai/chat/history` | 登录 | 历史记录 |
|
||||
| DELETE | `/api/ai/chat/history` | 登录 | 清空历史 |
|
||||
|
||||
**AI 管理**
|
||||
|
||||
| 方法 | 路径 | 权限 | 说明 |
|
||||
|------|------|------|------|
|
||||
| GET | `/api/admin/ai-settings` | ADMIN | 大模型配置 |
|
||||
| PUT | `/api/admin/ai-settings` | ADMIN | 保存配置 |
|
||||
| POST | `/api/admin/ai-settings/test` | ADMIN | 连通测试 |
|
||||
| GET | `/api/admin/ai-service/status` | 登录 | AI 服务状态 |
|
||||
| GET | `/api/admin/ai-knowledge` | 登录 | 知识库列表 |
|
||||
| GET | `/api/admin/ai-knowledge/{id}` | 登录 | 知识库详情 |
|
||||
| POST | `/api/admin/ai-knowledge` | ADMIN | 新建文档 |
|
||||
| PUT | `/api/admin/ai-knowledge/{id}` | ADMIN | 更新文档 |
|
||||
| PATCH | `/api/admin/ai-knowledge/{id}/enabled` | ADMIN | 启用/停用 |
|
||||
| DELETE | `/api/admin/ai-knowledge/{id}` | ADMIN | 删除文档 |
|
||||
|
||||
**YOLO 管理(代理 AI 服务)**
|
||||
|
||||
| 方法 | 路径 | 权限 | 说明 |
|
||||
|------|------|------|------|
|
||||
| GET | `/api/admin/yolo/status` | ADMIN | 状态 |
|
||||
| GET | `/api/admin/yolo/weights` | ADMIN | 权重列表 |
|
||||
| POST | `/api/admin/yolo/weights/upload` | ADMIN | 上传权重 |
|
||||
| POST | `/api/admin/yolo/weights/activate` | ADMIN | 激活权重 |
|
||||
| POST | `/api/admin/yolo/weights/deactivate` | ADMIN | 取消激活 |
|
||||
| DELETE | `/api/admin/yolo/weights/{name}` | ADMIN | 逻辑删除 |
|
||||
| POST | `/api/admin/yolo/mode` | ADMIN | 设置模式 |
|
||||
| GET | `/api/admin/yolo/visualization` | ADMIN | 可视化数据 |
|
||||
| POST | `/api/admin/yolo/stats/reset` | ADMIN | 重置统计 |
|
||||
| GET | `/api/admin/yolo/capability` | ADMIN | 能力探测 |
|
||||
|
||||
---
|
||||
|
||||
### 3.2 AI 微服务 `http://127.0.0.1:8001`
|
||||
|
||||
无 JWT,建议仅内网访问。
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| GET | `/health` | 健康检查 |
|
||||
| POST | `/imaging/analyze` | 影像 YOLO 分析 |
|
||||
| POST | `/report/imaging` | 生成影像报告 |
|
||||
| POST | `/report/decision` | EMR 辅助决策 |
|
||||
| POST | `/rag/query` | 知识库问答 |
|
||||
| POST | `/rag/ingest` | 追加知识文档 |
|
||||
| GET | `/rag/stats` | 知识片段数 |
|
||||
| GET | `/llm/config` | LLM 配置 |
|
||||
| POST | `/llm/config` | 更新 LLM 配置 |
|
||||
| GET | `/llm/status` | LLM 状态 |
|
||||
| GET | `/yolo/status` | YOLO 状态 |
|
||||
| GET | `/yolo/weights` | 权重列表 |
|
||||
| POST | `/yolo/weights/upload` | 上传权重 |
|
||||
| POST | `/yolo/weights/activate` | 激活权重 |
|
||||
| POST | `/yolo/weights/deactivate` | 取消激活 |
|
||||
| DELETE | `/yolo/weights/{name}` | 逻辑删除 |
|
||||
| POST | `/yolo/weights/restore` | 恢复权重 |
|
||||
| POST | `/yolo/mode` | 设置模式 |
|
||||
| GET | `/yolo/visualization` | 可视化 |
|
||||
| POST | `/yolo/stats/reset` | 重置统计 |
|
||||
| GET | `/yolo/capability` | 能力探测 |
|
||||
|
||||
---
|
||||
|
||||
## 4. 业务后端详解
|
||||
|
||||
> 以下仅列查询参数与请求体。响应外层均为 `{ code, message, data }`,`data` 结构见 [数据模型](#6-数据模型)。
|
||||
|
||||
### 4.1 认证 `/api/auth`
|
||||
|
||||
#### POST `/api/auth/login`
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| username | string | 是 | 用户名 |
|
||||
| password | string | 是 | 密码 |
|
||||
|
||||
**data:** `{ token, user }` → [User](#user)
|
||||
|
||||
#### POST `/api/auth/change-password`
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| oldPassword | string | 是 | 旧密码 |
|
||||
| newPassword | string | 是 | 新密码,6–64 位 |
|
||||
|
||||
#### POST `/api/auth/avatar`
|
||||
|
||||
| 表单字段 | 类型 | 必填 |
|
||||
|----------|------|------|
|
||||
| file | file | 是 |
|
||||
|
||||
---
|
||||
|
||||
### 4.2 患者 `/api/patients`
|
||||
|
||||
#### GET `/api/patients`
|
||||
|
||||
| 参数 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| page | int | 页码 |
|
||||
| size | int | 每页条数 |
|
||||
| keyword | string | 姓名/电话关键字 |
|
||||
|
||||
#### POST/PUT 请求体
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| name | string | 是 | 姓名 |
|
||||
| gender | string | 是 | MALE / FEMALE / OTHER |
|
||||
| age | int | 是 | 年龄 |
|
||||
| idCard | string | 否 | 身份证 |
|
||||
| phone | string | 否 | 电话 |
|
||||
| address | string | 否 | 地址 |
|
||||
| medicalHistory | string | 否 | 病史 |
|
||||
|
||||
#### GET `/api/patients/{id}/profile`
|
||||
|
||||
**data:** 患者 + 关联影像 / 病历 / 预约列表及计数。
|
||||
|
||||
---
|
||||
|
||||
### 4.3 影像 `/api/imaging`
|
||||
|
||||
#### GET `/api/imaging`
|
||||
|
||||
| 参数 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| page / size | int | 分页 |
|
||||
| keyword | string | 关键字 |
|
||||
| status | string | PENDING / ANALYZING / COMPLETED / ERROR |
|
||||
| studyType | string | X_RAY / CT / MRI / ULTRASOUND |
|
||||
|
||||
#### POST/PUT 请求体
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| patientId | long | 是 | 患者 ID |
|
||||
| doctorId | long | 否 | 空则用当前用户 |
|
||||
| studyType | string | 是 | 检查类型 |
|
||||
| bodyPart | string | 是 | 部位 |
|
||||
| imageUrl | string | 是 | 先调 upload 得到 |
|
||||
|
||||
#### POST `/api/imaging/upload`
|
||||
|
||||
| 表单字段 | 类型 | 必填 |
|
||||
|----------|------|------|
|
||||
| file | file | 是 |
|
||||
|
||||
**data:** 路径字符串,如 `/uploads/images/...`
|
||||
|
||||
#### AI 诊断流程
|
||||
|
||||
```
|
||||
1. POST /api/imaging/upload → imageUrl
|
||||
2. POST /api/imaging → recordId
|
||||
3. POST /api/ai-diagnosis/analyze/{id}
|
||||
4. GET /api/ai-diagnosis/result/{id} (轮询至 COMPLETED / ERROR)
|
||||
```
|
||||
|
||||
#### GET `/api/ai-diagnosis/result/{recordId}` 的 data
|
||||
|
||||
| 字段 | 说明 |
|
||||
|------|------|
|
||||
| status | 影像状态 |
|
||||
| diagnosisText | 诊断结论 |
|
||||
| confidenceScore | 置信度 |
|
||||
| findings | 所见 |
|
||||
| recommendations | 建议 |
|
||||
| modelVersion | 模型版本 |
|
||||
| processingTimeMs | 耗时 |
|
||||
| detections | 检测框列表 |
|
||||
| annotatedImageUrl | 标注图 |
|
||||
| fullReport | 完整报告 |
|
||||
| engine | 引擎 |
|
||||
| fallback | 是否降级 |
|
||||
|
||||
---
|
||||
|
||||
### 4.4 电子病历 `/api/emrs`
|
||||
|
||||
#### GET `/api/emrs`
|
||||
|
||||
| 参数 | 说明 |
|
||||
|------|------|
|
||||
| page / size | 分页 |
|
||||
| keyword | 关键字 |
|
||||
|
||||
#### POST/PUT 请求体
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| patientId | long | 是 | 患者 |
|
||||
| doctorId | long | 否 | 空则当前用户 |
|
||||
| visitDate | date | 是 | yyyy-MM-dd |
|
||||
| diagnosis | string | 是 | 诊断 |
|
||||
| chiefComplaint | string | 否 | 主诉 |
|
||||
| presentIllness | string | 否 | 现病史 |
|
||||
| physicalExamination | string | 否 | 体格检查 |
|
||||
| treatmentPlan | string | 否 | 治疗方案 |
|
||||
| medications | string | 否 | 用药 |
|
||||
| followUpNotes | string | 否 | 随访 |
|
||||
|
||||
#### POST `/api/emrs` 的 data
|
||||
|
||||
| 字段 | 说明 |
|
||||
|------|------|
|
||||
| emr | 病历对象 |
|
||||
| aiSupport | AI 决策 → [DecisionSupport](#decisionsupport) |
|
||||
|
||||
---
|
||||
|
||||
### 4.5 预约 `/api/appointments`
|
||||
|
||||
#### GET `/api/appointments`
|
||||
|
||||
| 参数 | 说明 |
|
||||
|------|------|
|
||||
| page / size | 分页 |
|
||||
| keyword | 关键字 |
|
||||
| status | 预约状态 |
|
||||
| date | yyyy-MM-dd |
|
||||
|
||||
#### POST/PUT 请求体
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| patientId | long | 是 | 患者 |
|
||||
| doctorId | long | 否 | 医生 |
|
||||
| department | string | 是 | 科室 |
|
||||
| appointmentDate | date | 是 | 预约日期 |
|
||||
| appointmentTime | time | 否 | 预约时间 |
|
||||
| reason | string | 否 | 事由 |
|
||||
| notes | string | 否 | 备注 |
|
||||
| status | string | 否 | 默认 SCHEDULED |
|
||||
|
||||
#### PATCH `/api/appointments/{id}/status`
|
||||
|
||||
```json
|
||||
{ "status": "CONFIRMED" }
|
||||
```
|
||||
|
||||
状态流转:`SCHEDULED` → `CONFIRMED` → `COMPLETED`,或 `CANCELLED` / `NO_SHOW`。
|
||||
|
||||
---
|
||||
|
||||
### 4.6 用户 `/api/users`(ADMIN)
|
||||
|
||||
#### GET `/api/users`
|
||||
|
||||
| 参数 | 说明 |
|
||||
|------|------|
|
||||
| page / size | 分页 |
|
||||
| keyword | 关键字 |
|
||||
| role | 角色筛选 |
|
||||
| enabled | true / false |
|
||||
|
||||
#### POST/PUT 请求体
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| username | string | 是 | 用户名 |
|
||||
| password | string | 新建必填 | 更新可空 |
|
||||
| realName | string | 是 | 真实姓名 |
|
||||
| role | string | 是 | DOCTOR / RADIOLOGIST / ADMIN |
|
||||
| department | string | 否 | 科室 |
|
||||
| phone | string | 否 | 电话 |
|
||||
| email | string | 否 | 邮箱 |
|
||||
| enabled | boolean | 否 | 默认 true |
|
||||
|
||||
#### PATCH `/api/users/{id}/enabled`
|
||||
|
||||
```json
|
||||
{ "enabled": false }
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 4.7 AI 对话 `/api/ai`
|
||||
|
||||
#### POST `/api/ai/chat`
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| mode | string | 是 | `CHAT` 或 `RAG` |
|
||||
| question | string | 是 | 问题 |
|
||||
|
||||
#### GET `/api/ai/chat/history`
|
||||
|
||||
| 参数 | 默认 | 说明 |
|
||||
|------|------|------|
|
||||
| limit | 30 | 条数上限 |
|
||||
|
||||
---
|
||||
|
||||
### 4.8 AI 管理 `/api/admin`
|
||||
|
||||
#### PUT `/api/admin/ai-settings`
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| apiBaseUrl | string | OpenAI 兼容地址 |
|
||||
| apiKey | string | null 表示不改密钥 |
|
||||
| model | string | 模型名 |
|
||||
| enabled | boolean | 是否启用 |
|
||||
| temperature | double | 温度 |
|
||||
| systemPrompt | string | 系统提示词 |
|
||||
|
||||
#### POST/PUT 知识库请求体
|
||||
|
||||
| 字段 | 类型 | 必填 |
|
||||
|------|------|------|
|
||||
| title | string | 是 |
|
||||
| content | string | 是 |
|
||||
| category | string | 否 |
|
||||
| enabled | boolean | 否 |
|
||||
|
||||
#### PATCH 启用类接口(知识库 / 用户通用形态)
|
||||
|
||||
```json
|
||||
{ "enabled": true }
|
||||
```
|
||||
|
||||
#### YOLO 激活 / 模式
|
||||
|
||||
```json
|
||||
{ "name": "best.pt", "demo_mode": "auto" }
|
||||
```
|
||||
|
||||
```json
|
||||
{ "demo_mode": "real" }
|
||||
```
|
||||
|
||||
`demo_mode`:`demo` | `real` | `auto`
|
||||
|
||||
---
|
||||
|
||||
## 5. AI 微服务详解
|
||||
|
||||
响应**不**包 `{code, message, data}`,直接返回业务 JSON。
|
||||
|
||||
### 5.1 GET `/health`
|
||||
|
||||
| 字段 | 说明 |
|
||||
|------|------|
|
||||
| status | 固定 ok |
|
||||
| yolo_available | YOLO 是否可用 |
|
||||
| monai_available | MONAI 是否可用 |
|
||||
| langchain_available | LangChain 是否可用 |
|
||||
| llm_configured | 是否配置 LLM |
|
||||
| demo_mode | 当前模式 |
|
||||
| knowledge_docs | 知识片段数 |
|
||||
|
||||
### 5.2 POST `/imaging/analyze`
|
||||
|
||||
`multipart/form-data`
|
||||
|
||||
| 字段 | 类型 | 必填 | 说明 |
|
||||
|------|------|------|------|
|
||||
| file | file | 二选一 | 上传文件 |
|
||||
| image_path | string | 二选一 | 服务端路径 |
|
||||
| study_type | string | 否 | 默认 CT |
|
||||
| body_part | string | 否 | 部位 |
|
||||
| patient_summary | string | 否 | 摘要 |
|
||||
|
||||
**响应字段:** detections、annotated_image_base64、preliminary_diagnosis、findings、recommendations、confidence、model_version、mode、full_report、disclaimer
|
||||
|
||||
### 5.3 POST `/report/decision`
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| chief_complaint | string | 主诉 |
|
||||
| history | string | 病史 |
|
||||
| exam_findings | string | 检查 |
|
||||
| diagnosis | string | 诊断 |
|
||||
| medications | string | 用药 |
|
||||
| imaging_summary | string | 影像摘要 |
|
||||
| patient | object | `{ age, gender, name }` |
|
||||
|
||||
### 5.4 POST `/rag/query`
|
||||
|
||||
| 字段 | 类型 | 默认 | 说明 |
|
||||
|------|------|------|------|
|
||||
| query | string | — | 问题 |
|
||||
| top_k | int | 4 | 返回条数 |
|
||||
| context | string | "" | 附加上下文 |
|
||||
|
||||
> 实现为文档切分 + 内存关键词检索,**未使用向量数据库**。
|
||||
|
||||
### 5.5 POST `/rag/ingest`
|
||||
|
||||
| 字段 | 类型 | 必填 |
|
||||
|------|------|------|
|
||||
| title | string | 是 |
|
||||
| content | string | 是 |
|
||||
| category | string | 否,默认「自定义」 |
|
||||
|
||||
### 5.6 POST `/llm/config`
|
||||
|
||||
兼容 `api_base_url` / `apiBaseUrl`、`api_key` / `apiKey`。
|
||||
|
||||
| 字段 | 说明 |
|
||||
|------|------|
|
||||
| enabled | 是否启用 |
|
||||
| api_base_url | 接口地址 |
|
||||
| api_key | null 不改;"" 清空 |
|
||||
| model | 模型名 |
|
||||
| temperature | 温度 |
|
||||
|
||||
---
|
||||
|
||||
## 6. 数据模型
|
||||
|
||||
### User
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| id | long | ID |
|
||||
| username | string | 用户名 |
|
||||
| realName | string | 真实姓名 |
|
||||
| role | string | 角色 |
|
||||
| department | string | 科室 |
|
||||
| phone | string | 电话 |
|
||||
| email | string | 邮箱 |
|
||||
| avatar | string | 头像 URL |
|
||||
| enabled | boolean | 是否启用 |
|
||||
|
||||
### Patient
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| id | long | ID |
|
||||
| name | string | 姓名 |
|
||||
| gender | string | 性别 |
|
||||
| age | int | 年龄 |
|
||||
| idCard | string | 身份证 |
|
||||
| phone | string | 电话 |
|
||||
| address | string | 地址 |
|
||||
| medicalHistory | string | 病史 |
|
||||
| createdAt | datetime | 创建时间 |
|
||||
|
||||
### ImagingRecord
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| id | long | ID |
|
||||
| patientId | long | 患者 |
|
||||
| patientName | string | 患者姓名 |
|
||||
| doctorId | long | 医生 |
|
||||
| doctorRealName | string | 医生姓名 |
|
||||
| studyType | string | 检查类型 |
|
||||
| bodyPart | string | 部位 |
|
||||
| imageUrl | string | 影像路径 |
|
||||
| status | string | 状态 |
|
||||
| aiDiagnosis | string | AI 诊断 |
|
||||
| aiConfidence | double | 置信度 |
|
||||
| createdAt | datetime | 创建时间 |
|
||||
|
||||
### Emr
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| id | long | ID |
|
||||
| patientId / patientName | — | 患者 |
|
||||
| doctorId / doctorRealName | — | 医生 |
|
||||
| visitDate | date | 就诊日 |
|
||||
| chiefComplaint | string | 主诉 |
|
||||
| presentIllness | string | 现病史 |
|
||||
| physicalExamination | string | 体格检查 |
|
||||
| diagnosis | string | 诊断 |
|
||||
| treatmentPlan | string | 治疗 |
|
||||
| medications | string | 用药 |
|
||||
| followUpNotes | string | 随访 |
|
||||
| aiSuggestions | string | AI 建议文本 |
|
||||
| createdAt | datetime | 创建时间 |
|
||||
|
||||
### Appointment
|
||||
|
||||
| 字段 | 类型 | 说明 |
|
||||
|------|------|------|
|
||||
| id | long | ID |
|
||||
| patientId / patientName / patientPhone | — | 患者 |
|
||||
| doctorId / doctorName | — | 医生 |
|
||||
| department | string | 科室 |
|
||||
| appointmentDate | date | 日期 |
|
||||
| appointmentTime | time | 时间 |
|
||||
| reason / notes | string | 事由 / 备注 |
|
||||
| status | string | 状态 |
|
||||
| createdAt | datetime | 创建时间 |
|
||||
|
||||
### DecisionSupport
|
||||
|
||||
| 字段 | 说明 |
|
||||
|------|------|
|
||||
| suggestions | 治疗建议 |
|
||||
| medicationSuggestions | 用药建议 |
|
||||
| riskAssessments | 风险评估 |
|
||||
| nursingAdvice | 护理建议 |
|
||||
| followUpPlan | 随访计划 |
|
||||
| conflicts | 冲突提示 |
|
||||
| sources | RAG 来源 |
|
||||
| fullText | 全文 |
|
||||
| engine | 引擎标识 |
|
||||
| fallback | 是否降级 |
|
||||
| disclaimer | 免责声明 |
|
||||
|
||||
### AiChatResponse
|
||||
|
||||
| 字段 | 说明 |
|
||||
|------|------|
|
||||
| mode | CHAT / RAG |
|
||||
| question | 问题 |
|
||||
| answer | 回答 |
|
||||
| usedLlm | 是否调用大模型 |
|
||||
| fallback | 是否降级 |
|
||||
| sources | 引用来源列表 |
|
||||
|
||||
### Detection(AI 检测框)
|
||||
|
||||
| 字段 | 说明 |
|
||||
|------|------|
|
||||
| label | 标签 |
|
||||
| label_zh | 中文标签 |
|
||||
| confidence | 置信度 |
|
||||
| bbox | `[x1, y1, x2, y2]` |
|
||||
|
||||
---
|
||||
|
||||
## 7. 枚举与错误码
|
||||
|
||||
### 枚举
|
||||
|
||||
| 名称 | 取值 |
|
||||
|------|------|
|
||||
| 角色 | ADMIN, DOCTOR, RADIOLOGIST |
|
||||
| 性别 | MALE, FEMALE, OTHER |
|
||||
| 检查类型 | X_RAY, CT, MRI, ULTRASOUND |
|
||||
| 影像状态 | PENDING, ANALYZING, COMPLETED, ERROR |
|
||||
| 预约状态 | SCHEDULED, CONFIRMED, COMPLETED, CANCELLED, NO_SHOW |
|
||||
| 对话模式 | CHAT, RAG |
|
||||
| YOLO 模式 | demo, real, auto |
|
||||
|
||||
### 业务后端 code
|
||||
|
||||
| code | 含义 |
|
||||
|------|------|
|
||||
| 0 | 成功 |
|
||||
| 400 | 参数错误 |
|
||||
| 401 | 未登录 / token 过期 |
|
||||
| 403 | 无权限 |
|
||||
| 404 | 不存在 |
|
||||
| 409 | 冲突 |
|
||||
| 1000 | 业务异常 |
|
||||
| 500 | 服务器错误 |
|
||||
|
||||
### 降级说明
|
||||
|
||||
| 场景 | 行为 |
|
||||
|------|------|
|
||||
| AI 服务离线 | 影像诊断、病历决策走本地规则,`fallback=true` |
|
||||
| 未配置 LLM Key | 返回检索摘要或模板文本 |
|
||||
| YOLO 不可用 | 进入 demo 模式 |
|
||||
|
||||
---
|
||||
|
||||
## 附录:curl 示例
|
||||
|
||||
```bash
|
||||
# 登录
|
||||
curl -X POST http://localhost:8080/api/auth/login \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username":"doctor1","password":"pass123"}'
|
||||
|
||||
# 带 Token 请求
|
||||
curl http://localhost:8080/api/patients?page=0&size=10 \
|
||||
-H "Authorization: Bearer <token>"
|
||||
|
||||
# AI 健康检查
|
||||
curl http://127.0.0.1:8001/health
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
*输出仅供教学实训,不能替代执业医师诊断。*
|
||||
)
|
||||
Reference in New Issue
Block a user