|
|
@ -119,12 +119,24 @@ public class AssemblePaperDomainServiceImpl implements AssemblePaperDomainServic |
|
|
Set<Long> coveredKpPool = new HashSet<>(); |
|
|
Set<Long> coveredKpPool = new HashSet<>(); |
|
|
// 最终选定题目
|
|
|
// 最终选定题目
|
|
|
List<QuestionDTO> selectedQuestionList = new ArrayList<>(); |
|
|
List<QuestionDTO> selectedQuestionList = new ArrayList<>(); |
|
|
// 分配种子:前N3个多选
|
|
|
// 分配种子:前N3个多选(过滤单知识点簇)
|
|
|
List<TaskKnowledgePointDTO> mcSeeds = seedKpList.subList(0, taskDTO.getMultipleChoiceNum()); |
|
|
List<TaskKnowledgePointDTO> mcSeeds = seedKpList.stream() |
|
|
|
|
|
.filter(kp -> Objects.nonNull(kp.getClusterSize()) && kp.getClusterSize() > 1) |
|
|
|
|
|
.limit(taskDTO.getMultipleChoiceNum()) |
|
|
|
|
|
.toList(); |
|
|
//重新根据库存选取单选、判断
|
|
|
//重新根据库存选取单选、判断
|
|
|
List<TaskKnowledgePointDTO> seedKpListBySupply = selectBySupply(taskDTO); |
|
|
Set<Long> mcSeedIdSet = mcSeeds.stream().map(TaskKnowledgePointDTO::getId).collect(Collectors.toSet()); |
|
|
List<TaskKnowledgePointDTO> scSeeds = seedKpListBySupply.subList(0,taskDTO.getSingleChoiceNum()); |
|
|
Set<Long> remainSeedIdSet = seedKpList.stream() |
|
|
List<TaskKnowledgePointDTO> tfSeeds = seedKpListBySupply.subList(taskDTO.getSingleChoiceNum() , taskDTO.getSingleChoiceNum() + taskDTO.getTrueFalseNum()); |
|
|
.map(TaskKnowledgePointDTO::getId) |
|
|
|
|
|
.filter(id -> !mcSeedIdSet.contains(id)) |
|
|
|
|
|
.collect(Collectors.toSet()); |
|
|
|
|
|
|
|
|
|
|
|
List<TaskKnowledgePointDTO> remainSeedsBySupply = selectBySupply(taskDTO).stream() |
|
|
|
|
|
.filter(kp -> remainSeedIdSet.contains(kp.getId())) |
|
|
|
|
|
.toList(); |
|
|
|
|
|
List<TaskKnowledgePointDTO> scSeeds = remainSeedsBySupply.subList(0, Math.min(taskDTO.getSingleChoiceNum(), remainSeedsBySupply.size())); |
|
|
|
|
|
List<TaskKnowledgePointDTO> tfCandidateSeeds = remainSeedsBySupply.subList(scSeeds.size(), remainSeedsBySupply.size()); |
|
|
|
|
|
List<TaskKnowledgePointDTO> tfSeeds = remainSeedsBySupply.subList(0 , Math.min(taskDTO.getTrueFalseNum(), tfCandidateSeeds.size())); |
|
|
// 选择单选题
|
|
|
// 选择单选题
|
|
|
pickWithLock(scSeeds, QuestionTypeEnum.SINGLE_CHOICE , selectedQuestionList, coveredKpPool); |
|
|
pickWithLock(scSeeds, QuestionTypeEnum.SINGLE_CHOICE , selectedQuestionList, coveredKpPool); |
|
|
// 选择判断题
|
|
|
// 选择判断题
|
|
|
@ -185,8 +197,7 @@ public class AssemblePaperDomainServiceImpl implements AssemblePaperDomainServic |
|
|
*/ |
|
|
*/ |
|
|
private List<TaskKnowledgePointDTO> selectWeightedSeedKpList(TaskDTO dto , int totalNum) { |
|
|
private List<TaskKnowledgePointDTO> selectWeightedSeedKpList(TaskDTO dto , int totalNum) { |
|
|
List<TaskKnowledgePointDTO> kpList = taskKnowledgePointBaseService.lambdaQuery() |
|
|
List<TaskKnowledgePointDTO> kpList = taskKnowledgePointBaseService.lambdaQuery() |
|
|
.eq(TaskKnowledgePointEntity::getTaskId, dto.getId()) |
|
|
.eq(TaskKnowledgePointEntity::getTaskId, dto.getId()).list().stream() |
|
|
.gt(TaskKnowledgePointEntity::getClusterSize,1).list().stream() |
|
|
|
|
|
.map(entity -> entity.toDTO(TaskKnowledgePointDTO::new)).toList(); |
|
|
.map(entity -> entity.toDTO(TaskKnowledgePointDTO::new)).toList(); |
|
|
// 按簇分组
|
|
|
// 按簇分组
|
|
|
Map<Long, List<TaskKnowledgePointDTO>> clusterGroup = kpList.stream() |
|
|
Map<Long, List<TaskKnowledgePointDTO>> clusterGroup = kpList.stream() |
|
|
|