From 12908ead3ae6048376699b885c5f851f97fd99f4 Mon Sep 17 00:00:00 2001 From: luoweijian <1329394916@qq.com> Date: Mon, 2 Feb 2026 16:39:03 +0800 Subject: [PATCH] =?UTF-8?q?=E8=80=83=E8=AF=95=E4=BB=BB=E5=8A=A1=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E7=9F=A5=E8=AF=86=E7=82=B9=E7=B0=87=E8=81=9A=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AlgorithmApplicationService.java | 2 +- .../impl/AlgorithmApplicationServiceImpl.java | 13 ++++++----- .../PostToGenerateQuestionDomainService.java | 10 +++++++++ ...stToGenerateQuestionDomainServiceImpl.java | 22 +++++++++++++++++++ .../GenerateQuestionDomainServiceImpl.java | 20 +++++++++++------ .../service/impl/RandomSamplingStrategy.java | 11 +++++++--- 6 files changed, 61 insertions(+), 17 deletions(-) create mode 100644 src/main/java/com/project/interaction/domain/service/PostToGenerateQuestionDomainService.java create mode 100644 src/main/java/com/project/interaction/domain/service/impl/PostToGenerateQuestionDomainServiceImpl.java diff --git a/src/main/java/com/project/interaction/application/AlgorithmApplicationService.java b/src/main/java/com/project/interaction/application/AlgorithmApplicationService.java index 2213301..072116f 100644 --- a/src/main/java/com/project/interaction/application/AlgorithmApplicationService.java +++ b/src/main/java/com/project/interaction/application/AlgorithmApplicationService.java @@ -18,7 +18,7 @@ public interface AlgorithmApplicationService { void postToClustering(Long taskId, List kpList); - void generateQuestion(List dtoList , QuestionTypeEnum questionType , int num); + void postToGenerateQuestion(List dtoList , QuestionTypeEnum questionType , int num) throws Exception; void saveCluster(Long taskId, List clusters) throws Exception; } diff --git a/src/main/java/com/project/interaction/application/impl/AlgorithmApplicationServiceImpl.java b/src/main/java/com/project/interaction/application/impl/AlgorithmApplicationServiceImpl.java index 32932be..7e54f1d 100644 --- a/src/main/java/com/project/interaction/application/impl/AlgorithmApplicationServiceImpl.java +++ b/src/main/java/com/project/interaction/application/impl/AlgorithmApplicationServiceImpl.java @@ -4,6 +4,7 @@ import com.project.information.domain.dto.KnowledgePointDTO; import com.project.interaction.application.AlgorithmApplicationService; import com.project.interaction.domain.dto.ClusterCallbackDTO; import com.project.interaction.domain.service.PostToClusteringDomainService; +import com.project.interaction.domain.service.PostToGenerateQuestionDomainService; import com.project.interaction.domain.service.SaveClusterDomainService; import com.project.question.domain.dto.TaskKnowledgePointDTO; import com.project.question.domain.enums.QuestionSourceTypeEnum; @@ -20,6 +21,10 @@ public class AlgorithmApplicationServiceImpl implements AlgorithmApplicationServ @Autowired private SaveClusterDomainService saveClusterDomainService; + + @Autowired + private PostToGenerateQuestionDomainService postToGenerateQuestionDomainService; + @Override public void postToClustering(Long taskId, List kpList) { postToClusteringDomainService.postToClustering(taskId , kpList); @@ -27,12 +32,8 @@ public class AlgorithmApplicationServiceImpl implements AlgorithmApplicationServ @Override - public void generateQuestion(List dtoList, QuestionTypeEnum questionType, int num) { - System.out.println(String.format("<=======生成了%d道%s, 结合了知识点【%s】属于%s=======>" , - num , - questionType.getDescription() , - String.join("," , dtoList.stream().map(dto -> dto.getId().toString()).toList()) , - dtoList.size() > 1 ? QuestionSourceTypeEnum.Multi_Concept.getDesc() : QuestionSourceTypeEnum.Single_Concept.getDesc())); + public void postToGenerateQuestion(List dtoList, QuestionTypeEnum questionType, int num) throws Exception { + postToGenerateQuestionDomainService.postToGenerateQuestion(dtoList , questionType , num); } diff --git a/src/main/java/com/project/interaction/domain/service/PostToGenerateQuestionDomainService.java b/src/main/java/com/project/interaction/domain/service/PostToGenerateQuestionDomainService.java new file mode 100644 index 0000000..385aaad --- /dev/null +++ b/src/main/java/com/project/interaction/domain/service/PostToGenerateQuestionDomainService.java @@ -0,0 +1,10 @@ +package com.project.interaction.domain.service; + +import com.project.question.domain.dto.TaskKnowledgePointDTO; +import com.project.task.domain.enums.QuestionTypeEnum; + +import java.util.List; + +public interface PostToGenerateQuestionDomainService { + void postToGenerateQuestion(List dtoList, QuestionTypeEnum questionType, int num) throws Exception; +} diff --git a/src/main/java/com/project/interaction/domain/service/impl/PostToGenerateQuestionDomainServiceImpl.java b/src/main/java/com/project/interaction/domain/service/impl/PostToGenerateQuestionDomainServiceImpl.java new file mode 100644 index 0000000..4eb3040 --- /dev/null +++ b/src/main/java/com/project/interaction/domain/service/impl/PostToGenerateQuestionDomainServiceImpl.java @@ -0,0 +1,22 @@ +package com.project.interaction.domain.service.impl; + +import com.project.interaction.domain.service.PostToGenerateQuestionDomainService; +import com.project.question.domain.dto.TaskKnowledgePointDTO; +import com.project.question.domain.enums.QuestionSourceTypeEnum; +import com.project.task.domain.enums.QuestionTypeEnum; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class PostToGenerateQuestionDomainServiceImpl implements PostToGenerateQuestionDomainService { + + @Override + public void postToGenerateQuestion(List dtoList, QuestionTypeEnum questionType, int num) throws Exception { + System.out.println(String.format("<=======生成了%d道%s, 结合了知识点【%s】属于%s=======>" , + num , + questionType.getDescription() , + String.join("," , dtoList.stream().map(dto -> dto.getId().toString()).toList()) , + dtoList.size() > 1 ? QuestionSourceTypeEnum.Multi_Concept.getDesc() : QuestionSourceTypeEnum.Single_Concept.getDesc())); + } +} diff --git a/src/main/java/com/project/question/domain/service/impl/GenerateQuestionDomainServiceImpl.java b/src/main/java/com/project/question/domain/service/impl/GenerateQuestionDomainServiceImpl.java index c8013ff..d31c1e0 100644 --- a/src/main/java/com/project/question/domain/service/impl/GenerateQuestionDomainServiceImpl.java +++ b/src/main/java/com/project/question/domain/service/impl/GenerateQuestionDomainServiceImpl.java @@ -1,11 +1,14 @@ package com.project.question.domain.service.impl; +import com.project.interaction.application.AlgorithmApplicationService; +import com.project.interaction.domain.service.PostToGenerateQuestionDomainService; import com.project.question.domain.dto.TaskKnowledgePointDTO; import com.project.question.domain.enums.QuestionSourceTypeEnum; import com.project.question.domain.service.GenerateQuestionDomainService; import com.project.question.domain.service.SamplingStrategy; import com.project.question.domain.service.TaskKnowledgePointBaseService; import com.project.task.domain.enums.QuestionTypeEnum; +import io.vavr.control.Try; import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -29,6 +32,9 @@ public class GenerateQuestionDomainServiceImpl implements GenerateQuestionDomain @Autowired private SamplingStrategy samplingStrategy; + @Autowired + private PostToGenerateQuestionDomainService postToGenerateQuestionDomainService; + @Override public void produce(Long sourceId, QuestionTypeEnum questionType , QuestionSourceTypeEnum sourceType, int needCount) { if (needCount <= 0) { @@ -37,25 +43,25 @@ public class GenerateQuestionDomainServiceImpl implements GenerateQuestionDomain CompletableFuture.runAsync(() -> { log.info(">>> [题库预生成] 准备生产任务: SourceID={}, Type={}, Count={}", sourceId, sourceType, needCount); - processBatch(sourceId,questionType , sourceType , needCount); + Try.run(() -> processBatch(sourceId,questionType , sourceType , needCount)); }, questionGenExecutor); } - private void processBatch(Long sourceId, QuestionTypeEnum questionType , QuestionSourceTypeEnum sourceType, int count) { + private void processBatch(Long sourceId, QuestionTypeEnum questionType , QuestionSourceTypeEnum sourceType, int count) throws Exception{ // 如果是簇复合题,执行随机采样 2-4 个知识点 List kpList; if (QuestionSourceTypeEnum.Multi_Concept.equals(sourceType)) { - kpList = samplingStrategy.sample(sourceId); // 获取随机组合的 KPs + for (int i = 0; i < count; i++) { + kpList = samplingStrategy.sample(sourceId); // 获取随机组合的 KPs + postToGenerateQuestionDomainService.postToGenerateQuestion(kpList , questionType , 1); + } } else { // 单 KP 逻辑:直接查出对应 KP 的内容 kpList = Collections.singletonList(taskKnowledgePointBaseService.getById(sourceId) .toDTO(TaskKnowledgePointDTO::new)); + postToGenerateQuestionDomainService.postToGenerateQuestion(kpList , questionType , count); } - - // 2. 调用大模型并保存题目及其多对多关系 (QuestionPool & QuestionKpRel) - // - //aiLlmService.generateAndBatchSave(context, sourceType, count); } } diff --git a/src/main/java/com/project/question/domain/service/impl/RandomSamplingStrategy.java b/src/main/java/com/project/question/domain/service/impl/RandomSamplingStrategy.java index 9faf86f..e5aebf9 100644 --- a/src/main/java/com/project/question/domain/service/impl/RandomSamplingStrategy.java +++ b/src/main/java/com/project/question/domain/service/impl/RandomSamplingStrategy.java @@ -10,6 +10,7 @@ import com.project.question.domain.service.TaskKnowledgePointBaseService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -20,13 +21,17 @@ public class RandomSamplingStrategy implements SamplingStrategy { @Override public List sample(Long clusterId) { - List dtoList = taskKnowledgePointBaseService.list(new LambdaQueryWrapper() - .eq(TaskKnowledgePointEntity::getClusterId, clusterId)) - .stream().map(entity -> entity.toDTO(TaskKnowledgePointDTO::new)).toList(); + List dtoList = new ArrayList<>(taskKnowledgePointBaseService.list(new LambdaQueryWrapper() + .eq(TaskKnowledgePointEntity::getClusterId, clusterId)) + .stream().map(entity -> entity.toDTO(TaskKnowledgePointDTO::new)).toList()); if (CollUtil.isEmpty(dtoList)) { return Collections.emptyList(); } + // 集合为两个不需要采样 + if (dtoList.size() == 2) { + return dtoList; + } // 确定采样数量:2 到 4 之间的随机数 int totalSize = dtoList.size(); int min = Math.min(totalSize, 2);