fix(sql): 平台/学校默认任务分配 module 存中文任务名导致评阅与学生端解析不到任务的修复脚本

- task_allocation 里 999999999 与 SCHOOL_DEFAULT:* 的 module 存的是中文展示名,
  消费方都用它匹配 training_task.task_key,导致无班级级分配的教学班评阅下拉全空、
  学生列表为 0
- 附判定查询与按学校修复脚本;验收库已手工修复并备份 task_allocation_bak_20261016
main
chenyuan 11 hours ago
parent 516aef2156
commit 99c7167a0a

@ -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) 学校默认:逐个学校执行(把 <SCHOOL_ID> 替换为实际学校ID后运行;
-- 已确认无问题的学校跳过。学校清单:
-- SELECT DISTINCT school_id FROM school_class WHERE class_type='TEACHING';)
-- DELETE FROM task_allocation WHERE class_id = CONCAT('SCHOOL_DEFAULT:', '<SCHOOL_ID>');
-- INSERT INTO task_allocation (id, class_id, school_id, module, disabled_status, sort)
-- SELECT UUID(), CONCAT('SCHOOL_DEFAULT:', '<SCHOOL_ID>'), '<SCHOOL_ID>', task_key,
-- CASE WHEN task_key = 'comprehensive-case-training' THEN 1 ELSE 0 END,
-- sort
-- FROM training_task
-- WHERE enabled = 1;
Loading…
Cancel
Save