前言:随着大语言模型的爆发式发展,如何将AI能力落地到实际业务场景,是当前最热门的技术话题之一。本文将以一个完整的全栈项目,智能健康分析系统**为例,详细讲解如何用 Spring Boot + Vue + DeepSeek 构建一个集"体检报告AI解析、流式智能问诊、IoT设备接入、健康预警、医患协作"于一体的健康管理平台。
一、项目概述
1.1 项目背景
传统健康管理面临几个痛点:
- 体检报告数据专业性强,普通人难以解读
- 健康数据分散,缺乏统一的智能分析手段
- 医患沟通效率低,专家资源分配不均
- IoT健康设备数据无法与管理系统打通
AuraHealth 正是为了解决这些问题而设计------将 DeepSeek 大模型深度融入健康管理全流程,实现从数据采集 → AI分析 → 智能预警 → 医患协作 → 健康改进的完整闭环。
1.2 功能全景
| 核心功能 | 说明 |
|---|---|
| AI智能健康顾问 | SSE流式对话 + 多轮记忆 + 健康档案感知 |
| 体检报告AI解析 | 图片OCR / PDF提取 → DeepSeek结构化分析 |
| 健康Dashboard | 多维评分 + 指标趋势图 + IoT实时监测 |
| 智能预警系统 | 自动比对参考范围 + 分级预警 + 通知推送 |
| 医患协作平台 | 医生专家反馈 + 患者追问 + 双向消息通知 |
| AI健康计划 | 基于体检数据生成7天个性化运动/饮食方案 |
| IoT设备管理 | 华为云IoTDA接入 + AMQP消息消费 |
| Token钱包系统 | 双币种 + 消费流水审计 + 防滥用机制 |
二、技术架构
2.1 技术栈总览
后端
| 技术 | 用途 |
|---|---|
| Spring Boot 2.5 | 核心框架 |
| Spring Security + JWT | 认证授权 |
| MyBatis + PageHelper | ORM与分页 |
| Redis | 缓存 + Token存储 |
| DeepSeek API | AI对话与报告分析 |
| 百度OCR API | 图片文字识别 |
| 华为云IoTDA SDK | IoT设备管理 |
| Apache POI / PDFBox | Excel导出 / PDF解析 |
| OkHttp | HTTP客户端(调用外部API) |
前端
| 技术 | 用途 |
|---|---|
| Vue 2 + Element UI | 前端框架与组件库 |
| ECharts | 图表可视化(健康趋势图) |
| markdown-it | AI回复Markdown渲染 |
| Vuex + Vue Router | 状态管理与路由 |
| Axios | HTTP请求封装 |
部署
| 组件 | 说明 |
|---|---|
| Docker Compose | 容器化编排 |
| Nginx | 静态资源 + 反向代理 + WebSocket代理 |
| MySQL 8.3 | 业务数据库 |
| Redis | 缓存层 |
| MinIO | 对象存储(报告文件) |
2.2 整体架构图
┌─────────────┐
│ Nginx │
│ (80端口) │
└──────┬──────┘
┌─────┼─────┐
│ │ │
静态资源 /prod-api /ws/
(Vue) (反向代理) (WebSocket)
│ │
┌──────┴──────┐ │
│ Spring Boot │◄───┘
│ (8080端口) │
└──────┬──────┘
┌──────┼──────┐
│ │ │
MySQL Redis MinIO
(3306) (6379) (9000)
外部服务:
├── DeepSeek API → AI对话 & 报告分析
├── 百度OCR API → 图片文字识别
└── 华为云IoTDA → AMQP设备数据消费
2.3 模块划分
项目采用标准的 Maven 多模块架构:
AuraHealth (父POM)
├── aura-health-admin → 启动入口模块
├── aura-health-framework → 核心框架模块(安全、AOP、配置)
├── aura-health-system → 系统管理模块(RBAC权限)
├── aura-health-common → 通用工具模块
├── aura-health-business → 核心业务模块(健康管理 + AI)
└── aura-health-ui → Vue前端工程
三、核心功能详解
3.1 SSE流式AI对话(核心亮点)
这是整个项目最核心的功能------基于 DeepSeek 的流式健康问诊。用户提问后,AI的回答会像 ChatGPT 一样逐字实时输出,体验非常流畅。
技术选型 :Spring Boot 的 SseEmitter + RestTemplate 流式读取
核心实现思路:
java
@PostMapping("/chat")
public SseEmitter chat(@RequestBody AiChatRequest request) {
SseEmitter emitter = new SseEmitter(180000L); // 3分钟超时
executorService.execute(() -> {
try {
// 1. 查询用户健康档案,注入到system prompt
String systemPrompt = buildSystemPrompt(userId);
// 2. 加载历史对话(多轮记忆)
List<Message> messages = buildMessages(sessionId, systemPrompt);
// 3. 调用DeepSeek流式API
restTemplate.execute(uri, HttpMethod.POST,
requestCallback, response -> {
BufferedReader reader = new BufferedReader(
new InputStreamReader(response.getBody()));
String line;
while ((line = reader.readLine()) != null) {
if (line.startsWith("data: ")) {
String content = parseContent(line);
emitter.send(SseEmitter.event()
.data(content));
}
}
emitter.complete();
return null;
});
} catch (Exception e) {
emitter.completeWithError(e);
}
});
return emitter;
}
关键技术点:
- 独立线程池 :使用
CachedThreadPool异步处理,不阻塞 Tomcat 工作线程 - 多轮对话记忆 :同一
sessionId下的历史问答自动注入 messages 数组 - 健康档案融合 :自动查询用户的
bus_health_profile(身高/体重/病史/过敏史),注入到 system prompt,让AI能给出个性化的健康建议 - 日期感知:在 prompt 中动态注入当前日期,修正AI的时间认知
3.2 体检报告AI智能解析
支持图片 和PDF两种格式的体检报告上传,通过AI自动提取结构化数据。
处理流水线:
图片上传 → MinIO存储 → 百度OCR文字提取 → DeepSeek分析 → 结构化JSON
PDF上传 → MinIO存储 → PDFBox文本提取 → DeepSeek分析 → 结构化JSON
AI解析的Prompt设计是关键,我们要求DeepSeek返回严格的JSON结构:
json
{
"items": [
{
"itemName": "收缩压",
"itemValue": "145",
"unit": "mmHg",
"referenceRange": "90-140",
"isNormal": 1
}
],
"summary": "您的收缩压偏高,建议..."
}
其中 isNormal 字段:0=正常,1=偏高,2=偏低。
解析完成后,系统会自动触发预警检测 ------将每项指标与 bus_health_item 字典中的参考范围比对,异常项自动生成预警记录并推送通知。
3.3 健康评分与Dashboard
Dashboard 是用户的健康数据驾驶舱,核心是健康评分算法:
综合评分 = 体检指标评分 × 60% + 生活习惯评分 × 40%
Dashboard 提供以下维度的数据可视化:
- 综合健康评分:0-100分,带历史趋势折线图
- 体检指标趋势:近5次体检的单项指标变化曲线(ECharts)
- 生活习惯周报:7天平均睡眠时长、步数统计
- IoT实时监测:来自华为云设备的实时心率/血氧/血压数据
- 预警统计:近30天各类预警的数量统计
3.4 IoT物联网设备接入
项目集成了华为云IoTDA平台,通过 AMQP 协议消费设备上报的实时健康数据。
java
// AMQP消息消费者核心逻辑
@Component
public class IotAmqpConsumerService {
@PostConstruct
public void startConsumer() {
// 建立与华为云IoTDA的AMQP连接
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("iot-amqp.cn-east-3.myhuaweicloud.com");
factory.setPort(5671);
factory.useSslProtocol();
// 消费设备上报数据并入库
consumer.setMessageListener(message -> {
IotDataDTO data = parseDeviceMessage(message);
iotDataService.save(data);
});
}
}
支持的设备数据类型包括:心率、血氧、血压、体温、步数、睡眠时长、饮水量等。
3.5 智能预警与医患协作
这是项目中业务闭环最完整的一条链路:
体检报告AI解析
→ 自动比对参考范围
→ 生成预警(低/中/高三级)
→ 推送系统通知
→ 医生查看预警并提交专家反馈
→ 患者收到反馈通知
→ 患者可追问,医生收到回复通知
→ 形成医患双向沟通闭环
预警等级分为三级:
- 低风险(1级):指标轻微偏离,建议关注
- 中风险(2级):指标明显异常,建议复查
- 高风险(3级):指标严重超标,建议立即就医
3.6 Token钱包系统
为了合理管控AI服务的使用成本,项目设计了一套完整的Token经济系统:
| 功能 | 说明 |
|---|---|
| 双币种 | Token余额(用于AI对话)+ 账户余额(元) |
| 注册赠送 | 新用户自动赠送 50万 Tokens |
| 消费场景 | AI对话消耗Token + 健康计划生成消耗Token |
| 充值方式 | Token直充 / 余额充值 / 余额兑换Token |
| 防滥用 | 演示模式软上限(50万Token)+ 永久硬上限(500万Token) |
| 流水审计 | 每笔交易记录完整的 wallet_transaction 流水 |
四、安全架构设计
4.1 认证授权流程
用户登录 → BCrypt密码验证 → JWT Token生成 → Redis存储
↓
每次请求 → JwtAuthenticationFilter → Redis验证Token有效性
↓
权限校验 → @PreAuthorize("@ss.hasPermi('xxx')") → RBAC鉴权
4.2 三角色RBAC权限模型
| 角色 | 权限范围 |
|---|---|
| admin(管理员) | 全部功能:系统管理 + 健康管理 + 设备管理 + 诊断管理 |
| common(普通用户) | 健康中心 + 体检报告 + AI顾问 + 健康计划 + 设备管理 |
| doctor(医生) | 诊断管理 + 健康预警 + 专家反馈 |
4.3 安全防护措施
- 无状态认证 :
SessionCreationPolicy.STATELESS+ JWT - 密码加密:BCryptPasswordEncoder
- 数据归属校验 :各Controller中强制校验
userId归属,防止越权访问 - 防重复提交 :
RepeatSubmitInterceptor拦截器 - 操作审计 :
@Log注解 + AOP切面自动记录操作日志 - 数据权限 :
DataScopeAspect实现行级数据权限控制
五、数据库设计
项目共17张核心业务表,以下列举关键表结构:
sql
-- AI咨询记录表
CREATE TABLE bus_ai_consultation (
id BIGINT PRIMARY KEY,
user_id BIGINT,
session_id VARCHAR(64), -- 会话ID(多轮对话)
question TEXT, -- 用户问题
answer TEXT, -- AI回答
tokens_used INT, -- 本次消耗Token数
create_time DATETIME
);
-- 用户钱包表
CREATE TABLE bus_user_wallet (
id BIGINT PRIMARY KEY,
user_id BIGINT UNIQUE,
token_balance BIGINT, -- Token余额
account_balance DECIMAL(10,2), -- 账户余额(元)
total_tokens_used BIGINT -- 累计消耗
);
-- 体检报告主表
CREATE TABLE bus_physical_report (
id BIGINT PRIMARY KEY,
user_id BIGINT,
report_url VARCHAR(500), -- MinIO文件地址
ai_status TINYINT, -- 0待解析/1解析中/2已完成
ai_summary TEXT, -- AI分析总结
create_time DATETIME
);
-- 健康预警表
CREATE TABLE bus_health_alert (
id BIGINT PRIMARY KEY,
user_id BIGINT,
item_code VARCHAR(32), -- 指标编码
current_value VARCHAR(32), -- 当前值
alert_level TINYINT, -- 1低/2中/3高
status TINYINT, -- 0未读/1已读/2已处理
create_time DATETIME
);
六、部署方案
项目使用 Docker Compose 一键编排部署:
yaml
version: '3.8'
services:
aura-health:
image: eclipse-temurin:11-jre-alpine
ports:
- "8080:8080"
environment:
- SPRING_DATASOURCE_URL=jdbc:mysql://mysql:3306/health_intelligence
- SPRING_REDIS_HOST=redis
depends_on:
- mysql
- redis
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./dist:/usr/share/nginx/html
- ./nginx.conf:/etc/nginx/nginx.conf
mysql:
image: mysql:8.3
ports:
- "3306:3306"
environment:
- MYSQL_DATABASE=health_intelligence
redis:
image: redis:7-alpine
ports:
- "6379:6379"
Nginx 同时承担前端静态资源服务、后端API反向代理和WebSocket代理三重职责。
七、项目截图



适用场景
- 健康管理平台 / 互联网医疗系统
- 体检机构信息化管理
- 社区健康服务中心
- 企业员工健康管理
- 课程设计参考
获取源码
T841723389
💡 可提供:完整前后端源码 + SQL脚本 + 部署文档 + 技术答疑
如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔三连支持!