From a252c5ebf19537991497c03cfef2b112d570ea97 Mon Sep 17 00:00:00 2001 From: luogw <3132758203@qq.com> Date: Thu, 9 Apr 2026 10:27:02 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/AssemblePaperDomainServiceImpl.java | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/project/exam/domain/service/impl/AssemblePaperDomainServiceImpl.java b/src/main/java/com/project/exam/domain/service/impl/AssemblePaperDomainServiceImpl.java index 84ddd9e..c5c25d6 100644 --- a/src/main/java/com/project/exam/domain/service/impl/AssemblePaperDomainServiceImpl.java +++ b/src/main/java/com/project/exam/domain/service/impl/AssemblePaperDomainServiceImpl.java @@ -119,12 +119,24 @@ public class AssemblePaperDomainServiceImpl implements AssemblePaperDomainServic Set coveredKpPool = new HashSet<>(); // 最终选定题目 List selectedQuestionList = new ArrayList<>(); - // 分配种子:前N3个多选 - List mcSeeds = seedKpList.subList(0, taskDTO.getMultipleChoiceNum()); + // 分配种子:前N3个多选(过滤单知识点簇) + List mcSeeds = seedKpList.stream() + .filter(kp -> Objects.nonNull(kp.getClusterSize()) && kp.getClusterSize() > 1) + .limit(taskDTO.getMultipleChoiceNum()) + .toList(); //重新根据库存选取单选、判断 - List seedKpListBySupply = selectBySupply(taskDTO); - List scSeeds = seedKpListBySupply.subList(0,taskDTO.getSingleChoiceNum()); - List tfSeeds = seedKpListBySupply.subList(taskDTO.getSingleChoiceNum() , taskDTO.getSingleChoiceNum() + taskDTO.getTrueFalseNum()); + Set mcSeedIdSet = mcSeeds.stream().map(TaskKnowledgePointDTO::getId).collect(Collectors.toSet()); + Set remainSeedIdSet = seedKpList.stream() + .map(TaskKnowledgePointDTO::getId) + .filter(id -> !mcSeedIdSet.contains(id)) + .collect(Collectors.toSet()); + + List remainSeedsBySupply = selectBySupply(taskDTO).stream() + .filter(kp -> remainSeedIdSet.contains(kp.getId())) + .toList(); + List scSeeds = remainSeedsBySupply.subList(0, Math.min(taskDTO.getSingleChoiceNum(), remainSeedsBySupply.size())); + List tfCandidateSeeds = remainSeedsBySupply.subList(scSeeds.size(), remainSeedsBySupply.size()); + List tfSeeds = remainSeedsBySupply.subList(0 , Math.min(taskDTO.getTrueFalseNum(), tfCandidateSeeds.size())); // 选择单选题 pickWithLock(scSeeds, QuestionTypeEnum.SINGLE_CHOICE , selectedQuestionList, coveredKpPool); // 选择判断题 @@ -185,8 +197,7 @@ public class AssemblePaperDomainServiceImpl implements AssemblePaperDomainServic */ private List selectWeightedSeedKpList(TaskDTO dto , int totalNum) { List kpList = taskKnowledgePointBaseService.lambdaQuery() - .eq(TaskKnowledgePointEntity::getTaskId, dto.getId()) - .gt(TaskKnowledgePointEntity::getClusterSize,1).list().stream() + .eq(TaskKnowledgePointEntity::getTaskId, dto.getId()).list().stream() .map(entity -> entity.toDTO(TaskKnowledgePointDTO::new)).toList(); // 按簇分组 Map> clusterGroup = kpList.stream()