Browse Source

考试任务调用知识点簇聚类

master
luoweijian 1 month ago
parent
commit
2cd1e05ba4
  1. 4
      src/main/java/com/project/interaction/application/AlgorithmApplicationService.java
  2. 14
      src/main/java/com/project/interaction/application/impl/AlgorithmApplicationServiceImpl.java
  3. 6
      src/main/java/com/project/interaction/controller/InteractionController.java
  4. 8
      src/main/java/com/project/interaction/domain/dto/QuestionCallBackDTO.java
  5. 16
      src/main/java/com/project/interaction/domain/service/impl/PostToGenerateQuestionDomainServiceImpl.java
  6. 46
      src/main/java/com/project/question/domain/dto/QuestionDTO.java
  7. 16
      src/main/java/com/project/question/domain/entity/QuestionEntity.java
  8. 7
      src/main/java/com/project/question/domain/service/QuestionBaseService.java
  9. 7
      src/main/java/com/project/question/domain/service/QuestionKpRelBaseService.java
  10. 8
      src/main/java/com/project/question/domain/service/SaveQuestionDomainService.java
  11. 11
      src/main/java/com/project/question/domain/service/impl/QuestionBaseServiceImpl.java
  12. 12
      src/main/java/com/project/question/domain/service/impl/QuestionKpRelBaseServiceImpl.java
  13. 37
      src/main/java/com/project/question/domain/service/impl/SaveQuestionDomainServiceImpl.java
  14. 9
      src/main/java/com/project/question/mapper/QuestionKpRelMapper.java
  15. 9
      src/main/java/com/project/question/mapper/QuestionMapper.java

4
src/main/java/com/project/interaction/application/AlgorithmApplicationService.java

@ -1,7 +1,9 @@
package com.project.interaction.application; package com.project.interaction.application;
import com.project.base.domain.result.Result;
import com.project.information.domain.dto.KnowledgePointDTO; import com.project.information.domain.dto.KnowledgePointDTO;
import com.project.interaction.domain.dto.ClusterCallbackDTO; import com.project.interaction.domain.dto.ClusterCallbackDTO;
import com.project.question.domain.dto.QuestionDTO;
import com.project.question.domain.dto.TaskKnowledgePointDTO; import com.project.question.domain.dto.TaskKnowledgePointDTO;
import com.project.task.domain.enums.QuestionTypeEnum; import com.project.task.domain.enums.QuestionTypeEnum;
@ -21,4 +23,6 @@ public interface AlgorithmApplicationService {
void postToGenerateQuestion(List<TaskKnowledgePointDTO> dtoList , QuestionTypeEnum questionType , int num) throws Exception; void postToGenerateQuestion(List<TaskKnowledgePointDTO> dtoList , QuestionTypeEnum questionType , int num) throws Exception;
void saveCluster(Long taskId, List<ClusterCallbackDTO.ClusterItem> clusters) throws Exception; void saveCluster(Long taskId, List<ClusterCallbackDTO.ClusterItem> clusters) throws Exception;
Result<QuestionDTO> saveQuestion(QuestionDTO dto) throws Exception;
} }

14
src/main/java/com/project/interaction/application/impl/AlgorithmApplicationServiceImpl.java

@ -1,13 +1,15 @@
package com.project.interaction.application.impl; package com.project.interaction.application.impl;
import com.project.base.domain.result.Result;
import com.project.information.domain.dto.KnowledgePointDTO; import com.project.information.domain.dto.KnowledgePointDTO;
import com.project.interaction.application.AlgorithmApplicationService; import com.project.interaction.application.AlgorithmApplicationService;
import com.project.interaction.domain.dto.ClusterCallbackDTO; import com.project.interaction.domain.dto.ClusterCallbackDTO;
import com.project.interaction.domain.service.PostToClusteringDomainService; import com.project.interaction.domain.service.PostToClusteringDomainService;
import com.project.interaction.domain.service.PostToGenerateQuestionDomainService; import com.project.interaction.domain.service.PostToGenerateQuestionDomainService;
import com.project.interaction.domain.service.SaveClusterDomainService; 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.dto.TaskKnowledgePointDTO;
import com.project.question.domain.enums.QuestionSourceTypeEnum; import com.project.question.domain.service.SaveQuestionDomainService;
import com.project.task.domain.enums.QuestionTypeEnum; import com.project.task.domain.enums.QuestionTypeEnum;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -25,6 +27,9 @@ public class AlgorithmApplicationServiceImpl implements AlgorithmApplicationServ
@Autowired @Autowired
private PostToGenerateQuestionDomainService postToGenerateQuestionDomainService; private PostToGenerateQuestionDomainService postToGenerateQuestionDomainService;
@Autowired
private SaveQuestionDomainService saveQuestionDomainService;
@Override @Override
public void postToClustering(Long taskId, List<KnowledgePointDTO> kpList) { public void postToClustering(Long taskId, List<KnowledgePointDTO> kpList) {
postToClusteringDomainService.postToClustering(taskId , kpList); postToClusteringDomainService.postToClustering(taskId , kpList);
@ -39,10 +44,11 @@ public class AlgorithmApplicationServiceImpl implements AlgorithmApplicationServ
@Override @Override
public void saveCluster(Long taskId, List<ClusterCallbackDTO.ClusterItem> clusters) throws Exception { public void saveCluster(Long taskId, List<ClusterCallbackDTO.ClusterItem> clusters) throws Exception {
try {
saveClusterDomainService.saveCluster(taskId , clusters); saveClusterDomainService.saveCluster(taskId , clusters);
} catch (Exception e) {
throw new RuntimeException(e);
} }
@Override
public Result<QuestionDTO> saveQuestion(QuestionDTO dto) throws Exception {
return saveQuestionDomainService.save(dto);
} }
} }

