From 2cd1e05ba46102916c76d8d6161f32e75873e704 Mon Sep 17 00:00:00 2001 From: luoweijian <1329394916@qq.com> Date: Mon, 2 Feb 2026 17:41:22 +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 | 4 ++ .../impl/AlgorithmApplicationServiceImpl.java | 18 +++++--- .../controller/InteractionController.java | 6 +++ .../domain/dto/QuestionCallBackDTO.java | 8 ++++ ...stToGenerateQuestionDomainServiceImpl.java | 16 +++++++ .../question/domain/dto/QuestionDTO.java | 46 +++++++++++++++++++ .../domain/entity/QuestionEntity.java | 16 +++++++ .../domain/service/QuestionBaseService.java | 7 +++ .../service/QuestionKpRelBaseService.java | 7 +++ .../service/SaveQuestionDomainService.java | 8 ++++ .../service/impl/QuestionBaseServiceImpl.java | 11 +++++ .../impl/QuestionKpRelBaseServiceImpl.java | 12 +++++ .../impl/SaveQuestionDomainServiceImpl.java | 37 +++++++++++++++ .../question/mapper/QuestionKpRelMapper.java | 9 ++++ .../question/mapper/QuestionMapper.java | 9 ++++ 15 files changed, 208 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/project/interaction/domain/dto/QuestionCallBackDTO.java create mode 100644 src/main/java/com/project/question/domain/service/QuestionBaseService.java create mode 100644 src/main/java/com/project/question/domain/service/QuestionKpRelBaseService.java create mode 100644 src/main/java/com/project/question/domain/service/SaveQuestionDomainService.java create mode 100644 src/main/java/com/project/question/domain/service/impl/QuestionBaseServiceImpl.java create mode 100644 src/main/java/com/project/question/domain/service/impl/QuestionKpRelBaseServiceImpl.java create mode 100644 src/main/java/com/project/question/domain/service/impl/SaveQuestionDomainServiceImpl.java create mode 100644 src/main/java/com/project/question/mapper/QuestionKpRelMapper.java create mode 100644 src/main/java/com/project/question/mapper/QuestionMapper.java diff --git a/src/main/java/com/project/interaction/application/AlgorithmApplicationService.java b/src/main/java/com/project/interaction/application/AlgorithmApplicationService.java index 072116f..13c60bc 100644 --- a/src/main/java/com/project/interaction/application/AlgorithmApplicationService.java +++ b/src/main/java/com/project/interaction/application/AlgorithmApplicationService.java @@ -1,7 +1,9 @@ package com.project.interaction.application; +import com.project.base.domain.result.Result; import com.project.information.domain.dto.KnowledgePointDTO; import com.project.interaction.domain.dto.ClusterCallbackDTO; +import com.project.question.domain.dto.QuestionDTO; import com.project.question.domain.dto.TaskKnowledgePointDTO; import com.project.task.domain.enums.QuestionTypeEnum; @@ -21,4 +23,6 @@ public interface AlgorithmApplicationService { void postToGenerateQuestion(List dtoList , QuestionTypeEnum questionType , int num) throws Exception; void saveCluster(Long taskId, List clusters) throws Exception; + + Result saveQuestion(QuestionDTO dto) 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 7e54f1d..75b573c 100644 --- a/src/main/java/com/project/interaction/application/impl/AlgorithmApplicationServiceImpl.java +++ b/src/main/java/com/project/interaction/application/impl/AlgorithmApplicationServiceImpl.java @@ -1,13 +1,15 @@ package com.project.interaction.application.impl; +import com.project.base.domain.result.Result; 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.QuestionDTO; import com.project.question.domain.dto.TaskKnowledgePointDTO; -import com.project.question.domain.enums.QuestionSourceTypeEnum; +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; @@ -25,6 +27,9 @@ public class AlgorithmApplicationServiceImpl implements AlgorithmApplicationServ @Autowired private PostToGenerateQuestionDomainService postToGenerateQuestionDomainService; + @Autowired + private SaveQuestionDomainService saveQuestionDomainService; + @Override public void postToClustering(Long taskId, List kpList) { postToClusteringDomainService.postToClustering(taskId , kpList); @@ -39,10 +44,11 @@ public class AlgorithmApplicationServiceImpl implements AlgorithmApplicationServ @Override public void saveCluster(Long taskId, List clusters) throws Exception { - try { - saveClusterDomainService.saveCluster(taskId , clusters); - } catch (Exception e) { - throw new RuntimeException(e); - } + saveClusterDomainService.saveCluster(taskId , clusters); + } + + @Override + public Result saveQuestion(QuestionDTO dto) throws Exception { + return saveQuestionDomainService.save(dto); } } diff --git a/src/main/java/com/project/interaction/controller/InteractionController.java b/src/main/java/com/project/interaction/controller/InteractionController.java index be9bd98..eb79810 100644 --- a/src/main/java/com/project/interaction/controller/InteractionController.java +++ b/src/main/java/com/project/interaction/controller/InteractionController.java @@ -5,6 +5,7 @@ package com.project.interaction.controller; import com.project.base.domain.result.Result; import com.project.interaction.application.AlgorithmApplicationService; import com.project.interaction.domain.dto.ClusterCallbackDTO; +import com.project.interaction.domain.dto.QuestionCallBackDTO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -26,4 +27,9 @@ public class InteractionController { algorithmApplicationService.saveCluster(dto.getTaskId(), dto.getClusters()); return Result.success("保存成功"); } + + @PostMapping("/saveQuestion") + public Result saveQuestion(QuestionCallBackDTO dto) throws Exception { + return null; + } } diff --git a/src/main/java/com/project/interaction/domain/dto/QuestionCallBackDTO.java b/src/main/java/com/project/interaction/domain/dto/QuestionCallBackDTO.java new file mode 100644 index 0000000..c683743 --- /dev/null +++ b/src/main/java/com/project/interaction/domain/dto/QuestionCallBackDTO.java @@ -0,0 +1,8 @@ +package com.project.interaction.domain.dto; + +import lombok.Data; + +@Data +public class QuestionCallBackDTO { + +} 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 4eb3040..afa25c4 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 @@ -3,7 +3,10 @@ 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.question.domain.service.QuestionBaseService; +import com.project.question.domain.service.QuestionKpRelBaseService; import com.project.task.domain.enums.QuestionTypeEnum; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; @@ -11,6 +14,15 @@ import java.util.List; @Service public class PostToGenerateQuestionDomainServiceImpl implements PostToGenerateQuestionDomainService { + + @Autowired + private QuestionBaseService questionBaseService; + + + @Autowired + private QuestionKpRelBaseService questionKpRelBaseService; + + @Override public void postToGenerateQuestion(List dtoList, QuestionTypeEnum questionType, int num) throws Exception { System.out.println(String.format("<=======生成了%d道%s, 结合了知识点【%s】属于%s=======>" , @@ -18,5 +30,9 @@ public class PostToGenerateQuestionDomainServiceImpl implements PostToGenerateQu questionType.getDescription() , String.join("," , dtoList.stream().map(dto -> dto.getId().toString()).toList()) , dtoList.size() > 1 ? QuestionSourceTypeEnum.Multi_Concept.getDesc() : QuestionSourceTypeEnum.Single_Concept.getDesc())); + + // todo 算法交互,请求生成问题 + + } } diff --git a/src/main/java/com/project/question/domain/dto/QuestionDTO.java b/src/main/java/com/project/question/domain/dto/QuestionDTO.java index 3627c45..52eb3f3 100644 --- a/src/main/java/com/project/question/domain/dto/QuestionDTO.java +++ b/src/main/java/com/project/question/domain/dto/QuestionDTO.java @@ -1,9 +1,55 @@ package com.project.question.domain.dto; import com.project.base.domain.dto.BaseDTO; +import com.project.question.domain.entity.QuestionEntity; +import com.project.question.domain.enums.QuestionUseStatusEnum; import lombok.Data; +import org.springframework.beans.BeanUtils; + +import java.util.List; +import java.util.Map; +import java.util.function.Supplier; @Data public class QuestionDTO extends BaseDTO { private Long id; + + private Integer sourceType; + + private Boolean useStatus = QuestionUseStatusEnum.Not_Use.getValue(); + + private List kpIdList; + + private String uniqueHash; + + private Integer questionType; + + private QuestionDetailDTO questionDetailDTO; + + + @Data + public static class QuestionDetailDTO { + private String questionContent; // 题干 + private Integer type; // 题目类型 + private Map options; // 选项 + private String rightAnswer; // 正确选项 + private String analysis; // AI解析 + } + + @Override + public T toEntity(Supplier supplier) { + T result = super.toEntity(supplier); + + if (result instanceof QuestionEntity entity) { + if (this.questionDetailDTO != null) { + QuestionEntity.QuestionDetail detail = new QuestionEntity.QuestionDetail(); + BeanUtils.copyProperties(this.questionDetailDTO, detail); + entity.setQuestionDetail(detail); + } + + entity.setId(this.getId()); + } + + return result; + } } diff --git a/src/main/java/com/project/question/domain/entity/QuestionEntity.java b/src/main/java/com/project/question/domain/entity/QuestionEntity.java index 1cef48e..2279ebd 100644 --- a/src/main/java/com/project/question/domain/entity/QuestionEntity.java +++ b/src/main/java/com/project/question/domain/entity/QuestionEntity.java @@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import com.project.base.domain.entity.BaseEntity; +import com.project.question.domain.dto.QuestionDTO; import com.project.question.domain.enums.QuestionUseStatusEnum; import jakarta.persistence.Column; import jakarta.persistence.Entity; @@ -16,9 +17,12 @@ import lombok.EqualsAndHashCode; import org.hibernate.annotations.Comment; import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.type.SqlTypes; +import org.springframework.beans.BeanUtils; import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.function.Supplier; @Data @@ -71,4 +75,16 @@ public class QuestionEntity extends BaseEntity { private String rightAnswer; // 正确选项 private String analysis; // AI解析 } + @Override + public T toDTO(Supplier supplier) { + T dto = super.toDTO(supplier); + if (dto instanceof QuestionDTO) { + if (Objects.nonNull(this.questionDetail)) { + QuestionDTO.QuestionDetailDTO detailDTO = new QuestionDTO.QuestionDetailDTO(); + BeanUtils.copyProperties(this.questionDetail , detailDTO); + ((QuestionDTO)dto).setQuestionDetailDTO(detailDTO); + } + } + return dto; + } } diff --git a/src/main/java/com/project/question/domain/service/QuestionBaseService.java b/src/main/java/com/project/question/domain/service/QuestionBaseService.java new file mode 100644 index 0000000..14674eb --- /dev/null +++ b/src/main/java/com/project/question/domain/service/QuestionBaseService.java @@ -0,0 +1,7 @@ +package com.project.question.domain.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.project.question.domain.entity.QuestionEntity; + +public interface QuestionBaseService extends IService { +} diff --git a/src/main/java/com/project/question/domain/service/QuestionKpRelBaseService.java b/src/main/java/com/project/question/domain/service/QuestionKpRelBaseService.java new file mode 100644 index 0000000..314be2d --- /dev/null +++ b/src/main/java/com/project/question/domain/service/QuestionKpRelBaseService.java @@ -0,0 +1,7 @@ +package com.project.question.domain.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.project.question.domain.entity.QuestionKpRelEntity; + +public interface QuestionKpRelBaseService extends IService { +} diff --git a/src/main/java/com/project/question/domain/service/SaveQuestionDomainService.java b/src/main/java/com/project/question/domain/service/SaveQuestionDomainService.java new file mode 100644 index 0000000..786de95 --- /dev/null +++ b/src/main/java/com/project/question/domain/service/SaveQuestionDomainService.java @@ -0,0 +1,8 @@ +package com.project.question.domain.service; + +import com.project.base.domain.result.Result; +import com.project.question.domain.dto.QuestionDTO; + +public interface SaveQuestionDomainService { + Result save(QuestionDTO dto) throws Exception; +} diff --git a/src/main/java/com/project/question/domain/service/impl/QuestionBaseServiceImpl.java b/src/main/java/com/project/question/domain/service/impl/QuestionBaseServiceImpl.java new file mode 100644 index 0000000..479b108 --- /dev/null +++ b/src/main/java/com/project/question/domain/service/impl/QuestionBaseServiceImpl.java @@ -0,0 +1,11 @@ +package com.project.question.domain.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.project.question.domain.entity.QuestionEntity; +import com.project.question.domain.service.QuestionBaseService; +import com.project.question.mapper.QuestionMapper; +import org.springframework.stereotype.Service; + +@Service +public class QuestionBaseServiceImpl extends ServiceImpl implements QuestionBaseService { +} diff --git a/src/main/java/com/project/question/domain/service/impl/QuestionKpRelBaseServiceImpl.java b/src/main/java/com/project/question/domain/service/impl/QuestionKpRelBaseServiceImpl.java new file mode 100644 index 0000000..dcbd55f --- /dev/null +++ b/src/main/java/com/project/question/domain/service/impl/QuestionKpRelBaseServiceImpl.java @@ -0,0 +1,12 @@ +package com.project.question.domain.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.project.question.domain.entity.QuestionKpRelEntity; +import com.project.question.domain.service.QuestionKpRelBaseService; +import com.project.question.mapper.QuestionKpRelMapper; +import org.springframework.stereotype.Service; + + +@Service +public class QuestionKpRelBaseServiceImpl extends ServiceImpl implements QuestionKpRelBaseService { +} 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 new file mode 100644 index 0000000..f2788f8 --- /dev/null +++ b/src/main/java/com/project/question/domain/service/impl/SaveQuestionDomainServiceImpl.java @@ -0,0 +1,37 @@ +package com.project.question.domain.service.impl; + +import cn.hutool.core.collection.CollUtil; +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.enums.QuestionSourceTypeEnum; +import com.project.question.domain.service.QuestionBaseService; +import com.project.question.domain.service.SaveQuestionDomainService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + + +@Service +public class SaveQuestionDomainServiceImpl implements SaveQuestionDomainService { + + @Autowired + private QuestionBaseService questionBaseService; + + + @Override + public Result save(QuestionDTO dto) throws Exception { + if (CollUtil.isEmpty(dto.getKpIdList())) { + throw new BusinessErrorException("知识点集合不能为空"); + } + dto.setKpIdList(dto.getKpIdList().stream().sorted().toList()); + if (dto.getKpIdList().size() > 1) { + dto.setSourceType(QuestionSourceTypeEnum.Multi_Concept.getValue()); + } else { + dto.setSourceType(QuestionSourceTypeEnum.Single_Concept.getValue()); + } + QuestionEntity entity = dto.toEntity(QuestionEntity::new); + questionBaseService.save(entity); + return Result.success(entity.toDTO(QuestionDTO::new)); + } +} diff --git a/src/main/java/com/project/question/mapper/QuestionKpRelMapper.java b/src/main/java/com/project/question/mapper/QuestionKpRelMapper.java new file mode 100644 index 0000000..821b9f3 --- /dev/null +++ b/src/main/java/com/project/question/mapper/QuestionKpRelMapper.java @@ -0,0 +1,9 @@ +package com.project.question.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.project.question.domain.entity.QuestionKpRelEntity; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface QuestionKpRelMapper extends BaseMapper { +} diff --git a/src/main/java/com/project/question/mapper/QuestionMapper.java b/src/main/java/com/project/question/mapper/QuestionMapper.java new file mode 100644 index 0000000..8513b09 --- /dev/null +++ b/src/main/java/com/project/question/mapper/QuestionMapper.java @@ -0,0 +1,9 @@ +package com.project.question.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.project.question.domain.entity.QuestionEntity; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface QuestionMapper extends BaseMapper { +}