From ea3aaa736d0d22964f8904531fd0c401d2d1500e Mon Sep 17 00:00:00 2001 From: luoweijian <1329394916@qq.com> Date: Mon, 2 Feb 2026 19:44:34 +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 --- ...stToGenerateQuestionDomainServiceImpl.java | 74 +++++++++++++++++-- .../impl/SaveQuestionDomainServiceImpl.java | 17 +++++ 2 files changed, 84 insertions(+), 7 deletions(-) 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 afa25c4..ccb51ae 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 @@ -1,15 +1,18 @@ package com.project.interaction.domain.service.impl; +import cn.hutool.core.util.RandomUtil; import com.project.interaction.domain.service.PostToGenerateQuestionDomainService; +import com.project.question.domain.dto.QuestionDTO; import com.project.question.domain.dto.TaskKnowledgePointDTO; -import com.project.question.domain.enums.QuestionSourceTypeEnum; import com.project.question.domain.service.QuestionBaseService; import com.project.question.domain.service.QuestionKpRelBaseService; +import com.project.question.domain.service.SaveQuestionDomainService; import com.project.task.domain.enums.QuestionTypeEnum; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; @Service public class PostToGenerateQuestionDomainServiceImpl implements PostToGenerateQuestionDomainService { @@ -22,16 +25,73 @@ public class PostToGenerateQuestionDomainServiceImpl implements PostToGenerateQu @Autowired private QuestionKpRelBaseService questionKpRelBaseService; + @Autowired + private SaveQuestionDomainService saveQuestionDomainService; + + private final String[] optionListStr = {"A" , "B" , "C" , "D"}; + + private final String[] trueFalseListStr = {"A" , "B"}; + + + private final List list = Arrays.asList(0,1,2,3); + @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())); +// 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())); // todo 算法交互,请求生成问题 + // todo 先写死,写死问题和选项 + + for (int i = 0; i < num; i++) { + QuestionDTO questionDTO = new QuestionDTO(); + questionDTO.setKpIdList(dtoList.stream().map(TaskKnowledgePointDTO::getId).collect(Collectors.toList())); + questionDTO.setQuestionType(questionType.getValue()); + QuestionDTO.QuestionDetailDTO detailDTO = new QuestionDTO.QuestionDetailDTO(); + + detailDTO.setQuestionContent(String.format("这是一道%s" , questionType.getDescription())); + detailDTO.setType(questionType.getValue()); + if (QuestionTypeEnum.SINGLE_CHOICE.equals(questionType)) { + int rightAnswerNo = RandomUtil.randomInt(0, 4); + TreeMap optionList = new TreeMap<>(); + for (int j = 0; j < optionListStr.length; j++) { + optionList.put(optionListStr[j] , String.format("这是%s选项" , optionListStr[j])); + if (j == rightAnswerNo) { + detailDTO.setRightAnswer(optionListStr[j]); + detailDTO.setAnalysis(String.format("这道题选%s" , optionListStr[j])); + } + } + detailDTO.setOptions(optionList); + } else if (QuestionTypeEnum.MULTIPLE_CHOICE.equals(questionType)) { + Collections.shuffle(list); // 随机打乱 + Set result = list.subList(0, 2).stream().collect(Collectors.toSet()); + TreeMap optionList = new TreeMap<>(); + List rightAnswerList = new ArrayList<>(); + for (int j = 0; j < optionListStr.length; j++) { + optionList.put(optionListStr[j] , String.format("这是%s选项" , optionListStr[j])); + if (result.contains(j)) { + rightAnswerList.add(optionListStr[j]); + } + detailDTO.setRightAnswer(String.join("," , rightAnswerList)); + detailDTO.setAnalysis(String.format("这道题选%s" , detailDTO.getRightAnswer())); + } + } else { + int rightAnswerNo = RandomUtil.randomInt(0, 2); + TreeMap optionList = new TreeMap<>(); + for (int j = 0; j < trueFalseListStr.length; j++) { + optionList.put(trueFalseListStr[j] , j == 0 ? "对" : "错"); + if (j == rightAnswerNo) { + detailDTO.setRightAnswer(trueFalseListStr[j]); + detailDTO.setAnalysis(String.format("这道题选%s" , trueFalseListStr[j])); + } + } + } + saveQuestionDomainService.save(questionDTO); + } } diff --git a/src/main/java/com/project/question/domain/service/impl/SaveQuestionDomainServiceImpl.java b/src/main/java/com/project/question/domain/service/impl/SaveQuestionDomainServiceImpl.java index f2788f8..89c2ff4 100644 --- a/src/main/java/com/project/question/domain/service/impl/SaveQuestionDomainServiceImpl.java +++ b/src/main/java/com/project/question/domain/service/impl/SaveQuestionDomainServiceImpl.java @@ -5,12 +5,17 @@ import com.project.base.domain.exception.BusinessErrorException; import com.project.base.domain.result.Result; import com.project.question.domain.dto.QuestionDTO; import com.project.question.domain.entity.QuestionEntity; +import com.project.question.domain.entity.QuestionKpRelEntity; import com.project.question.domain.enums.QuestionSourceTypeEnum; import com.project.question.domain.service.QuestionBaseService; +import com.project.question.domain.service.QuestionKpRelBaseService; import com.project.question.domain.service.SaveQuestionDomainService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import java.util.List; +import java.util.stream.Collectors; + @Service public class SaveQuestionDomainServiceImpl implements SaveQuestionDomainService { @@ -18,6 +23,9 @@ public class SaveQuestionDomainServiceImpl implements SaveQuestionDomainService @Autowired private QuestionBaseService questionBaseService; + @Autowired + private QuestionKpRelBaseService questionKpRelBaseService; + @Override public Result save(QuestionDTO dto) throws Exception { @@ -32,6 +40,15 @@ public class SaveQuestionDomainServiceImpl implements SaveQuestionDomainService } QuestionEntity entity = dto.toEntity(QuestionEntity::new); questionBaseService.save(entity); + // 保存QuestionKpRelEntity + List relEntities = dto.getKpIdList().stream().map(kpId -> { + QuestionKpRelEntity rel = new QuestionKpRelEntity(); + rel.setQuestionId(entity.getId()); + rel.setKpId(kpId); + return rel; + }).collect(Collectors.toList()); + questionKpRelBaseService.saveBatch(relEntities); + return Result.success(entity.toDTO(QuestionDTO::new)); } }