You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
dianshang-houduan/docs/sql/2026-07-30-backfill-school-...

45 lines
1.7 KiB
SQL

-- 为已有学校补齐学校级默认实训任务;不会覆盖任何学校管理员已保存的默认配置。
START TRANSACTION;
CREATE TABLE IF NOT EXISTS school_default_task_initialization (
school_id varchar(64) NOT NULL,
status varchar(16) NOT NULL,
last_error varchar(1000) NULL,
attempt_count int NOT NULL DEFAULT 0,
create_time datetime NOT NULL,
update_time datetime NOT NULL,
PRIMARY KEY (school_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学校默认实训任务初始化状态';
INSERT INTO task_allocation (id, class_id, school_id, module, disabled_status, sort)
SELECT UUID(), CONCAT('SCHOOL_DEFAULT:', CONVERT(s.school_id USING BINARY)), s.school_id, p.module, p.disabled_status, p.sort
FROM school s
JOIN task_allocation p ON BINARY p.class_id = BINARY '999999999'
WHERE BINARY s.school_id <> BINARY '999999999'
AND NOT EXISTS (
SELECT 1
FROM task_allocation existing_task
WHERE BINARY existing_task.class_id = BINARY CONCAT('SCHOOL_DEFAULT:', CONVERT(s.school_id USING BINARY))
);
INSERT INTO school_default_task_initialization (
school_id, status, last_error, attempt_count, create_time, update_time
)
SELECT s.school_id, 'READY', NULL, 1, NOW(), NOW()
FROM school s
WHERE BINARY s.school_id <> BINARY '999999999'
AND EXISTS (
SELECT 1
FROM task_allocation default_task
WHERE BINARY default_task.class_id = BINARY CONCAT('SCHOOL_DEFAULT:', CONVERT(s.school_id USING BINARY))
)
ON DUPLICATE KEY UPDATE
status = IF(school_default_task_initialization.status = 'READY', school_default_task_initialization.status, 'READY'),
update_time = NOW();
COMMIT;
SELECT school_id, status, attempt_count, update_time
FROM school_default_task_initialization
ORDER BY update_time DESC;