温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系名片!

一、项目背景与意义

随着健康管理意识的提升,体检已成为个人和企事业单位健康管理的重要环节。传统体检报告多以纸质或 PDF 形式发放,存在报告分散、查询困难、指标难以对比、异常项容易被忽视等问题。体检机构在报告录入、归档、统计和随访方面也面临大量重复性人工工作。

本项目基于 Spring Boot + Vue3 构建一套智能体检报告管理平台,面向体检机构与个人用户,提供报告数字化管理、指标结构化存储、异常项智能提示、历史趋势分析等能力,帮助机构提升运营效率,帮助用户更直观地理解自身健康状况。

二、系统目标与核心功能

平台围绕“报告录入—结构化解析—智能分析—可视化展示—健康随访”的闭环进行设计,主要功能模块如下:

  • 用户与权限管理:支持管理员、体检医生、普通用户三类角色,基于 RBAC 模型进行菜单与接口级权限控制。
  • 体检报告管理:支持报告新增、编辑、批量导入、归档与检索,报告与体检人、体检套餐、体检时间关联。
  • 指标结构化解析:将报告中的检验项目拆分为结构化指标(项目名称、结果值、单位、参考区间、异常标识),便于统计与对比。
  • 智能异常提示:依据参考区间自动判定偏高、偏低、危急值,并生成异常项汇总与健康建议。
  • 历史趋势分析:对同一用户多次体检的同类指标进行折线趋势展示,辅助观察指标变化。
  • 统计报表:按套餐、科室、时间段统计体检量、异常率等数据,支持图表展示与导出。
  • 健康随访:对异常项用户生成随访任务,记录随访结果与建议。

三、技术选型

层次技术选型说明
前端框架Vue3 + Vite组合式 API,构建速度快,开发体验好
UI 组件库Element Plus提供表格、表单、弹窗等后台常用组件
状态与路由Pinia + Vue Router统一管理登录态与动态路由
图表可视化ECharts指标趋势折线图、统计柱状图与饼图
后端框架Spring Boot 3.x快速构建 RESTful 接口
持久层MyBatis-Plus简化单表 CRUD 与分页查询
数据库MySQL 8.0存储用户、报告、指标等业务数据
缓存Redis缓存登录令牌与字典数据
鉴权Spring Security + JWT无状态认证与接口权限校验
文档Knife4j在线接口文档与调试

四、系统架构设计

系统采用前后端分离架构,前端通过 HTTP 调用后端 RESTful 接口,后端按 Controller、Service、Mapper 分层组织代码,整体结构清晰、便于扩展。

flowchart TD
    A[Vue3 前端应用] -->|HTTP/JSON| B[Spring Boot 后端]
    B --> C[Controller 层]
    C --> D[Service 业务层]
    D --> E[Mapper 持久层]
    E --> F[(MySQL)]
    D --> G[(Redis 缓存)]
    B --> H[JWT 鉴权过滤器]
    D --> I[智能分析模块]
    I --> J[异常判定与健康建议]

其中智能分析模块独立封装,负责参考区间比对、异常等级判定与建议生成,后续可平滑替换为规则引擎或模型服务。

五、数据库设计

核心数据表设计如下,围绕“用户—体检记录—报告—指标”的主线组织:

表名说明关键字段
sys_user系统用户表id、username、password、role、status
exam_person体检人信息表id、name、gender、age、phone、id_card
exam_record体检记录表id、person_id、package_id、exam_date、status
exam_report体检报告表id、record_id、summary、doctor_id、create_time
exam_indicator体检指标表id、report_id、item_name、result_value、unit、ref_range、abnormal_flag
follow_up随访任务表id、person_id、indicator_id、content、status、follow_time

指标表通过 abnormal_flag 字段标记异常状态(0 正常、1 偏高、2 偏低、3 危急),便于快速筛选与统计。

六、核心功能实现

6.1 后端接口示例

以报告分页查询接口为例,Controller 层负责参数接收与统一响应封装:

@RestController
@RequestMapping("/api/report")
public class ExamReportController {

    private final ExamReportService reportService;

    public ExamReportController(ExamReportService reportService) {
        this.reportService = reportService;
    }

    @GetMapping("/page")
    public Result<Page<ExamReportVO>> page(ReportQuery query) {
        return Result.success(reportService.pageQuery(query));
    }

    @GetMapping("/{id}")
    public Result<ReportDetailVO> detail(@PathVariable Long id) {
        return Result.success(reportService.getDetail(id));
    }
}

6.2 异常指标判定逻辑

服务层根据指标结果值与参考区间进行比对,输出异常标识与提示信息:

public AbnormalResult judge(BigDecimal value, BigDecimal low, BigDecimal high) {
    if (value == null) {
        return AbnormalResult.normal();
    }
    if (low != null && value.compareTo(low) < 0) {
        return AbnormalResult.of(2, "指标偏低,建议复查并咨询医生");
    }
    if (high != null && value.compareTo(high) > 0) {
        return AbnormalResult.of(1, "指标偏高,建议结合临床进一步检查");
    }
    return AbnormalResult.normal();
}

6.3 前端报告列表页

前端使用 Vue3 组合式 API 与 Element Plus 表格组件实现报告列表,支持分页与条件筛选:

<template>
  <el-table :data="reportList" v-loading="loading">
    <el-table-column prop="personName" label="体检人" />
    <el-table-column prop="examDate" label="体检日期" />
    <el-table-column prop="abnormalCount" label="异常项数" />
    <el-table-column label="操作">
      <template #default="{ row }">
        <el-button type="primary" link @click="viewDetail(row.id)">查看</el-button>
      </template>
    </el-table-column>
  </el-table>
</template>

<script setup>
import { ref, onMounted } from 'vue'
import { getReportPage } from '@/api/report'

const reportList = ref([])
const loading = ref(false)

const loadData = async () => {
  loading.value = true
  try {
    const res = await getReportPage({ pageNum: 1, pageSize: 10 })
    reportList.value = res.data.records
  } finally {
    loading.value = false
  }
}

onMounted(loadData)
</script>

七、关键难点与解决方案

  • 报告数据非结构化:通过指标字典与解析规则,将报告文本拆分为结构化指标,保证后续统计与趋势分析可用。
  • 参考区间差异:不同医院、不同性别年龄的参考区间不同,设计指标字典表按条件匹配参考区间,避免硬编码。
  • 权限粒度控制:采用 RBAC 模型,结合 JWT 中的角色信息与后端注解校验,实现接口级权限控制。
  • 大数据量查询:对体检日期、体检人姓名等常用查询字段建立索引,并对统计接口增加缓存。

八、总结与展望

本文围绕 Spring Boot + Vue3 技术栈,完成了智能体检报告管理平台的整体设计与核心功能实现,涵盖报告管理、指标结构化、异常判定、趋势分析与随访管理等模块。后续可进一步引入规则引擎实现更灵活的健康风险评估,并结合大模型能力生成个性化健康解读,提升平台的智能化水平。

Logo

更多推荐