-- ============================================================ -- 医学影像智能质控系统 - 数据库初始化脚本 -- Database: qconline -- Version: 1.0.0 -- Date: 2025-12-25 -- ============================================================ -- 创建数据库 CREATE DATABASE IF NOT EXISTS `qconline` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE `qconline`; -- ============================================================ -- 1. 系统管理模块(5张表) -- ============================================================ -- 1.1 系统用户表 DROP TABLE IF EXISTS `sys_user`; CREATE TABLE `sys_user` ( `id` varchar(32) NOT NULL COMMENT '主键ID', `username` varchar(50) NOT NULL COMMENT '用户名', `password` varchar(255) NOT NULL COMMENT '密码(加密)', `realname` varchar(50) NOT NULL COMMENT '真实姓名', `phone` varchar(20) DEFAULT NULL COMMENT '手机号', `email` varchar(100) DEFAULT NULL COMMENT '邮箱', `avatar` varchar(255) DEFAULT NULL COMMENT '头像', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态:1启用 0禁用', `is_admin` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否管理员:1是 0否', `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_username` (`username`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统用户表'; -- 1.2 机构表 DROP TABLE IF EXISTS `institution`; CREATE TABLE `institution` ( `id` varchar(32) NOT NULL COMMENT '主键ID', `institution_code` varchar(50) NOT NULL COMMENT '机构编码', `institution_name` varchar(100) NOT NULL COMMENT '机构名称', `parent_id` varchar(32) DEFAULT '0' COMMENT '父机构ID,0表示顶级机构', `level` int NOT NULL DEFAULT '1' COMMENT '层级:1一级 2二级...', `contact_person` varchar(50) DEFAULT NULL COMMENT '联系人', `contact_phone` varchar(20) DEFAULT NULL COMMENT '联系电话', `address` varchar(255) DEFAULT NULL COMMENT '地址', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态:1启用 0禁用', `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_code` (`institution_code`), KEY `idx_parent` (`parent_id`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='机构表'; -- 1.3 用户机构关联表 DROP TABLE IF EXISTS `user_institution`; CREATE TABLE `user_institution` ( `id` varchar(32) NOT NULL COMMENT '主键ID', `user_id` varchar(32) NOT NULL COMMENT '用户ID', `institution_id` varchar(32) NOT NULL COMMENT '机构ID', `is_default` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否默认机构:1是 0否', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_inst` (`user_id`, `institution_id`), KEY `idx_user` (`user_id`), KEY `idx_institution` (`institution_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户机构关联表'; -- 1.4 菜单表 DROP TABLE IF EXISTS `menu`; CREATE TABLE `menu` ( `id` varchar(32) NOT NULL COMMENT '主键ID', `menu_name` varchar(50) NOT NULL COMMENT '菜单名称', `menu_code` varchar(50) NOT NULL COMMENT '菜单编码', `parent_id` varchar(32) DEFAULT '0' COMMENT '父菜单ID,0表示顶级菜单', `menu_type` tinyint(1) NOT NULL DEFAULT '1' COMMENT '类型:1目录 2菜单 3按钮', `path` varchar(200) DEFAULT NULL COMMENT '路由路径', `component` varchar(200) DEFAULT NULL COMMENT '组件路径', `icon` varchar(50) DEFAULT NULL COMMENT '图标', `sort_order` int NOT NULL DEFAULT '0' COMMENT '排序', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态:1启用 0禁用', `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_code` (`menu_code`), KEY `idx_parent` (`parent_id`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='菜单表'; -- 1.5 用户菜单权限表 DROP TABLE IF EXISTS `user_menu`; CREATE TABLE `user_menu` ( `id` varchar(32) NOT NULL COMMENT '主键ID', `user_id` varchar(32) NOT NULL COMMENT '用户ID', `menu_id` varchar(32) NOT NULL COMMENT '菜单ID', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_user_menu` (`user_id`, `menu_id`), KEY `idx_user` (`user_id`), KEY `idx_menu` (`menu_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户菜单权限表'; -- ============================================================ -- 2. 患者与检查模块(3张表) -- ============================================================ -- 2.1 患者信息表 DROP TABLE IF EXISTS `patient_info`; CREATE TABLE `patient_info` ( `id` varchar(32) NOT NULL COMMENT '主键ID', `patient_id` varchar(50) NOT NULL COMMENT '患者ID(来自PACS)', `patient_name` varchar(100) NOT NULL COMMENT '患者姓名', `sex` varchar(10) DEFAULT NULL COMMENT '性别:男/女/未知', `birth_date` date DEFAULT NULL COMMENT '出生日期', `age` int DEFAULT NULL COMMENT '年龄', `institution_id` varchar(32) NOT 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`), KEY `idx_patient_id` (`patient_id`), KEY `idx_institution` (`institution_id`), KEY `idx_name` (`patient_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='患者信息表'; -- 2.2 检查信息表 DROP TABLE IF EXISTS `study_info`; CREATE TABLE `study_info` ( `id` varchar(32) NOT NULL COMMENT '主键ID', `study_id` varchar(64) NOT NULL COMMENT '检查ID(用于阅片器调阅)', `study_instance_uid` varchar(128) DEFAULT NULL COMMENT '检查实例UID', `patient_id` varchar(50) NOT NULL COMMENT '患者ID', `study_date` date DEFAULT NULL COMMENT '检查日期', `study_time` time DEFAULT NULL COMMENT '检查时间', `modality` varchar(20) DEFAULT NULL COMMENT '检查方式:CT/MR/DR/CR/US等', `study_description` varchar(255) DEFAULT NULL COMMENT '检查描述', `accession_number` varchar(50) DEFAULT NULL COMMENT '检查号', `institution_id` varchar(32) NOT NULL COMMENT '所属机构ID', `dicom_file_path` varchar(500) DEFAULT NULL COMMENT 'DICOM文件路径', `series_count` int DEFAULT '0' COMMENT '序列数', `image_count` int DEFAULT '0' COMMENT '图像数', `body_part` varchar(50) DEFAULT NULL COMMENT '检查部位', `position` varchar(50) DEFAULT NULL COMMENT '体位', `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_study_id` (`study_id`), KEY `idx_patient` (`patient_id`), KEY `idx_institution` (`institution_id`), KEY `idx_date` (`study_date`), KEY `idx_modality` (`modality`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='检查信息表'; -- 2.3 报告信息表(新增) DROP TABLE IF EXISTS `report_info`; CREATE TABLE `report_info` ( `id` varchar(32) NOT NULL COMMENT '主键ID', `report_id` varchar(64) NOT NULL COMMENT '报告ID', `study_id` varchar(64) NOT NULL COMMENT '检查ID(关联检查)', `patient_id` varchar(50) NOT NULL COMMENT '患者ID', `institution_id` varchar(32) NOT NULL COMMENT '所属机构ID', `findings` text COMMENT '影像所见', `diagnosis` text COMMENT '诊断结论', `report_doctor_id` varchar(32) DEFAULT NULL COMMENT '报告医生ID', `report_doctor_name` varchar(50) DEFAULT NULL COMMENT '报告医生姓名', `report_time` datetime DEFAULT NULL COMMENT '报告时间', `audit_doctor_id` varchar(32) DEFAULT NULL COMMENT '审核医生ID', `audit_doctor_name` varchar(50) DEFAULT NULL COMMENT '审核医生姓名', `audit_time` datetime DEFAULT NULL COMMENT '审核时间', `report_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '报告状态:0未报告 1已报告 2已审核', `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_report_id` (`report_id`), KEY `idx_study` (`study_id`), KEY `idx_patient` (`patient_id`), KEY `idx_institution` (`institution_id`), KEY `idx_report_time` (`report_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='报告信息表'; -- ============================================================ -- 3. 质控核心模块(6张表) -- ============================================================ -- 3.1 质控因子表 DROP TABLE IF EXISTS `qc_factor`; CREATE TABLE `qc_factor` ( `id` varchar(32) NOT NULL COMMENT '主键ID', `factor_code` varchar(50) NOT NULL COMMENT '因子编码', `factor_name` varchar(100) NOT NULL COMMENT '因子名称', `factor_category` tinyint(1) NOT NULL COMMENT '因子分类:1数据质控 2影像质控 3报告质控', `factor_type` varchar(20) NOT NULL DEFAULT 'string' COMMENT '数据类型:string/number/date/boolean', `description` varchar(500) DEFAULT NULL COMMENT '描述', `check_rule` text COMMENT '检查规则(JSON格式)', `data_source` varchar(50) DEFAULT NULL COMMENT '数据来源字段', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态:1启用 0禁用', `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_code` (`factor_code`), KEY `idx_category` (`factor_category`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='质控因子表'; -- 3.2 质控标准表 DROP TABLE IF EXISTS `qc_standard`; CREATE TABLE `qc_standard` ( `id` varchar(32) NOT NULL COMMENT '主键ID', `standard_code` varchar(50) NOT NULL COMMENT '标准编码', `standard_name` varchar(100) NOT NULL COMMENT '标准名称', `standard_category` tinyint(1) NOT NULL COMMENT '标准分类:1数据质控 2影像质控 3报告质控', `description` varchar(500) DEFAULT NULL COMMENT '描述', `pass_score` int NOT NULL DEFAULT '80' COMMENT '合格分数线', `status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '状态:1启用 0禁用', `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_code` (`standard_code`), KEY `idx_category` (`standard_category`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='质控标准表'; -- 3.3 质控标准因子关联表 DROP TABLE IF EXISTS `qc_standard_factor`; CREATE TABLE `qc_standard_factor` ( `id` varchar(32) NOT NULL COMMENT '主键ID', `standard_id` varchar(32) NOT NULL COMMENT '标准ID', `factor_id` varchar(32) NOT NULL COMMENT '因子ID', `weight` decimal(5,2) NOT NULL DEFAULT '0.00' COMMENT '权重(百分比)', `is_required` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否必检:1是 0否', `threshold_value` text COMMENT '阈值(JSON格式,覆盖因子默认规则)', `sort_order` int NOT NULL DEFAULT '0' COMMENT '排序', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_standard_factor` (`standard_id`, `factor_id`), KEY `idx_standard` (`standard_id`), KEY `idx_factor` (`factor_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='质控标准因子关联表'; -- 3.4 质控任务表(支持多质控类型) DROP TABLE IF EXISTS `qc_task`; CREATE TABLE `qc_task` ( `id` varchar(32) NOT NULL COMMENT '主键ID', `task_name` varchar(100) NOT NULL COMMENT '任务名称', `task_code` varchar(50) NOT NULL COMMENT '任务编码', `standard_id` varchar(32) NOT NULL COMMENT '关联质控标准ID', `qc_types` varchar(50) NOT NULL COMMENT '质控类型(JSON数组):[1,2,3] 1数据 2影像 3报告', `institution_id` varchar(32) NOT NULL COMMENT '所属机构ID', `data_range_type` tinyint(1) NOT NULL COMMENT '数据范围类型:1时间范围 2患者列表', `start_date` date DEFAULT NULL COMMENT '开始日期', `end_date` date DEFAULT NULL COMMENT '结束日期', `patient_ids` text COMMENT '患者ID列表(JSON数组)', `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '状态:0待执行 1执行中 2已完成 3失败', `execute_time` datetime DEFAULT NULL COMMENT '执行时间', `complete_time` datetime DEFAULT NULL COMMENT '完成时间', `total_count` int NOT NULL DEFAULT '0' COMMENT '总检查数', `checked_count` int NOT NULL DEFAULT '0' COMMENT '已检数量', `pass_count` int NOT NULL DEFAULT '0' COMMENT '合格数', `fail_count` int NOT NULL DEFAULT '0' COMMENT '不合格数', `is_preset` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否使用预制结果:1是 0否', `create_by` varchar(32) DEFAULT NULL COMMENT '创建人', `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_code` (`task_code`), KEY `idx_standard` (`standard_id`), KEY `idx_institution` (`institution_id`), KEY `idx_status` (`status`), KEY `idx_create_time` (`create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='质控任务表'; -- 3.5 质控结果表 DROP TABLE IF EXISTS `qc_result`; CREATE TABLE `qc_result` ( `id` varchar(32) NOT NULL COMMENT '主键ID', `task_id` varchar(32) NOT NULL COMMENT '任务ID', `study_id` varchar(64) NOT NULL COMMENT '检查ID', `patient_id` varchar(50) NOT NULL COMMENT '患者ID', `institution_id` varchar(32) NOT NULL COMMENT '所属机构ID', `qc_category` tinyint(1) NOT NULL COMMENT '质控类别:1数据质控 2影像质控 3报告质控', `total_score` int NOT NULL DEFAULT '100' COMMENT '总分', `pass_score` int NOT NULL DEFAULT '80' COMMENT '合格分', `actual_score` decimal(5,2) NOT NULL DEFAULT '0.00' COMMENT '实际得分', `is_pass` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否合格:1是 0否', `fail_factors` text COMMENT '不合格因子(JSON数组)', `check_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '质检时间', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_task` (`task_id`), KEY `idx_study` (`study_id`), KEY `idx_patient` (`patient_id`), KEY `idx_institution` (`institution_id`), KEY `idx_pass` (`is_pass`), KEY `idx_check_time` (`check_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='质控结果表'; -- 3.6 预制结果配置表(系统级,用于演示) DROP TABLE IF EXISTS `qc_preset_config`; CREATE TABLE `qc_preset_config` ( `id` varchar(32) NOT NULL COMMENT '主键ID', `config_name` varchar(100) NOT NULL DEFAULT '默认预制配置' COMMENT '配置名称', `total_count` int NOT NULL DEFAULT '100' COMMENT '预设总数', `pass_count` int NOT NULL DEFAULT '75' COMMENT '预设合格数', `fail_count` int NOT NULL DEFAULT '25' COMMENT '预设不合格数', `fail_distribution` text COMMENT '不合格因子分布(JSON)', `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`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='预制结果配置表'; -- ============================================================ -- 4. 系统日志表 -- ============================================================ -- 4.1 操作日志表 DROP TABLE IF EXISTS `sys_log`; CREATE TABLE `sys_log` ( `id` varchar(32) NOT NULL COMMENT '主键ID', `user_id` varchar(32) DEFAULT NULL COMMENT '用户ID', `username` varchar(50) DEFAULT NULL COMMENT '用户名', `operation` varchar(200) DEFAULT NULL COMMENT '操作内容', `method` varchar(200) DEFAULT NULL COMMENT '请求方法', `params` text COMMENT '请求参数', `ip` varchar(50) DEFAULT NULL COMMENT 'IP地址', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_user` (`user_id`), KEY `idx_create_time` (`create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='操作日志表';