From ff08a82f40b4031d84ee2dce577f820282475dc9 Mon Sep 17 00:00:00 2001 From: luogw <3132758203@qq.com> Date: Fri, 13 Mar 2026 16:39:35 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=B9=B6=E5=8F=91=E9=80=81=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=EF=BC=8C=E5=87=8F=E5=B0=91=E8=B0=83=E7=94=A8=E7=94=9F?= =?UTF-8?q?=E9=A2=98=E6=8E=A5=E5=8F=A3=E6=AC=A1=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/AlgorithmApplicationServiceImpl.java | 3 ++- .../service/PostToGenerateQuestionDomainService.java | 2 +- .../PostToGenerateQuestionDomainServiceImpl.java | 12 +++++++----- .../service/impl/SaveClusterDomainServiceImpl.java | 9 +++++---- .../service/GenerateQuestionDomainService.java | 4 +++- .../impl/GenerateQuestionDomainServiceImpl.java | 10 +++++----- .../impl/QuestionInventoryDomainServiceImpl.java | 5 +++-- 7 files changed, 26 insertions(+), 19 deletions(-) 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 75b573c..8385b8f 100644 --- a/src/main/java/com/project/interaction/application/impl/AlgorithmApplicationServiceImpl.java +++ b/src/main/java/com/project/interaction/application/impl/AlgorithmApplicationServiceImpl.java @@ -14,6 +14,7 @@ import com.project.task.domain.enums.QuestionTypeEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Collections; import java.util.List; @Service @@ -38,7 +39,7 @@ public class AlgorithmApplicationServiceImpl implements AlgorithmApplicationServ @Override public void postToGenerateQuestion(List dtoList, QuestionTypeEnum questionType, int num) throws Exception { - postToGenerateQuestionDomainService.postToGenerateQuestion(dtoList , questionType , num); + postToGenerateQuestionDomainService.postToGenerateQuestion(dtoList , Collections.singletonList(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 index 385aaad..7030adb 100644 --- a/src/main/java/com/project/interaction/domain/service/PostToGenerateQuestionDomainService.java +++ b/src/main/java/com/project/interaction/domain/service/PostToGenerateQuestionDomainService.java @@ -6,5 +6,5 @@ import com.project.task.domain.enums.QuestionTypeEnum; import java.util.List; public interface PostToGenerateQuestionDomainService { - void postToGenerateQuestion(List dtoList, QuestionTypeEnum questionType, int num) throws Exception; + void postToGenerateQuestion(List dtoList, List questionTypeEnumList, 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 index 61e4102..b9e15ba 100644 --- a/src/main/java/com/project/interaction/domain/service/impl/PostToGenerateQuestionDomainServiceImpl.java +++ b/src/main/java/com/project/interaction/domain/service/impl/PostToGenerateQuestionDomainServiceImpl.java @@ -61,7 +61,7 @@ public class PostToGenerateQuestionDomainServiceImpl implements PostToGenerateQu * 2. 如果算法服务失败,使用熔断降级方案生成默认题目 */ @Override - public void postToGenerateQuestion(List dtoList, QuestionTypeEnum questionType, int num) throws Exception { + public void postToGenerateQuestion(List dtoList, List questionTypeEnumList, int num) throws Exception { Long taskId = Optional.of(dtoList.stream().findFirst()) .get().orElse(new TaskKnowledgePointDTO()).getTaskId(); Long clusterId = Optional.of(dtoList.stream().findFirst()) @@ -71,7 +71,7 @@ public class PostToGenerateQuestionDomainServiceImpl implements PostToGenerateQu .get().orElse(new TaskKnowledgePointDTO()).getAtomId()); log.info(">>> [题目生成] 开始生成题目, TaskId: {}, ClusterId: {}, 题型: {}, 数量: {}", - taskId, clusterId, questionType.getDescription(), num); + taskId, clusterId, questionTypeEnumList, num); try { // 应用限流:获取令牌,超过限流速率则等待 @@ -83,7 +83,7 @@ public class PostToGenerateQuestionDomainServiceImpl implements PostToGenerateQu } //尝试调用算法服务生成题目 - GenerateQuestionResponseDTO response = callAlgorithmService(dtoList, questionType, num, knowledgePoint.getParseName()); + GenerateQuestionResponseDTO response = callAlgorithmService(dtoList, questionTypeEnumList, num, knowledgePoint.getParseName()); if (response != null && StringUtils.isNotBlank(response.getMessage()) && response.getMessage().contains("success")) { log.info(">>> [题目生成] 算法服务接受任务成功, 任务: {}, 状态: {}, 信息:{}", @@ -106,7 +106,9 @@ public class PostToGenerateQuestionDomainServiceImpl implements PostToGenerateQu /** * 调用算法服务生成题目 */ - private GenerateQuestionResponseDTO callAlgorithmService(List dtoList, QuestionTypeEnum questionType, int num,String parseName){ + private GenerateQuestionResponseDTO callAlgorithmService(List dtoList, List questionTypeEnumList, int num,String parseName){ + List questionTypeEnumStringList = questionTypeEnumList.stream().map(QuestionTypeEnum::getDescription).toList(); + // 获取知识点内容 List kpIds = dtoList.stream().map(TaskKnowledgePointDTO::getId).collect(Collectors.toList()); List sourceTexts = dtoList.stream().map(TaskKnowledgePointDTO::getContent).collect(Collectors.toList()); @@ -124,7 +126,7 @@ public class PostToGenerateQuestionDomainServiceImpl implements PostToGenerateQu .sourceId(kpIds) .build()) .numQuestions(num) - .questionTypes(Collections.singletonList(questionType.name().toLowerCase())) + .questionTypes(questionTypeEnumStringList) .build(); // 调用算法服务 diff --git a/src/main/java/com/project/interaction/domain/service/impl/SaveClusterDomainServiceImpl.java b/src/main/java/com/project/interaction/domain/service/impl/SaveClusterDomainServiceImpl.java index e265eff..92231cb 100644 --- a/src/main/java/com/project/interaction/domain/service/impl/SaveClusterDomainServiceImpl.java +++ b/src/main/java/com/project/interaction/domain/service/impl/SaveClusterDomainServiceImpl.java @@ -19,6 +19,8 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.Objects; @@ -76,15 +78,14 @@ public class SaveClusterDomainServiceImpl implements SaveClusterDomainService { // 生成目标量 int targetNum = (int) Math.ceil(1.2 * u); for (TaskKnowledgePointEntity kp : taskKpList) { + List questionTypeEnumList = Arrays.stream(QuestionTypeEnum.values()).toList(); // 调用题目生成方法 - for (QuestionTypeEnum value : QuestionTypeEnum.values()) { - generateQuestionDomainService.produce(kp.getId(), value , QuestionSourceTypeEnum.Single_Concept , targetNum); - } + generateQuestionDomainService.produce(kp.getId(), questionTypeEnumList , QuestionSourceTypeEnum.Single_Concept , targetNum); } if (clusterEntity.getClusterSize() > 1) { // 簇生成目标量 int clusterTargetNum = (int) Math.ceil(1.2 * u * clusterEntity.getClusterSize()); - generateQuestionDomainService.produce(clusterEntity.getId(), QuestionTypeEnum.MULTIPLE_CHOICE , QuestionSourceTypeEnum.Multi_Concept , clusterTargetNum); + generateQuestionDomainService.produce(clusterEntity.getId(), Collections.singletonList(QuestionTypeEnum.MULTIPLE_CHOICE) , QuestionSourceTypeEnum.Multi_Concept , clusterTargetNum); } } } diff --git a/src/main/java/com/project/question/domain/service/GenerateQuestionDomainService.java b/src/main/java/com/project/question/domain/service/GenerateQuestionDomainService.java index 6e8b3bc..01c0dcd 100644 --- a/src/main/java/com/project/question/domain/service/GenerateQuestionDomainService.java +++ b/src/main/java/com/project/question/domain/service/GenerateQuestionDomainService.java @@ -3,7 +3,9 @@ package com.project.question.domain.service; import com.project.question.domain.enums.QuestionSourceTypeEnum; import com.project.task.domain.enums.QuestionTypeEnum; +import java.util.List; + public interface GenerateQuestionDomainService { - void produce(Long sourceId, QuestionTypeEnum questionType , QuestionSourceTypeEnum sourceType, int needCount); + void produce(Long sourceId, List questionTypeEnumList , QuestionSourceTypeEnum sourceType, int needCount); } 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 d31c1e0..3afb9d9 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 @@ -36,32 +36,32 @@ public class GenerateQuestionDomainServiceImpl implements GenerateQuestionDomain private PostToGenerateQuestionDomainService postToGenerateQuestionDomainService; @Override - public void produce(Long sourceId, QuestionTypeEnum questionType , QuestionSourceTypeEnum sourceType, int needCount) { + public void produce(Long sourceId, List questionTypeEnumList, QuestionSourceTypeEnum sourceType, int needCount) { if (needCount <= 0) { return; } CompletableFuture.runAsync(() -> { log.info(">>> [题库预生成] 准备生产任务: SourceID={}, Type={}, Count={}", sourceId, sourceType, needCount); - Try.run(() -> processBatch(sourceId,questionType , sourceType , needCount)); + Try.run(() -> processBatch(sourceId,questionTypeEnumList , sourceType , needCount)); }, questionGenExecutor); } - private void processBatch(Long sourceId, QuestionTypeEnum questionType , QuestionSourceTypeEnum sourceType, int count) throws Exception{ + private void processBatch(Long sourceId, List questionTypeEnumList , QuestionSourceTypeEnum sourceType, int count) throws Exception{ // 如果是簇复合题,执行随机采样 2-4 个知识点 List kpList; if (QuestionSourceTypeEnum.Multi_Concept.equals(sourceType)) { for (int i = 0; i < count; i++) { kpList = samplingStrategy.sample(sourceId); // 获取随机组合的 KPs - postToGenerateQuestionDomainService.postToGenerateQuestion(kpList , questionType , 1); + postToGenerateQuestionDomainService.postToGenerateQuestion(kpList , questionTypeEnumList , 1); } } else { // 单 KP 逻辑:直接查出对应 KP 的内容 kpList = Collections.singletonList(taskKnowledgePointBaseService.getById(sourceId) .toDTO(TaskKnowledgePointDTO::new)); - postToGenerateQuestionDomainService.postToGenerateQuestion(kpList , questionType , count); + postToGenerateQuestionDomainService.postToGenerateQuestion(kpList , questionTypeEnumList , count); } } } diff --git a/src/main/java/com/project/question/domain/service/impl/QuestionInventoryDomainServiceImpl.java b/src/main/java/com/project/question/domain/service/impl/QuestionInventoryDomainServiceImpl.java index 9701b82..c31e7ce 100644 --- a/src/main/java/com/project/question/domain/service/impl/QuestionInventoryDomainServiceImpl.java +++ b/src/main/java/com/project/question/domain/service/impl/QuestionInventoryDomainServiceImpl.java @@ -16,6 +16,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.Collections; import java.util.Date; import java.util.List; @@ -84,7 +85,7 @@ public class QuestionInventoryDomainServiceImpl implements QuestionInventoryDoma int gap = targetLine - currentStock; log.info(">>> [自动补库] KP: {}, 题型: {}, 当前库存: {}, 需补货: {}", kpId, type.getDescription(), currentStock, gap); // 触发异步生产逻辑 (内部带 30 分钟冷却锁) - generateQuestionDomainService.produce(kpId , type , QuestionSourceTypeEnum.Single_Concept , gap); + generateQuestionDomainService.produce(kpId , Collections.singletonList(type) , QuestionSourceTypeEnum.Single_Concept , gap); } } @@ -98,7 +99,7 @@ public class QuestionInventoryDomainServiceImpl implements QuestionInventoryDoma int gap = targetLine - currentStock; log.info(">>> [自动补库] 簇: {}, 类型: 复合多选, 当前库存: {}, 需补货: {}", clusterId, currentStock, gap); // 簇维度触发,触发异步生产逻辑 - generateQuestionDomainService.produce(clusterId , QuestionTypeEnum.MULTIPLE_CHOICE , QuestionSourceTypeEnum.Multi_Concept , gap); + generateQuestionDomainService.produce(clusterId , Collections.singletonList(QuestionTypeEnum.MULTIPLE_CHOICE) , QuestionSourceTypeEnum.Multi_Concept , gap); } }