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.
77 lines
3.8 KiB
SQL
77 lines
3.8 KiB
SQL
-- 修复平台默认/学校默认任务分配的 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) 学校默认:逐个学校执行(把 <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>', 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;
|