DICOM_DATA_MANAGE_README.md 8.0 KB

DICOM数据管理功能实现说明

功能概述

本次实现了完整的DICOM文件上传、解析和数据管理功能,包括:

第一步:DICOM文件上传和解析 ✓

  1. DICOM文件上传

    • 支持单文件和批量上传
    • 自动解析DICOM文件,提取患者信息和检查信息
    • 自动保存患者信息到patient_info表
    • 自动保存检查信息到study_info表
    • 文件存储到本地:/data/dicom/{机构ID}/{日期}/{文件ID}.dcm
  2. DICOM解析功能

    • 提取患者基本信息:患者ID、姓名、性别、年龄等
    • 提取检查信息:检查日期、检查类型、检查描述、检查部位等
    • 识别多部位检查(根据检查描述中的关键词)
    • 自动判断数据是否需要治理(关键字段缺失)
  3. 多部位检查识别

    • 根据检查描述自动识别多部位检查
    • 关键词:双侧、双、和、+、&、bilateral、and、with等
    • 支持拆分多部位检查描述

第二步:数据管理功能 ✓

  1. 数据列表展示

    • 机构名称
    • 患者姓名
    • 手机号
    • 身份证号
    • 检查日期
    • 检查类型
    • 检查状态(待检查、检查中、已完成)
    • 数据上传时间
    • 智能治理(操作按钮)
    • 确认状态(待确认、已确认、已驳回)
    • 操作(确认、查看、删除)
  2. 数据筛选功能

    • 按机构筛选
    • 按患者姓名筛选
    • 按手机号筛选
    • 按检查类型筛选
    • 按检查状态筛选
    • 按治理状态筛选
    • 按确认状态筛选
  3. 数据操作功能

    • 智能治理:自动标准化数据(检查描述、检查类型、检查部位等)
    • 确认数据:确认或驳回检查数据
    • 删除数据:删除检查数据
    • 查看数据:查看详情(预留接口)

数据库表结构

扩展的表字段

patient_info表新增字段:

  • phone:手机号
  • id_card:身份证号

study_info表新增字段:

  • check_status:检查状态(0待检查 1检查中 2已完成)
  • upload_time:数据上传时间
  • govern_status:治理状态(0未治理 1已治理 2治理中)
  • confirm_status:确认状态(0待确认 1已确认 2已驳回)
  • is_split:是否拆分(0否 1是)
  • parent_study_id:父检查ID(拆分后的记录指向原始检查)

新增的表

  1. study_split_record:检查项目拆分记录表
  2. data_govern_record:数据治理记录表
  3. dicom_file_info:DICOM文件信息表
  4. image_thumbnail:影像缩略图表

文件结构

后端文件

QConline/src/main/java/com/zskk/qconline/modules/
├── dicom/
│   ├── controller/
│   │   ├── DicomController.java          # DICOM上传接口
│   │   └── DataManageController.java      # 数据管理接口
│   ├── service/
│   │   ├── DicomService.java              # DICOM服务接口
│   │   └── DataManageService.java          # 数据管理服务接口
│   ├── service/impl/
│   │   ├── DicomServiceImpl.java           # DICOM服务实现
│   │   └── DataManageServiceImpl.java      # 数据管理服务实现
│   ├── vo/
│   │   ├── DicomUploadVO.java             # DICOM上传响应VO
│   │   ├── DataManageQueryVO.java          # 数据管理查询VO
│   │   └── DataManageVO.java               # 数据管理列表VO
│   └── util/
│       └── DicomParser.java                # DICOM解析工具类

前端文件

qconline_web/src/
├── api/
│   ├── dicom.ts                            # DICOM上传API
│   ├── dataManage.ts                       # 数据管理API
│   └── institution.ts                      # 机构API
└── views/
    ├── DicomUpload.vue                     # DICOM上传页面
    └── DataManage.vue                      # 数据管理列表页面

使用说明

1. 执行数据库脚本

首先执行数据库表结构扩展脚本:

mysql -u root -p qconline < /path/to/data_management_tables.sql

2. 配置文件存储路径

确保服务器有以下目录并具有写权限:

mkdir -p /data/dicom
chmod 755 /data/dicom

或者修改 DicomServiceImpl.java 中的存储路径:

private static final String DICOM_ROOT_PATH = "/your/custom/path/";

