feat: 学校默认实训任务初始化默认只开放第一个项目前三项
- initializeSchoolDefault 复制平台基线时按默认开放清单置停用状态, 其余任务保留完整目录但停用,学校管理员可在默认实训任务配置页放开 - 同步修复脚本说明与测试main
parent
d6ebf06afa
commit
e2f550de99
@ -0,0 +1,53 @@
|
|||||||
|
-- 默认任务开放范围调整:平台默认/学校默认只默认开放第一个项目的前 3 个任务。
|
||||||
|
--
|
||||||
|
-- 背景:此前平台默认(class_id='999999999')与学校默认(class_id LIKE 'SCHOOL_DEFAULT:%')
|
||||||
|
-- 的任务目录默认全部开放,与产品约定不一致——任务分配的默认口径是
|
||||||
|
-- "教学班未保存发布配置时,仅默认开放第一个项目的前三项,不是全部任务"。
|
||||||
|
--
|
||||||
|
-- 影响范围:只调整 disabled_status,不增删任务、不改 module/sort;
|
||||||
|
-- 第一个项目的前 3 项置为开放(0),其余任务(含综合实训)置为停用(1)。
|
||||||
|
-- 学校管理员仍可在"默认实训任务配置"页按需放开。
|
||||||
|
--
|
||||||
|
-- 前置条件:task_allocation.module 已是英文 task_key,即已执行
|
||||||
|
-- 2026-10-16-repair-task-allocation-module-keys.sql
|
||||||
|
-- 若仍有中文任务名残留,JOIN 不上的行保持原值,请先执行修复脚本重建。
|
||||||
|
--
|
||||||
|
-- 幂等:可重复执行。执行前建议备份:
|
||||||
|
-- CREATE TABLE task_allocation_bak_20261016_first3 AS
|
||||||
|
-- SELECT * FROM task_allocation
|
||||||
|
-- WHERE class_id='999999999' OR class_id LIKE 'SCHOOL_DEFAULT:%';
|
||||||
|
|
||||||
|
-- 1) 第一项目前 3 项开放,其余启用目录内的任务置为停用
|
||||||
|
UPDATE task_allocation a
|
||||||
|
JOIN training_task t ON t.task_key = a.module
|
||||||
|
JOIN (
|
||||||
|
SELECT task_key,
|
||||||
|
ROW_NUMBER() OVER (ORDER BY sort ASC, id ASC) AS rank_in_project,
|
||||||
|
COALESCE(project_name, '其他') AS project_name
|
||||||
|
FROM training_task
|
||||||
|
WHERE enabled = 1
|
||||||
|
AND task_key <> 'comprehensive-case-training'
|
||||||
|
) ranked ON ranked.task_key = a.module
|
||||||
|
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
|
||||||
|
SET a.disabled_status = CASE WHEN ranked.project_name = fp.project_name
|
||||||
|
AND ranked.rank_in_project <= 3
|
||||||
|
THEN 0 ELSE 1 END
|
||||||
|
WHERE a.class_id = '999999999' OR a.class_id LIKE 'SCHOOL_DEFAULT:%';
|
||||||
|
|
||||||
|
-- 2) 综合实训始终默认停用(各班发布后才参与)
|
||||||
|
UPDATE task_allocation
|
||||||
|
SET disabled_status = 1
|
||||||
|
WHERE (class_id = '999999999' OR class_id LIKE 'SCHOOL_DEFAULT:%')
|
||||||
|
AND module = 'comprehensive-case-training';
|
||||||
|
|
||||||
|
-- 3) 校验:每个 class_id 下应只有 3 条开放(即第一个项目的前 3 项)
|
||||||
|
SELECT a.class_id, SUM(a.disabled_status = 0) AS open_count, COUNT(*) AS total
|
||||||
|
FROM task_allocation a
|
||||||
|
WHERE a.class_id = '999999999' OR a.class_id LIKE 'SCHOOL_DEFAULT:%'
|
||||||
|
GROUP BY a.class_id;
|
||||||
Loading…
Reference in New Issue