| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 |
- -- =====================================================
- -- 质控任务自动化改造 - 数据库变更脚本
- -- 版本: v1.0
- -- 日期: 2026-02-03
- -- 说明: 支持自动定时任务和手动任务的差异化处理
- -- =====================================================
- -- =====================================================
- -- 第一部分: Quartz调度器表创建
- -- =====================================================
- -- 注意: 这些是Quartz调度框架所需的表
- -- 从Quartz官方获取: https://github.com/quartz-scheduler/quartz/tree/main/docs/dbTables
- -- MySQL版本
- -- DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
- -- DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
- -- DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
- -- DROP TABLE IF EXISTS QRTZ_LOCKS;
- -- DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
- -- DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;
- -- DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;
- -- DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;
- -- DROP TABLE IF EXISTS QRTZ_TRIGGERS;
- -- DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
- -- DROP TABLE IF EXISTS QRTZ_CALENDARS;
- CREATE TABLE QRTZ_JOB_DETAILS (
- SCHED_NAME VARCHAR(120) NOT NULL,
- JOB_NAME VARCHAR(190) NOT NULL,
- JOB_GROUP VARCHAR(190) NOT NULL,
- DESCRIPTION VARCHAR(250) NULL,
- JOB_CLASS_NAME VARCHAR(250) NOT NULL,
- IS_DURABLE VARCHAR(1) NOT NULL,
- IS_NONCONCURRENT VARCHAR(1) NOT NULL,
- IS_UPDATE_DATA VARCHAR(1) NOT NULL,
- REQUESTS_RECOVERY VARCHAR(1) NOT NULL,
- JOB_DATA BLOB NULL,
- PRIMARY KEY (SCHED_NAME, JOB_NAME, JOB_GROUP)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- CREATE TABLE QRTZ_TRIGGERS (
- SCHED_NAME VARCHAR(120) NOT NULL,
- TRIGGER_NAME VARCHAR(190) NOT NULL,
- TRIGGER_GROUP VARCHAR(190) NOT NULL,
- JOB_NAME VARCHAR(190) NOT NULL,
- JOB_GROUP VARCHAR(190) NOT NULL,
- DESCRIPTION VARCHAR(250) NULL,
- NEXT_FIRE_TIME BIGINT(13) NULL,
- PREV_FIRE_TIME BIGINT(13) NULL,
- PRIORITY INTEGER NULL,
- TRIGGER_STATE VARCHAR(16) NOT NULL,
- TRIGGER_TYPE VARCHAR(8) NOT NULL,
- START_TIME BIGINT(13) NOT NULL,
- END_TIME BIGINT(13) NULL,
- CALENDAR_NAME VARCHAR(190) NULL,
- MISFIRE_INSTR SMALLINT(2) NULL,
- JOB_DATA BLOB NULL,
- PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
- FOREIGN KEY (SCHED_NAME, JOB_NAME, JOB_GROUP)
- REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME, JOB_NAME, JOB_GROUP)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- CREATE TABLE QRTZ_SIMPLE_TRIGGERS (
- SCHED_NAME VARCHAR(120) NOT NULL,
- TRIGGER_NAME VARCHAR(190) NOT NULL,
- TRIGGER_GROUP VARCHAR(190) NOT NULL,
- REPEAT_COUNT BIGINT(7) NOT NULL,
- REPEAT_INTERVAL BIGINT(12) NOT NULL,
- TIMES_TRIGGERED BIGINT(10) NOT NULL,
- PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
- FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
- REFERENCES QRTZ_TRIGGERS(SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- CREATE TABLE QRTZ_CRON_TRIGGERS (
- SCHED_NAME VARCHAR(120) NOT NULL,
- TRIGGER_NAME VARCHAR(190) NOT NULL,
- TRIGGER_GROUP VARCHAR(190) NOT NULL,
- CRON_EXPRESSION VARCHAR(120) NOT NULL,
- TIME_ZONE_ID VARCHAR(80),
- PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
- FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
- REFERENCES QRTZ_TRIGGERS(SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- CREATE TABLE QRTZ_SIMPROP_TRIGGERS (
- SCHED_NAME VARCHAR(120) NOT NULL,
- TRIGGER_NAME VARCHAR(190) NOT NULL,
- TRIGGER_GROUP VARCHAR(190) NOT NULL,
- STR_PROP_1 VARCHAR(512) NULL,
- STR_PROP_2 VARCHAR(512) NULL,
- STR_PROP_3 VARCHAR(512) NULL,
- INT_PROP_1 INT NULL,
- INT_PROP_2 INT NULL,
- LONG_PROP_1 BIGINT NULL,
- LONG_PROP_2 BIGINT NULL,
- DEC_PROP_1 NUMERIC(13,4) NULL,
- DEC_PROP_2 NUMERIC(13,4) NULL,
- BOOL_PROP_1 VARCHAR(1) NULL,
- BOOL_PROP_2 VARCHAR(1) NULL,
- PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
- FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
- REFERENCES QRTZ_TRIGGERS(SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- CREATE TABLE QRTZ_BLOB_TRIGGERS (
- SCHED_NAME VARCHAR(120) NOT NULL,
- TRIGGER_NAME VARCHAR(190) NOT NULL,
- TRIGGER_GROUP VARCHAR(190) NOT NULL,
- BLOB_DATA BLOB NULL,
- PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
- FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
- REFERENCES QRTZ_TRIGGERS(SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- CREATE TABLE QRTZ_CALENDARS (
- SCHED_NAME VARCHAR(120) NOT NULL,
- CALENDAR_NAME VARCHAR(190) NOT NULL,
- CALENDAR BLOB NOT NULL,
- PRIMARY KEY (SCHED_NAME, CALENDAR_NAME)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS (
- SCHED_NAME VARCHAR(120) NOT NULL,
- TRIGGER_GROUP VARCHAR(190) NOT NULL,
- PRIMARY KEY (SCHED_NAME, TRIGGER_GROUP)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- CREATE TABLE QRTZ_FIRED_TRIGGERS (
- SCHED_NAME VARCHAR(120) NOT NULL,
- ENTRY_ID VARCHAR(95) NOT NULL,
- TRIGGER_NAME VARCHAR(190) NOT NULL,
- TRIGGER_GROUP VARCHAR(190) NOT NULL,
- INSTANCE_NAME VARCHAR(190) NOT NULL,
- FIRED_TIME BIGINT(13) NOT NULL,
- SCHED_TIME BIGINT(13) NOT NULL,
- PRIORITY INTEGER NOT NULL,
- STATE VARCHAR(16) NOT NULL,
- JOB_NAME VARCHAR(190) NULL,
- JOB_GROUP VARCHAR(190) NULL,
- IS_NONCONCURRENT VARCHAR(1) NULL,
- REQUESTS_RECOVERY VARCHAR(1) NULL,
- PRIMARY KEY (SCHED_NAME, ENTRY_ID)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- CREATE TABLE QRTZ_SCHEDULER_STATE (
- SCHED_NAME VARCHAR(120) NOT NULL,
- INSTANCE_NAME VARCHAR(190) NOT NULL,
- LAST_CHECKIN_TIME BIGINT(13) NOT NULL,
- CHECKIN_INTERVAL BIGINT(13) NOT NULL,
- PRIMARY KEY (SCHED_NAME, INSTANCE_NAME)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- CREATE TABLE QRTZ_LOCKS (
- SCHED_NAME VARCHAR(120) NOT NULL,
- LOCK_NAME VARCHAR(40) NOT NULL,
- PRIMARY KEY (SCHED_NAME, LOCK_NAME)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
- -- =====================================================
- -- 第二部分: 质控任务执行记录表
- -- =====================================================
- CREATE TABLE IF NOT EXISTS `qc_task_execution` (
- `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '执行记录ID',
- `task_id` VARCHAR(64) NOT NULL COMMENT '关联任务ID',
- `task_name` VARCHAR(255) NOT NULL COMMENT '任务名称(快照)',
- `execute_no` INT NOT NULL DEFAULT 1 COMMENT '执行编号(第N次执行)',
- `plan_execute_time` DATETIME NOT NULL COMMENT '计划执行时间',
- `actual_execute_time` DATETIME DEFAULT NULL COMMENT '实际执行时间',
- -- 执行结果统计
- `plan_count` INT DEFAULT 0 COMMENT '计划数量',
- `total_count` INT DEFAULT 0 COMMENT '实际检查数量',
- `completed_count` INT DEFAULT 0 COMMENT '已完成数量',
- `pass_count` INT DEFAULT 0 COMMENT '通过数量',
- `fail_count` INT DEFAULT 0 COMMENT '不通过数量',
- `pass_rate` DECIMAL(5,2) DEFAULT 0.00 COMMENT '通过率(%)',
- -- 时间信息
- `start_time` DATETIME DEFAULT NULL COMMENT '开始执行时间',
- `end_time` DATETIME DEFAULT NULL COMMENT '结束执行时间',
- `duration` INT DEFAULT NULL COMMENT '执行耗时(秒)',
- -- 错误信息
- `error_message` TEXT COMMENT '失败原因',
- `stack_trace` TEXT COMMENT '错误堆栈',
- -- 基础字段
- `creator` VARCHAR(64) 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 '修改时间',
- `is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '删除标记',
- PRIMARY KEY (`id`),
- KEY `idx_task_id` (`task_id`),
- KEY `idx_execute_time` (`plan_execute_time`),
- KEY `idx_status` (`status`)
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='质控任务执行记录表';
- -- =====================================================
- -- 第三部分: 修改现有的质控任务表
- -- =====================================================
- -- 添加自动任务相关字段到qc_task表
- ALTER TABLE `qc_task`
- ADD COLUMN `schedule_config` JSON DEFAULT NULL COMMENT '定时配置(自动任务使用)' AFTER `task_type`,
- ADD COLUMN `is_enabled` TINYINT NOT NULL DEFAULT 1 COMMENT '是否启用:0禁用/1启用' AFTER `schedule_config`,
- ADD COLUMN `next_execute_time` DATETIME DEFAULT NULL COMMENT '下次执行时间(自动任务)' AFTER `is_enabled`,
- ADD COLUMN `last_execute_time` DATETIME DEFAULT NULL COMMENT '上次执行时间(自动任务)' AFTER `next_execute_time`;
- -- schedule_config JSON结构示例:
- -- {
- -- "scheduleType": "weekly", // daily/weekly/monthly/custom
- -- "cronExpression": "0 0 10 ? * MON", // Cron表达式
- -- "sampleCount": 100,
- -- "sampleType": "random" // random/sequential
- -- }
- -- =====================================================
- -- 第四部分: 修改检查关联表和结果表
- -- =====================================================
- -- 修改qc_task_exam表,添加execution_id字段
- -- 注意: 这个表需要先查看表结构,根据实际情况添加
- -- ALTER TABLE `qc_task_exam`
- -- ADD COLUMN `execution_id` BIGINT DEFAULT NULL COMMENT '执行记录ID(自动任务必填,手动任务为空)' AFTER `task_id`,
- -- ADD INDEX `idx_execution_id` (`execution_id`);
- -- 修改qc_task_image_result表,添加execution_id字段
- -- 注意: 这个表需要先查看表结构,根据实际情况添加
- -- ALTER TABLE `qc_task_image_result`
- -- ADD COLUMN `execution_id` BIGINT DEFAULT NULL COMMENT '执行记录ID(自动任务必填)' AFTER `task_id`,
- -- ADD INDEX `idx_execution_id` (`execution_id`);
- -- =====================================================
- -- 第五部分: 创建索引以优化查询性能
- -- =====================================================
- -- qc_task表索引
- CREATE INDEX `idx_task_type` ON `qc_task` (`task_type`);
- CREATE INDEX `idx_institution_id` ON `qc_task` (`institution_id`);
- CREATE INDEX `idx_is_enabled` ON `qc_task` (`is_enabled`);
- -- =====================================================
- -- 说明
- -- =====================================================
- -- 1. 执行本脚本前请备份数据库
- -- 2. Quartz表创建语句来自官方,支持MySQL
- -- 3. qc_task_execution表用于记录自动任务的每次执行历史
- -- 4. schedule_config字段存储JSON格式的定时任务配置
- -- 5. execution_id用于关联执行记录与检查数据、质控结果
- -- 6. 手动任务的execution_id为NULL,自动任务的execution_id不为NULL
- -- =====================================================
|