3. 重启后端服务

由于添加了新的依赖(dcm4che),需要重新构建:

cd /Users/geng/Documents/IdeaProjects/QConline
mvn clean package
# 然后重启应用

4. 使用功能

DICOM上传

  1. 登录系统
  2. 点击菜单:数据管理 → DICOM上传
  3. 选择所属机构
  4. 选择上传方式(单文件/批量)
  5. 拖拽或选择DICOM文件
  6. 点击"开始上传"
  7. 查看上传结果(患者信息、检查信息、是否多部位、是否需要治理)

数据管理

  1. 点击菜单:数据管理 → 数据列表
  2. 使用顶部筛选条件查询数据
  3. 查看列表中的数据信息
  4. 点击"治理"按钮进行智能治理
  5. 点击"确认"按钮确认数据
  6. 点击"查看"按钮查看详情(预留)
  7. 点击"删除"按钮删除数据

API接口文档

1. DICOM上传

上传单个DICOM文件

  • URL: POST /api/dicom/upload
  • 参数:
    • file: MultipartFile(DICOM文件)
    • institutionId: String(机构ID)
  • 响应: DicomUploadVO

批量上传DICOM文件

  • URL: POST /api/dicom/batch-upload
  • 参数:
    • files: MultipartFile[](DICOM文件数组)
    • institutionId: String(机构ID)
  • 响应: DicomUploadVO[]

2. 数据管理

分页查询数据列表

  • URL: GET /api/data-manage/list
  • 参数: DataManageQueryVO
  • 响应: Page
  • 确认检查数据

    • URL: PUT /api/data-manage/confirm/{studyId}
    • 参数:
      • confirmStatus: Integer(1已确认 2已驳回)
    • 响应: 成功/失败

    执行数据治理

    • URL: PUT /api/data-manage/govern/{studyId}
    • 响应: 成功/失败

    删除检查数据

    • URL: DELETE /api/data-manage/{studyId}
    • 响应: 成功/失败

    核心功能说明

    DICOM解析

    使用dcm4che库解析DICOM文件,提取以下信息:

    患者信息:

    • PatientID(患者ID)
    • PatientName(患者姓名)
    • PatientSex(性别)
    • PatientAge(年龄)
    • PatientTelephoneNumbers(电话)

    检查信息:

    • StudyInstanceUID(检查实例UID)
    • StudyDate(检查日期)
    • StudyTime(检查时间)
    • AccessionNumber(检查号)
    • Modality(检查类型)
    • StudyDescription(检查描述)
    • BodyPartExamined(检查部位)
    • ViewPosition(体位)

    多部位检查识别

    识别规则:

    1. 检查描述包含关键词:双侧、双、和、+、&、bilateral、and、with、plus等
    2. 检查部位包含分号";"分隔符

    拆分逻辑:

    1. 根据分隔符拆分检查描述
    2. 为每个部位创建独立的检查记录
    3. 关联原始检查ID

    数据治理

    治理内容:

    1. 移除检查描述中多余空格
    2. 标准化检查类型(转大写)
    3. 标准化检查部位(移除空格)
    4. 更多治理规则可扩展

    治理记录:

    • 所有治理操作记录到data_govern_record表
    • 包含治理前后的值对比
    • 记录治理规则和时间

    注意事项

    1. DICOM文件格式:只支持标准DICOM格式(.dcm、.dicom)
    2. 文件存储:确保有足够的磁盘空间存储DICOM文件
    3. 权限控制:只能查看和操作本机构的数据
    4. 数据删除:删除操作不可恢复,请谨慎操作
    5. 批量上传:批量上传时建议一次不超过100个文件

    后续扩展建议

    1. 影像预览:实现DICOM文件转图片和缩略图生成
    2. 多部位拆分:完善拆分逻辑和拆分后的图像关联
    3. AI辅助治理:集成AI模型进行智能数据治理
    4. 数据导出:支持导出检查数据和统计报告
    5. 权限细化:增加更细粒度的权限控制
    6. 操作日志:记录所有操作日志用于审计

    技术栈

    • 后端:Spring Boot 2.x + MyBatis-Plus + dcm4che
    • 前端:Vue 3 + TypeScript + Element Plus
    • 数据库:MySQL 8.0
    • DICOM解析:dcm4che 5.23.3

    联系方式

    如有问题,请联系开发团队。