6
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.base.domain.result.Result;
import com.project.interaction.application.AlgorithmApplicationService; import com.project.interaction.application.AlgorithmApplicationService;
import com.project.interaction.domain.dto.ClusterCallbackDTO; import com.project.interaction.domain.dto.ClusterCallbackDTO;
import com.project.interaction.domain.dto.QuestionCallBackDTO;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -26,4 +27,9 @@ public class InteractionController {
algorithmApplicationService.saveCluster(dto.getTaskId(), dto.getClusters()); algorithmApplicationService.saveCluster(dto.getTaskId(), dto.getClusters());
return Result.success("保存成功"); return Result.success("保存成功");
} }
@PostMapping("/saveQuestion")
public Result<String> saveQuestion(QuestionCallBackDTO dto) throws Exception {
return null;
}
} }

8
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 {
}

16
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.interaction.domain.service.PostToGenerateQuestionDomainService;
import com.project.question.domain.dto.TaskKnowledgePointDTO; import com.project.question.domain.dto.TaskKnowledgePointDTO;
import com.project.question.domain.enums.QuestionSourceTypeEnum; 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 com.project.task.domain.enums.QuestionTypeEnum;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List; import java.util.List;
@ -11,6 +14,15 @@ import java.util.List;
@Service @Service
public class PostToGenerateQuestionDomainServiceImpl implements PostToGenerateQuestionDomainService { public class PostToGenerateQuestionDomainServiceImpl implements PostToGenerateQuestionDomainService {
@Autowired
private QuestionBaseService questionBaseService;
@Autowired
private QuestionKpRelBaseService questionKpRelBaseService;
@Override @Override
public void postToGenerateQuestion(List<TaskKnowledgePointDTO> dtoList, QuestionTypeEnum questionType, int num) throws Exception { public void postToGenerateQuestion(List<TaskKnowledgePointDTO> dtoList, QuestionTypeEnum questionType, int num) throws Exception {
System.out.println(String.format("<=======生成了%d道%s, 结合了知识点【%s】属于%s=======>" , System.out.println(String.format("<=======生成了%d道%s, 结合了知识点【%s】属于%s=======>" ,
@ -18,5 +30,9 @@ public class PostToGenerateQuestionDomainServiceImpl implements PostToGenerateQu
questionType.getDescription() , questionType.getDescription() ,
String.join("," , dtoList.stream().map(dto -> dto.getId().toString()).toList()) , String.join("," , dtoList.stream().map(dto -> dto.getId().toString()).toList()) ,
dtoList.size() > 1 ? QuestionSourceTypeEnum.Multi_Concept.getDesc() : QuestionSourceTypeEnum.Single_Concept.getDesc())); dtoList.size() > 1 ? QuestionSourceTypeEnum.Multi_Concept.getDesc() : QuestionSourceTypeEnum.Single_Concept.getDesc()));
// todo 算法交互,请求生成问题
} }
} }

46
src/main/java/com/project/question/domain/dto/QuestionDTO.java

@ -1,9 +1,55 @@
package com.project.question.domain.dto; package com.project.question.domain.dto;
import com.project.base.domain.dto.BaseDTO; 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 lombok.Data;
import org.springframework.beans.BeanUtils;
import java.util.List;
import java.util.Map;
import java.util.function.Supplier;
@Data @Data
public class QuestionDTO extends BaseDTO { public class QuestionDTO extends BaseDTO {
private Long id; private Long id;
private Integer sourceType;
private Boolean useStatus = QuestionUseStatusEnum.Not_Use.getValue();
private List<Long> kpIdList;
private String uniqueHash;
private Integer questionType;
private QuestionDetailDTO questionDetailDTO;
@Data
public static class QuestionDetailDTO {
private String questionContent; // 题干
private Integer type; // 题目类型
private Map<String, String> options; // 选项
private String rightAnswer; // 正确选项
private String analysis; // AI解析
}
@Override
public <T> T toEntity(Supplier<T> 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;
}
} }

16
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.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.project.base.domain.entity.BaseEntity; import com.project.base.domain.entity.BaseEntity;
import com.project.question.domain.dto.QuestionDTO;
import com.project.question.domain.enums.QuestionUseStatusEnum; import com.project.question.domain.enums.QuestionUseStatusEnum;
import jakarta.persistence.Column; import jakarta.persistence.Column;
import jakarta.persistence.Entity; import jakarta.persistence.Entity;
@ -16,9 +17,12 @@ import lombok.EqualsAndHashCode;
import org.hibernate.annotations.Comment; import org.hibernate.annotations.Comment;
import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes; import org.hibernate.type.SqlTypes;
import org.springframework.beans.BeanUtils;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.function.Supplier;
@Data @Data
@ -71,4 +75,16 @@ public class QuestionEntity extends BaseEntity {
private String rightAnswer; // 正确选项 private String rightAnswer; // 正确选项
private String analysis; // AI解析 private String analysis; // AI解析
} }
@Override
public <T> T toDTO(Supplier<T> 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;
}
} }

7
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<QuestionEntity> {
}

7
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<QuestionKpRelEntity> {
}

8
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<QuestionDTO> save(QuestionDTO dto) throws Exception;
}

11
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<QuestionMapper, QuestionEntity> implements QuestionBaseService {
}

12
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<QuestionKpRelMapper, QuestionKpRelEntity> implements QuestionKpRelBaseService {
}

37
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<QuestionDTO> 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));
}
}

9
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<QuestionKpRelEntity> {
}

9
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<QuestionEntity> {
}
Loading…
Cancel
Save