-- ============================================================
-- DICOM影像增强功能 - 数据库表结构
-- 功能：序列信息存储、实例信息存储、多部位检查拆分
-- ============================================================
USE `qconline`;

-- ============================================================
-- 1. 创建序列信息表
-- ============================================================
DROP TABLE IF EXISTS `series_info`;
CREATE TABLE `series_info` (
  `id` varchar(32) NOT NULL COMMENT '主键ID',
  `study_id` varchar(64) NOT NULL COMMENT '检查ID（关联study_info表）',
  `series_instance_uid` varchar(128) NOT NULL COMMENT '序列实例UID',
  `series_number` int DEFAULT NULL COMMENT '序列号',
  `series_description` varchar(255) DEFAULT NULL COMMENT '序列描述',
  `modality` varchar(16) DEFAULT NULL COMMENT '检查类型',
  `body_part_examined` varchar(50) DEFAULT NULL COMMENT '检查部位',
  `view_position` varchar(50) DEFAULT NULL COMMENT '体位',
  `protocol_name` varchar(128) DEFAULT NULL COMMENT '扫描协议名称',
  `image_count` int DEFAULT 0 COMMENT '图像数量',
  `series_date` date DEFAULT NULL COMMENT '序列日期',
  `series_time` time DEFAULT NULL COMMENT '序列时间',
  `slice_thickness` decimal(10,4) DEFAULT NULL COMMENT '层厚（mm）',
  `pixel_spacing` varchar(50) DEFAULT NULL COMMENT '像素间距',
  `rows` int DEFAULT NULL COMMENT '图像行数',
  `columns` int DEFAULT NULL COMMENT '图像列数',
  `exam_item_name` varchar(128) DEFAULT NULL COMMENT '检查项目名称（用于多部位拆分）',
  `institution_id` varchar(32) DEFAULT NULL COMMENT '机构ID',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_series_uid` (`series_instance_uid`),
  KEY `idx_study` (`study_id`),
  KEY `idx_series_number` (`series_number`),
  KEY `idx_body_part` (`body_part_examined`),
  KEY `idx_exam_item` (`exam_item_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='序列信息表';

-- ============================================================
-- 2. 创建DICOM实例信息表（每个DICOM文件对应一个实例）
-- ============================================================
DROP TABLE IF EXISTS `dicom_instance_info`;
CREATE TABLE `dicom_instance_info` (
  `id` varchar(32) NOT NULL COMMENT '主键ID',
  `study_id` varchar(64) NOT NULL COMMENT '检查ID',
  `series_id` varchar(32) NOT NULL COMMENT '序列ID（关联series_info表）',
  `series_instance_uid` varchar(128) NOT NULL COMMENT '序列实例UID',
  `sop_instance_uid` varchar(128) NOT NULL COMMENT 'SOP实例UID',
  `instance_number` int DEFAULT NULL COMMENT '实例号',
  `file_path` varchar(500) NOT NULL COMMENT 'DICOM文件路径',
  `file_size` bigint DEFAULT 0 COMMENT '文件大小（字节）',
  `file_md5` varchar(32) DEFAULT NULL COMMENT '文件MD5值',
  `image_position` varchar(100) DEFAULT NULL COMMENT '图像位置',
  `image_orientation` varchar(200) DEFAULT NULL COMMENT '图像方向',
  `window_center` varchar(50) DEFAULT NULL COMMENT '窗位',
  `window_width` varchar(50) DEFAULT NULL COMMENT '窗宽',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uk_sop_uid` (`sop_instance_uid`),
  KEY `idx_study` (`study_id`),
  KEY `idx_series` (`series_id`),
  KEY `idx_series_uid` (`series_instance_uid`),
  KEY `idx_instance_number` (`instance_number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='DICOM实例信息表';

-- ============================================================
-- 3. 修改检查项目拆分记录表，添加序列信息字段
-- ============================================================
-- 检查表是否存在，如果不存在则创建
CREATE TABLE IF NOT EXISTS `study_split_record` (
  `id` varchar(32) NOT NULL COMMENT '主键ID',
  `original_study_id` varchar(64) NOT NULL COMMENT '原始检查ID',
  `original_study_description` varchar(255) DEFAULT NULL COMMENT '原始检查描述（多部位）',
  `split_study_id` varchar(64) NOT NULL COMMENT '拆分后的检查ID',
  `split_study_description` varchar(255) DEFAULT NULL COMMENT '拆分后的检查描述（单部位）',
  `body_part` varchar(50) DEFAULT NULL COMMENT '检查部位',
  `image_count` int DEFAULT '0' COMMENT '该部位的图像数量',
  `split_reason` varchar(500) DEFAULT NULL COMMENT '拆分原因说明',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_original_study` (`original_study_id`),
  KEY `idx_split_study` (`split_study_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='检查项目拆分记录表';

-- 添加新字段（如果已存在会报错，可忽略）
ALTER TABLE `study_split_record`
ADD COLUMN `exam_item_name` varchar(128) DEFAULT NULL COMMENT '检查项目名称' AFTER `split_study_description`,
ADD COLUMN `series_uids` text COMMENT '包含的序列UID列表（JSON格式）' AFTER `body_part`,
ADD COLUMN `series_count` int DEFAULT 0 COMMENT '序列数量' AFTER `series_uids`;

-- ============================================================
-- 说明
-- ============================================================
/*
功能说明：
1. series_info 表：存储每个序列的详细信息，包括序列号、描述、检查项目名称等
2. dicom_instance_info 表：存储每个DICOM文件（实例）的详细信息
3. study_split_record 表：扩展了序列相关字段，用于多部位检查项目拆分

使用流程：
1. 上传DICOM文件后，系统自动异步解析序列和实例信息
2. 如果检测到多个检查项目（如"颈椎+胸部"），自动创建拆分记录
3. 查询接口支持按检查项目名称过滤，返回对应部位的序列数据

查询接口：
GET /api/dicom/query
参数：
  - study_instance_uid: 检查实例UID（必填）
  - institution_id: 机构ID（必填）
  - exam_item_name: 检查项目名称（可选，用于多部位拆分查询）

示例：
  全部查询：/api/dicom/query?study_instance_uid=xxx&institution_id=yyy
  部位查询：/api/dicom/query?study_instance_uid=xxx&institution_id=yyy&exam_item_name=颈椎
*/
