-- 修复平台默认/学校默认任务分配的 module 存了中文任务名的问题。 -- -- 现象:task_allocation 里 class_id='999999999'(平台默认)与 class_id LIKE 'SCHOOL_DEFAULT:%' -- (学校默认,由 initializeSchoolDefault 从平台默认复制而来)的 module 存的是中文任务展示名 -- (如"行业需求分析-蛋糕指数"),而所有消费方(任务评阅 taskReview、学生端实训任务解析等) -- 都用 module 匹配 training_task.task_key(英文标识),一条都匹配不上。 -- 表现为:没有班级级任务分配的教学班,任务评阅页实训项目/实训任务下拉为空、学生列表为 0, -- 学生端实训列表为空;有班级级分配的教学班(班级管理/实训任务管理保存过)不受影响。 -- -- 2026-10-16 补充:重建时默认只开放第一个项目的前 3 个任务(disabled_status=0), -- 其余任务保留完整目录但置为停用(disabled_status=1),与产品约定一致—— -- 教学班未保存发布配置时,学生端默认只开放第一个项目的前三项,不是全部任务。 -- 综合实训(comprehensive-case-training)仍默认停用,由各班发布后参与。 -- -- 执行前先备份: -- 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 为基线重建(启用任务全量入目录;默认仅第一项目前 3 项开放) 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', tt.task_key, CASE WHEN tt.project_name = fp.project_name AND tt.rank_in_project <= 3 AND tt.task_key <> 'comprehensive-case-training' THEN 0 ELSE 1 END, tt.sort FROM ( SELECT t.task_key, t.sort, COALESCE(t.project_name, '其他') AS project_name, ROW_NUMBER() OVER (PARTITION BY COALESCE(t.project_name, '其他') ORDER BY t.sort ASC, t.id ASC) AS rank_in_project FROM training_task t WHERE t.enabled = 1 ) tt CROSS JOIN ( SELECT COALESCE(project_name, '其他') AS project_name FROM training_task WHERE enabled = 1 AND task_key <> 'comprehensive-case-training' ORDER BY sort ASC, id ASC LIMIT 1 ) fp; -- 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:', ''), '', tt.task_key, -- CASE WHEN tt.project_name = fp.project_name -- AND tt.rank_in_project <= 3 -- AND tt.task_key <> 'comprehensive-case-training' -- THEN 0 ELSE 1 END, -- tt.sort -- FROM ( -- SELECT t.task_key, t.sort, -- COALESCE(t.project_name, '其他') AS project_name, -- ROW_NUMBER() OVER (PARTITION BY COALESCE(t.project_name, '其他') -- ORDER BY t.sort ASC, t.id ASC) AS rank_in_project -- FROM training_task t -- WHERE t.enabled = 1 -- ) tt -- CROSS JOIN ( -- SELECT COALESCE(project_name, '其他') AS project_name -- FROM training_task -- WHERE enabled = 1 AND task_key <> 'comprehensive-case-training' -- ORDER BY sort ASC, id ASC -- LIMIT 1 -- ) fp;