From 5d847faa428f4e177dba998b9694d3bf6ae6e48d Mon Sep 17 00:00:00 2001 From: chenyuan Date: Mon, 24 Aug 2026 19:28:15 +0800 Subject: [PATCH] fix: avoid global class initialization on task reads --- .../service/impl/TrainingTaskServiceImpl.java | 22 ++----------------- .../impl/TrainingTaskServiceImplTest.java | 15 ++++++++++++- 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/sztzjy/linkCommerce/service/impl/TrainingTaskServiceImpl.java b/src/main/java/com/sztzjy/linkCommerce/service/impl/TrainingTaskServiceImpl.java index 2f7315d..856a3f2 100644 --- a/src/main/java/com/sztzjy/linkCommerce/service/impl/TrainingTaskServiceImpl.java +++ b/src/main/java/com/sztzjy/linkCommerce/service/impl/TrainingTaskServiceImpl.java @@ -197,7 +197,8 @@ public class TrainingTaskServiceImpl implements TrainingTaskService { } sort++; } - ensureAllTeachingClassTasks(trainingTaskMapper.selectList(null, null, null), operatorId); + // 班级任务在对应班级首次读取时按需初始化。不要在学生读取单个任务时遍历所有教学班, + // 否则班级数量增加会把每次页面切换的查询放大为全量写入检查。 } @Override @@ -475,25 +476,6 @@ public class TrainingTaskServiceImpl implements TrainingTaskService { return new ArrayList<>(existingByKey.values()); } - private void ensureAllTeachingClassTasks(List defaults, String operatorId) { - if (schoolClassMapper == null || trainingTaskClassConfigMapper == null) { - return; - } - SchoolClassExample example = new SchoolClassExample(); - example.createCriteria().andClassTypeEqualTo("TEACHING"); - List teachingClasses = schoolClassMapper.selectByExample(example); - if (teachingClasses == null || teachingClasses.isEmpty()) { - return; - } - for (SchoolClass teachingClass : teachingClasses) { - if (teachingClass == null || StringUtils.isBlank(teachingClass.getSchoolClassId())) { - continue; - } - String creator = StringUtils.defaultIfBlank(operatorId, teachingClass.getCreatedBy()); - ensureClassTasksInitialized(teachingClass.getSchoolClassId(), defaults, creator); - } - } - private void synchronizeClassTaskDefaults(TrainingTask previousTask, TrainingTask updatedTask) { if (schoolClassMapper == null || trainingTaskClassConfigMapper == null || previousTask == null || updatedTask == null) { diff --git a/src/test/java/com/sztzjy/linkCommerce/service/impl/TrainingTaskServiceImplTest.java b/src/test/java/com/sztzjy/linkCommerce/service/impl/TrainingTaskServiceImplTest.java index dd99a80..3c09aad 100644 --- a/src/test/java/com/sztzjy/linkCommerce/service/impl/TrainingTaskServiceImplTest.java +++ b/src/test/java/com/sztzjy/linkCommerce/service/impl/TrainingTaskServiceImplTest.java @@ -332,6 +332,19 @@ class TrainingTaskServiceImplTest { verify(service.jdbcTemplate).execute(startsWith("CREATE TABLE IF NOT EXISTS training_task_class_config")); } + @Test + void ensureDefaultTasksDoesNotInitializeEveryTeachingClassDuringRead() { + TrainingTaskServiceImpl service = new TrainingTaskServiceImpl(); + service.trainingTaskMapper = mock(TrainingTaskMapper.class); + service.schoolClassMapper = mock(SchoolClassMapper.class); + service.trainingTaskClassConfigMapper = mock(TrainingTaskClassConfigMapper.class); + when(service.trainingTaskMapper.selectByTaskKey(anyString())).thenReturn(new TrainingTask()); + + service.ensureDefaultTasks("system"); + + verifyNoInteractions(service.schoolClassMapper, service.trainingTaskClassConfigMapper); + } + @Test void listDoesNotFilterDisabledTasksWhenEnabledOnlyIsFalse() { TrainingTaskServiceImpl service = new TrainingTaskServiceImpl(); @@ -346,7 +359,7 @@ class TrainingTaskServiceImplTest { assertEquals(1, result.size()); assertFalse(result.get(0).getEnabled()); - verify(service.trainingTaskMapper, times(2)).selectList(isNull(), isNull(), isNull()); + verify(service.trainingTaskMapper).selectList(isNull(), isNull(), isNull()); } @Test