diff --git a/docs/sql/2026-10-16-repair-task-allocation-module-keys.sql b/docs/sql/2026-10-16-repair-task-allocation-module-keys.sql new file mode 100644 index 0000000..96aba2d --- /dev/null +++ b/docs/sql/2026-10-16-repair-task-allocation-module-keys.sql @@ -0,0 +1,39 @@ +-- 修复平台默认/学校默认任务分配的 module 存了中文任务名的问题。 +-- +-- 现象:task_allocation 里 class_id='999999999'(平台默认)与 class_id LIKE 'SCHOOL_DEFAULT:%' +-- (学校默认,由 initializeSchoolDefault 从平台默认复制而来)的 module 存的是中文任务展示名 +-- (如"行业需求分析-蛋糕指数"),而所有消费方(任务评阅 taskReview、学生端实训任务解析等) +-- 都用 module 匹配 training_task.task_key(英文标识),一条都匹配不上。 +-- 表现为:没有班级级任务分配的教学班,任务评阅页实训项目/实训任务下拉为空、学生列表为 0, +-- 学生端实训列表为空;有班级级分配的教学班(班级管理/实训任务管理保存过)不受影响。 +-- +-- 执行前先备份: +-- CREATE TABLE task_allocation_bak_20261016 AS +-- SELECT * FROM task_allocation +-- WHERE class_id='999999999' OR class_id LIKE 'SCHOOL_DEFAULT:%'; +-- +-- 判定是否需要执行: +-- SELECT a.module FROM task_allocation a +-- LEFT JOIN training_task t ON t.task_key = a.module +-- WHERE (a.class_id='999999999' OR a.class_id LIKE 'SCHOOL_DEFAULT:%') AND t.id IS NULL; +-- 查出中文任务名即需要修复。 + +-- 1) 平台默认:以 training_task 为基线重建(24 个启用任务;综合实训默认停用,由各班发布后参与) +DELETE FROM task_allocation WHERE class_id = '999999999'; +INSERT INTO task_allocation (id, class_id, school_id, module, disabled_status, sort) +SELECT UUID(), '999999999', '999999999', task_key, + CASE WHEN task_key = 'comprehensive-case-training' THEN 1 ELSE 0 END, + sort +FROM training_task +WHERE enabled = 1; + +-- 2) 学校默认:逐个学校执行(把 替换为实际学校ID后运行; +-- 已确认无问题的学校跳过。学校清单: +-- SELECT DISTINCT school_id FROM school_class WHERE class_type='TEACHING';) +-- DELETE FROM task_allocation WHERE class_id = CONCAT('SCHOOL_DEFAULT:', ''); +-- INSERT INTO task_allocation (id, class_id, school_id, module, disabled_status, sort) +-- SELECT UUID(), CONCAT('SCHOOL_DEFAULT:', ''), '', task_key, +-- CASE WHEN task_key = 'comprehensive-case-training' THEN 1 ELSE 0 END, +-- sort +-- FROM training_task +-- WHERE enabled = 1;