dicom_enhancement.sql 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. -- ============================================================
  2. -- DICOM影像增强功能 - 数据库表结构
  3. -- 功能:序列信息存储、实例信息存储、多部位检查拆分
  4. -- ============================================================
  5. USE `qconline`;
  6. -- ============================================================
  7. -- 1. 创建序列信息表
  8. -- ============================================================
  9. DROP TABLE IF EXISTS `series_info`;
  10. CREATE TABLE `series_info` (
  11. `id` varchar(32) NOT NULL COMMENT '主键ID',
  12. `study_id` varchar(64) NOT NULL COMMENT '检查ID(关联study_info表)',
  13. `series_instance_uid` varchar(128) NOT NULL COMMENT '序列实例UID',
  14. `series_number` int DEFAULT NULL COMMENT '序列号',
  15. `series_description` varchar(255) DEFAULT NULL COMMENT '序列描述',
  16. `modality` varchar(16) DEFAULT NULL COMMENT '检查类型',
  17. `body_part_examined` varchar(50) DEFAULT NULL COMMENT '检查部位',
  18. `view_position` varchar(50) DEFAULT NULL COMMENT '体位',
  19. `protocol_name` varchar(128) DEFAULT NULL COMMENT '扫描协议名称',
  20. `image_count` int DEFAULT 0 COMMENT '图像数量',
  21. `series_date` date DEFAULT NULL COMMENT '序列日期',
  22. `series_time` time DEFAULT NULL COMMENT '序列时间',
  23. `slice_thickness` decimal(10,4) DEFAULT NULL COMMENT '层厚(mm)',
  24. `pixel_spacing` varchar(50) DEFAULT NULL COMMENT '像素间距',
  25. `rows` int DEFAULT NULL COMMENT '图像行数',
  26. `columns` int DEFAULT NULL COMMENT '图像列数',
  27. `exam_item_name` varchar(128) DEFAULT NULL COMMENT '检查项目名称(用于多部位拆分)',
  28. `institution_id` varchar(32) DEFAULT NULL COMMENT '机构ID',
  29. `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  30. `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  31. PRIMARY KEY (`id`),
  32. UNIQUE KEY `uk_series_uid` (`series_instance_uid`),
  33. KEY `idx_study` (`study_id`),
  34. KEY `idx_series_number` (`series_number`),
  35. KEY `idx_body_part` (`body_part_examined`),
  36. KEY `idx_exam_item` (`exam_item_name`)
  37. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='序列信息表';
  38. -- ============================================================
  39. -- 2. 创建DICOM实例信息表(每个DICOM文件对应一个实例)
  40. -- ============================================================
  41. DROP TABLE IF EXISTS `dicom_instance_info`;
  42. CREATE TABLE `dicom_instance_info` (
  43. `id` varchar(32) NOT NULL COMMENT '主键ID',
  44. `study_id` varchar(64) NOT NULL COMMENT '检查ID',
  45. `series_id` varchar(32) NOT NULL COMMENT '序列ID(关联series_info表)',
  46. `series_instance_uid` varchar(128) NOT NULL COMMENT '序列实例UID',
  47. `sop_instance_uid` varchar(128) NOT NULL COMMENT 'SOP实例UID',
  48. `instance_number` int DEFAULT NULL COMMENT '实例号',
  49. `file_path` varchar(500) NOT NULL COMMENT 'DICOM文件路径',
  50. `file_size` bigint DEFAULT 0 COMMENT '文件大小(字节)',
  51. `file_md5` varchar(32) DEFAULT NULL COMMENT '文件MD5值',
  52. `image_position` varchar(100) DEFAULT NULL COMMENT '图像位置',
  53. `image_orientation` varchar(200) DEFAULT NULL COMMENT '图像方向',
  54. `window_center` varchar(50) DEFAULT NULL COMMENT '窗位',
  55. `window_width` varchar(50) DEFAULT NULL COMMENT '窗宽',
  56. `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  57. PRIMARY KEY (`id`),
  58. UNIQUE KEY `uk_sop_uid` (`sop_instance_uid`),
  59. KEY `idx_study` (`study_id`),
  60. KEY `idx_series` (`series_id`),
  61. KEY `idx_series_uid` (`series_instance_uid`),
  62. KEY `idx_instance_number` (`instance_number`)
  63. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='DICOM实例信息表';
  64. -- ============================================================
  65. -- 3. 修改检查项目拆分记录表,添加序列信息字段
  66. -- ============================================================
  67. -- 检查表是否存在,如果不存在则创建
  68. CREATE TABLE IF NOT EXISTS `study_split_record` (
  69. `id` varchar(32) NOT NULL COMMENT '主键ID',
  70. `original_study_id` varchar(64) NOT NULL COMMENT '原始检查ID',
  71. `original_study_description` varchar(255) DEFAULT NULL COMMENT '原始检查描述(多部位)',
  72. `split_study_id` varchar(64) NOT NULL COMMENT '拆分后的检查ID',
  73. `split_study_description` varchar(255) DEFAULT NULL COMMENT '拆分后的检查描述(单部位)',
  74. `body_part` varchar(50) DEFAULT NULL COMMENT '检查部位',
  75. `image_count` int DEFAULT '0' COMMENT '该部位的图像数量',
  76. `split_reason` varchar(500) DEFAULT NULL COMMENT '拆分原因说明',
  77. `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  78. PRIMARY KEY (`id`),
  79. KEY `idx_original_study` (`original_study_id`),
  80. KEY `idx_split_study` (`split_study_id`)
  81. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='检查项目拆分记录表';
  82. -- 添加新字段(如果已存在会报错,可忽略)
  83. ALTER TABLE `study_split_record`
  84. ADD COLUMN `exam_item_name` varchar(128) DEFAULT NULL COMMENT '检查项目名称' AFTER `split_study_description`,
  85. ADD COLUMN `series_uids` text COMMENT '包含的序列UID列表(JSON格式)' AFTER `body_part`,
  86. ADD COLUMN `series_count` int DEFAULT 0 COMMENT '序列数量' AFTER `series_uids`;
  87. -- ============================================================
  88. -- 说明
  89. -- ============================================================
  90. /*
  91. 功能说明:
  92. 1. series_info 表:存储每个序列的详细信息,包括序列号、描述、检查项目名称等
  93. 2. dicom_instance_info 表:存储每个DICOM文件(实例)的详细信息
  94. 3. study_split_record 表:扩展了序列相关字段,用于多部位检查项目拆分
  95. 使用流程:
  96. 1. 上传DICOM文件后,系统自动异步解析序列和实例信息
  97. 2. 如果检测到多个检查项目(如"颈椎+胸部"),自动创建拆分记录
  98. 3. 查询接口支持按检查项目名称过滤,返回对应部位的序列数据
  99. 查询接口:
  100. GET /api/dicom/query
  101. 参数:
  102. - study_instance_uid: 检查实例UID(必填)
  103. - institution_id: 机构ID(必填)
  104. - exam_item_name: 检查项目名称(可选,用于多部位拆分查询)
  105. 示例:
  106. 全部查询:/api/dicom/query?study_instance_uid=xxx&institution_id=yyy
  107. 部位查询:/api/dicom/query?study_instance_uid=xxx&institution_id=yyy&exam_item_name=颈椎
  108. */