sql_migration_qc_task_auto.sql 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254
  1. -- =====================================================
  2. -- 质控任务自动化改造 - 数据库变更脚本
  3. -- 版本: v1.0
  4. -- 日期: 2026-02-03
  5. -- 说明: 支持自动定时任务和手动任务的差异化处理
  6. -- =====================================================
  7. -- =====================================================
  8. -- 第一部分: Quartz调度器表创建
  9. -- =====================================================
  10. -- 注意: 这些是Quartz调度框架所需的表
  11. -- 从Quartz官方获取: https://github.com/quartz-scheduler/quartz/tree/main/docs/dbTables
  12. -- MySQL版本
  13. -- DROP TABLE IF EXISTS QRTZ_FIRED_TRIGGERS;
  14. -- DROP TABLE IF EXISTS QRTZ_PAUSED_TRIGGER_GRPS;
  15. -- DROP TABLE IF EXISTS QRTZ_SCHEDULER_STATE;
  16. -- DROP TABLE IF EXISTS QRTZ_LOCKS;
  17. -- DROP TABLE IF EXISTS QRTZ_SIMPLE_TRIGGERS;
  18. -- DROP TABLE IF EXISTS QRTZ_CRON_TRIGGERS;
  19. -- DROP TABLE IF EXISTS QRTZ_SIMPROP_TRIGGERS;
  20. -- DROP TABLE IF EXISTS QRTZ_BLOB_TRIGGERS;
  21. -- DROP TABLE IF EXISTS QRTZ_TRIGGERS;
  22. -- DROP TABLE IF EXISTS QRTZ_JOB_DETAILS;
  23. -- DROP TABLE IF EXISTS QRTZ_CALENDARS;
  24. CREATE TABLE QRTZ_JOB_DETAILS (
  25. SCHED_NAME VARCHAR(120) NOT NULL,
  26. JOB_NAME VARCHAR(190) NOT NULL,
  27. JOB_GROUP VARCHAR(190) NOT NULL,
  28. DESCRIPTION VARCHAR(250) NULL,
  29. JOB_CLASS_NAME VARCHAR(250) NOT NULL,
  30. IS_DURABLE VARCHAR(1) NOT NULL,
  31. IS_NONCONCURRENT VARCHAR(1) NOT NULL,
  32. IS_UPDATE_DATA VARCHAR(1) NOT NULL,
  33. REQUESTS_RECOVERY VARCHAR(1) NOT NULL,
  34. JOB_DATA BLOB NULL,
  35. PRIMARY KEY (SCHED_NAME, JOB_NAME, JOB_GROUP)
  36. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  37. CREATE TABLE QRTZ_TRIGGERS (
  38. SCHED_NAME VARCHAR(120) NOT NULL,
  39. TRIGGER_NAME VARCHAR(190) NOT NULL,
  40. TRIGGER_GROUP VARCHAR(190) NOT NULL,
  41. JOB_NAME VARCHAR(190) NOT NULL,
  42. JOB_GROUP VARCHAR(190) NOT NULL,
  43. DESCRIPTION VARCHAR(250) NULL,
  44. NEXT_FIRE_TIME BIGINT(13) NULL,
  45. PREV_FIRE_TIME BIGINT(13) NULL,
  46. PRIORITY INTEGER NULL,
  47. TRIGGER_STATE VARCHAR(16) NOT NULL,
  48. TRIGGER_TYPE VARCHAR(8) NOT NULL,
  49. START_TIME BIGINT(13) NOT NULL,
  50. END_TIME BIGINT(13) NULL,
  51. CALENDAR_NAME VARCHAR(190) NULL,
  52. MISFIRE_INSTR SMALLINT(2) NULL,
  53. JOB_DATA BLOB NULL,
  54. PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
  55. FOREIGN KEY (SCHED_NAME, JOB_NAME, JOB_GROUP)
  56. REFERENCES QRTZ_JOB_DETAILS(SCHED_NAME, JOB_NAME, JOB_GROUP)
  57. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  58. CREATE TABLE QRTZ_SIMPLE_TRIGGERS (
  59. SCHED_NAME VARCHAR(120) NOT NULL,
  60. TRIGGER_NAME VARCHAR(190) NOT NULL,
  61. TRIGGER_GROUP VARCHAR(190) NOT NULL,
  62. REPEAT_COUNT BIGINT(7) NOT NULL,
  63. REPEAT_INTERVAL BIGINT(12) NOT NULL,
  64. TIMES_TRIGGERED BIGINT(10) NOT NULL,
  65. PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
  66. FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
  67. REFERENCES QRTZ_TRIGGERS(SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
  68. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  69. CREATE TABLE QRTZ_CRON_TRIGGERS (
  70. SCHED_NAME VARCHAR(120) NOT NULL,
  71. TRIGGER_NAME VARCHAR(190) NOT NULL,
  72. TRIGGER_GROUP VARCHAR(190) NOT NULL,
  73. CRON_EXPRESSION VARCHAR(120) NOT NULL,
  74. TIME_ZONE_ID VARCHAR(80),
  75. PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
  76. FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
  77. REFERENCES QRTZ_TRIGGERS(SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
  78. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  79. CREATE TABLE QRTZ_SIMPROP_TRIGGERS (
  80. SCHED_NAME VARCHAR(120) NOT NULL,
  81. TRIGGER_NAME VARCHAR(190) NOT NULL,
  82. TRIGGER_GROUP VARCHAR(190) NOT NULL,
  83. STR_PROP_1 VARCHAR(512) NULL,
  84. STR_PROP_2 VARCHAR(512) NULL,
  85. STR_PROP_3 VARCHAR(512) NULL,
  86. INT_PROP_1 INT NULL,
  87. INT_PROP_2 INT NULL,
  88. LONG_PROP_1 BIGINT NULL,
  89. LONG_PROP_2 BIGINT NULL,
  90. DEC_PROP_1 NUMERIC(13,4) NULL,
  91. DEC_PROP_2 NUMERIC(13,4) NULL,
  92. BOOL_PROP_1 VARCHAR(1) NULL,
  93. BOOL_PROP_2 VARCHAR(1) NULL,
  94. PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
  95. FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
  96. REFERENCES QRTZ_TRIGGERS(SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
  97. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  98. CREATE TABLE QRTZ_BLOB_TRIGGERS (
  99. SCHED_NAME VARCHAR(120) NOT NULL,
  100. TRIGGER_NAME VARCHAR(190) NOT NULL,
  101. TRIGGER_GROUP VARCHAR(190) NOT NULL,
  102. BLOB_DATA BLOB NULL,
  103. PRIMARY KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP),
  104. FOREIGN KEY (SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
  105. REFERENCES QRTZ_TRIGGERS(SCHED_NAME, TRIGGER_NAME, TRIGGER_GROUP)
  106. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  107. CREATE TABLE QRTZ_CALENDARS (
  108. SCHED_NAME VARCHAR(120) NOT NULL,
  109. CALENDAR_NAME VARCHAR(190) NOT NULL,
  110. CALENDAR BLOB NOT NULL,
  111. PRIMARY KEY (SCHED_NAME, CALENDAR_NAME)
  112. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  113. CREATE TABLE QRTZ_PAUSED_TRIGGER_GRPS (
  114. SCHED_NAME VARCHAR(120) NOT NULL,
  115. TRIGGER_GROUP VARCHAR(190) NOT NULL,
  116. PRIMARY KEY (SCHED_NAME, TRIGGER_GROUP)
  117. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  118. CREATE TABLE QRTZ_FIRED_TRIGGERS (
  119. SCHED_NAME VARCHAR(120) NOT NULL,
  120. ENTRY_ID VARCHAR(95) NOT NULL,
  121. TRIGGER_NAME VARCHAR(190) NOT NULL,
  122. TRIGGER_GROUP VARCHAR(190) NOT NULL,
  123. INSTANCE_NAME VARCHAR(190) NOT NULL,
  124. FIRED_TIME BIGINT(13) NOT NULL,
  125. SCHED_TIME BIGINT(13) NOT NULL,
  126. PRIORITY INTEGER NOT NULL,
  127. STATE VARCHAR(16) NOT NULL,
  128. JOB_NAME VARCHAR(190) NULL,
  129. JOB_GROUP VARCHAR(190) NULL,
  130. IS_NONCONCURRENT VARCHAR(1) NULL,
  131. REQUESTS_RECOVERY VARCHAR(1) NULL,
  132. PRIMARY KEY (SCHED_NAME, ENTRY_ID)
  133. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  134. CREATE TABLE QRTZ_SCHEDULER_STATE (
  135. SCHED_NAME VARCHAR(120) NOT NULL,
  136. INSTANCE_NAME VARCHAR(190) NOT NULL,
  137. LAST_CHECKIN_TIME BIGINT(13) NOT NULL,
  138. CHECKIN_INTERVAL BIGINT(13) NOT NULL,
  139. PRIMARY KEY (SCHED_NAME, INSTANCE_NAME)
  140. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  141. CREATE TABLE QRTZ_LOCKS (
  142. SCHED_NAME VARCHAR(120) NOT NULL,
  143. LOCK_NAME VARCHAR(40) NOT NULL,
  144. PRIMARY KEY (SCHED_NAME, LOCK_NAME)
  145. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
  146. -- =====================================================
  147. -- 第二部分: 质控任务执行记录表
  148. -- =====================================================
  149. CREATE TABLE IF NOT EXISTS `qc_task_execution` (
  150. `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT '执行记录ID',
  151. `task_id` VARCHAR(64) NOT NULL COMMENT '关联任务ID',
  152. `task_name` VARCHAR(255) NOT NULL COMMENT '任务名称(快照)',
  153. `execute_no` INT NOT NULL DEFAULT 1 COMMENT '执行编号(第N次执行)',
  154. `plan_execute_time` DATETIME NOT NULL COMMENT '计划执行时间',
  155. `actual_execute_time` DATETIME DEFAULT NULL COMMENT '实际执行时间',
  156. -- 执行结果统计
  157. `plan_count` INT DEFAULT 0 COMMENT '计划数量',
  158. `total_count` INT DEFAULT 0 COMMENT '实际检查数量',
  159. `completed_count` INT DEFAULT 0 COMMENT '已完成数量',
  160. `pass_count` INT DEFAULT 0 COMMENT '通过数量',
  161. `fail_count` INT DEFAULT 0 COMMENT '不通过数量',
  162. `pass_rate` DECIMAL(5,2) DEFAULT 0.00 COMMENT '通过率(%)',
  163. -- 时间信息
  164. `start_time` DATETIME DEFAULT NULL COMMENT '开始执行时间',
  165. `end_time` DATETIME DEFAULT NULL COMMENT '结束执行时间',
  166. `duration` INT DEFAULT NULL COMMENT '执行耗时(秒)',
  167. -- 错误信息
  168. `error_message` TEXT COMMENT '失败原因',
  169. `stack_trace` TEXT COMMENT '错误堆栈',
  170. -- 基础字段
  171. `creator` VARCHAR(64) DEFAULT NULL COMMENT '创建人',
  172. `create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  173. `update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  174. `is_deleted` TINYINT NOT NULL DEFAULT 0 COMMENT '删除标记',
  175. PRIMARY KEY (`id`),
  176. KEY `idx_task_id` (`task_id`),
  177. KEY `idx_execute_time` (`plan_execute_time`),
  178. KEY `idx_status` (`status`)
  179. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='质控任务执行记录表';
  180. -- =====================================================
  181. -- 第三部分: 修改现有的质控任务表
  182. -- =====================================================
  183. -- 添加自动任务相关字段到qc_task表
  184. ALTER TABLE `qc_task`
  185. ADD COLUMN `schedule_config` JSON DEFAULT NULL COMMENT '定时配置(自动任务使用)' AFTER `task_type`,
  186. ADD COLUMN `is_enabled` TINYINT NOT NULL DEFAULT 1 COMMENT '是否启用:0禁用/1启用' AFTER `schedule_config`,
  187. ADD COLUMN `next_execute_time` DATETIME DEFAULT NULL COMMENT '下次执行时间(自动任务)' AFTER `is_enabled`,
  188. ADD COLUMN `last_execute_time` DATETIME DEFAULT NULL COMMENT '上次执行时间(自动任务)' AFTER `next_execute_time`;
  189. -- schedule_config JSON结构示例:
  190. -- {
  191. -- "scheduleType": "weekly", // daily/weekly/monthly/custom
  192. -- "cronExpression": "0 0 10 ? * MON", // Cron表达式
  193. -- "sampleCount": 100,
  194. -- "sampleType": "random" // random/sequential
  195. -- }
  196. -- =====================================================
  197. -- 第四部分: 修改检查关联表和结果表
  198. -- =====================================================
  199. -- 修改qc_task_exam表,添加execution_id字段
  200. -- 注意: 这个表需要先查看表结构,根据实际情况添加
  201. -- ALTER TABLE `qc_task_exam`
  202. -- ADD COLUMN `execution_id` BIGINT DEFAULT NULL COMMENT '执行记录ID(自动任务必填,手动任务为空)' AFTER `task_id`,
  203. -- ADD INDEX `idx_execution_id` (`execution_id`);
  204. -- 修改qc_task_image_result表,添加execution_id字段
  205. -- 注意: 这个表需要先查看表结构,根据实际情况添加
  206. -- ALTER TABLE `qc_task_image_result`
  207. -- ADD COLUMN `execution_id` BIGINT DEFAULT NULL COMMENT '执行记录ID(自动任务必填)' AFTER `task_id`,
  208. -- ADD INDEX `idx_execution_id` (`execution_id`);
  209. -- =====================================================
  210. -- 第五部分: 创建索引以优化查询性能
  211. -- =====================================================
  212. -- qc_task表索引
  213. CREATE INDEX `idx_task_type` ON `qc_task` (`task_type`);
  214. CREATE INDEX `idx_institution_id` ON `qc_task` (`institution_id`);
  215. CREATE INDEX `idx_is_enabled` ON `qc_task` (`is_enabled`);
  216. -- =====================================================
  217. -- 说明
  218. -- =====================================================
  219. -- 1. 执行本脚本前请备份数据库
  220. -- 2. Quartz表创建语句来自官方,支持MySQL
  221. -- 3. qc_task_execution表用于记录自动任务的每次执行历史
  222. -- 4. schedule_config字段存储JSON格式的定时任务配置
  223. -- 5. execution_id用于关联执行记录与检查数据、质控结果
  224. -- 6. 手动任务的execution_id为NULL,自动任务的execution_id不为NULL
  225. -- =====================================================