Kaynağa Gözat

improvement: 推荐题目附加答案

ChenSiTong 6 yıl önce
ebeveyn
işleme
589edc923a

+ 1 - 1
src/main/java/nju/seec/helper/controller/QuizController.java

@@ -118,7 +118,7 @@ public class QuizController {
     /**
      * 提交作答
      */
-    @ExerciseRecord
+//    @ExerciseRecord
     @Event(type = EventType.QUIZ, action = EventAction.COMPLETE)
     @Auth(roles = {UserRole.STUDENT}, message = "提交作答")
     @PostMapping("/{quizId}/student-answer")

+ 0 - 38
src/main/java/nju/seec/helper/dto/quiz/StudentAnswerDTO.java

@@ -1,38 +0,0 @@
-package nju.seec.helper.dto.quiz;
-
-import lombok.Data;
-
-import javax.validation.Valid;
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Past;
-import java.io.Serializable;
-import java.time.LocalDateTime;
-import java.util.Map;
-
-/**
- * @author cst
- */
-@Data
-public class StudentAnswerDTO implements Serializable {
-    private static final long serialVersionUID = -5846899734313166305L;
-//    @NotEmpty(message = "回答不能为空")
-//    private Map<String, Object> answers;
-
-    @NotNull(message = "缺少做题记录")
-    @Valid
-    private Map<String, AnswerRecordDTO> records;
-
-    @Data
-    public static class AnswerRecordDTO {
-        @NotNull(message = "缺少答案")
-        private Object answer;
-
-        @NotNull(message = "缺少做题开始时间")
-        @Past(message = "开始时间错误")
-        private LocalDateTime startAt;
-
-        @NotNull(message = "缺少做题结束时间")
-        @Past(message = "结束时间错误")
-        private LocalDateTime endAt;
-    }
-}

+ 34 - 28
src/main/java/nju/seec/helper/service/impl/QuestionServiceImpl.java

@@ -1,6 +1,7 @@
 package nju.seec.helper.service.impl;
 
 import cn.hutool.core.util.IdUtil;
+import com.google.common.collect.Lists;
 import nju.seec.helper.aspect.auth.LoginUser;
 import nju.seec.helper.dao.ChooseDAO;
 import nju.seec.helper.dao.QuestionRecordDAO;
@@ -21,10 +22,12 @@ import nju.seec.helper.sys.bok.api.RecordApi;
 import nju.seec.helper.sys.bok.api.UserInteractiveApi;
 import nju.seec.helper.sys.bok.dto.CollectDTO;
 import nju.seec.helper.sys.bok.dto.RateDTO;
+import nju.seec.helper.sys.bok.dto.RecordDTO;
 import nju.seec.helper.sys.bok.vo.InteractiveVO;
 import nju.seec.helper.sys.bok.vo.QuestionVO;
 import nju.seec.helper.sys.bok.vo.RecordQuestionVO;
 import nju.seec.helper.sys.dataanalysis.api.ExerciseApi;
+import nju.seec.helper.sys.dataanalysis.model.ExerciseRecord;
 import nju.seec.helper.sys.ml.api.RecommendationApi;
 import nju.seec.helper.vo.question.BaseQuestionVO;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -36,6 +39,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.util.Collections;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.stream.Collectors;
 
@@ -198,39 +202,41 @@ public class QuestionServiceImpl implements QuestionService {
     public List<BaseQuestionVO> getRecommendationQuestions(LoginUser user, List<String> knowledgeId, Integer questionNum) {
         return questionQueryApi.getQuestionListById(recommendationApi.getRecommendResult(String.valueOf(user.getPid()), knowledgeId, questionNum))
                 .stream()
-                .map(questionVO -> BaseQuestionVO.convertBokQuestionToVO(questionVO, false))
+                .map(questionVO -> BaseQuestionVO.convertBokQuestionToVO(questionVO, true))
                 .collect(Collectors.toList());
     }
 
     @Override
     public void record(LoginUser user, StudentAnswerDTO studentAnswerDTO) {
-        System.out.println(studentAnswerDTO);
-//        // 获取已有信息
-//        String userId = String.valueOf(user.getPid());
-//
-//        Map<String, StudentAnswerDTO.AnswerRecordDTO> recordMap = studentAnswerDTO.getRecords();
-//        List<BaseQuestionVO> baseQuestionVOList = questionQueryApi.getQuestionListById(Lists.newArrayList(recordMap.keySet()))
-//                .stream()
-//                .map(questionVO -> BaseQuestionVO.convertBokQuestionToVO(questionVO, true))
-//                .collect(Collectors.toList());
-//
-//        // 创建两个列表
-//        int size = recordMap.size();
-//        List<ExerciseRecord> exerciseRecords = Lists.newArrayListWithExpectedSize(size);
-//        List<RecordDTO> records = Lists.newArrayListWithExpectedSize(size);
-//
-//        // 填充列表
-//        baseQuestionVOList.forEach(baseQuestionVO -> {
-//            String questionId = baseQuestionVO.getId();
-//            StudentAnswerDTO.AnswerRecordDTO answerRecord = recordMap.get(questionId);
-//            Object answer = answerRecord.getAnswer();
-//            Boolean pass = baseQuestionVO.pass(answer);
-//            exerciseRecords.add(exerciseApi.createExerciseRecordDTO(userId, questionId, answerRecord.getStartAt(), answerRecord.getEndAt(), pass));
-//            records.add(recordApi.createRecordDTO(userId, questionId, answer, pass, answerRecord.getStartAt(), answerRecord.getEndAt()));
-//        });
-//
-//        exerciseApi.reportExercise(exerciseRecords);
-//        recordApi.reportUserRecord(records);
+        if (studentAnswerDTO.getRecords() == null || studentAnswerDTO.getRecords().isEmpty()) {
+            return;
+        }
+        // 获取已有信息
+        String userId = String.valueOf(user.getPid());
+
+        Map<String, StudentAnswerDTO.AnswerRecordDTO> recordMap = studentAnswerDTO.getRecords();
+        List<BaseQuestionVO> baseQuestionVOList = questionQueryApi.getQuestionListById(Lists.newArrayList(recordMap.keySet()))
+                .stream()
+                .map(questionVO -> BaseQuestionVO.convertBokQuestionToVO(questionVO, true))
+                .collect(Collectors.toList());
+
+        // 创建两个列表
+        int size = recordMap.size();
+        List<ExerciseRecord> exerciseRecords = Lists.newArrayListWithExpectedSize(size);
+        List<RecordDTO> records = Lists.newArrayListWithExpectedSize(size);
+
+        // 填充列表
+        baseQuestionVOList.forEach(baseQuestionVO -> {
+            String questionId = baseQuestionVO.getId();
+            StudentAnswerDTO.AnswerRecordDTO answerRecord = recordMap.get(questionId);
+            Object answer = answerRecord.getAnswer();
+            Boolean pass = baseQuestionVO.pass(answer);
+            exerciseRecords.add(exerciseApi.createExerciseRecordDTO(userId, questionId, answerRecord.getStartAt(), answerRecord.getEndAt(), pass));
+            records.add(recordApi.createRecordDTO(userId, questionId, answer, pass, answerRecord.getStartAt(), answerRecord.getEndAt()));
+        });
+
+        exerciseApi.reportExercise(exerciseRecords);
+        recordApi.reportUserRecord(records);
     }
 
     private static final Set<QuizState> HIDE_QUESTION_ANSWER_STATES = Collections.singleton(QuizState.ONGOING);

+ 1 - 1
src/main/java/nju/seec/helper/service/impl/QuizStudentAnswerServiceImpl.java

@@ -65,7 +65,7 @@ public class QuizStudentAnswerServiceImpl implements QuizStudentAnswerService {
         QuizStudentAnswer quizStudentAnswer = quizStudentAnswerDAO.findByQuizAndStudent(quiz, student).orElse(new QuizStudentAnswer());
 
         if (quizStudentAnswer.getSubmitNumber() >= quiz.getMaxSubmitNumber()) {
-            throw HelperException.of(ExceptionType.FORBIDDEN, StrUtil.format("已达最大提交次数{}次,无法提交", quiz.getMaxSubmitNumber()));
+            throw HelperException.of(ExceptionType.FORBIDDEN, StrUtil.format("已达最大提交次数{}次,无法提交", quiz.getMaxSubmitNumber()));
         }
 
         // 计算得分

+ 2 - 1
src/main/java/nju/seec/helper/sys/bok/api/RecordApi.java

@@ -28,7 +28,8 @@ public class RecordApi {
 
     @Async
     public void reportUserRecord(List<RecordDTO> records) {
-        restRequestUtil.sendPostRequest(url, records, String.class);
+        System.out.println(records);
+//        restRequestUtil.sendPostRequest(url, records, String.class);
     }
 
     public RecordDTO createRecordDTO(String studentId, String questionId, Object answer, Boolean pass, LocalDateTime startAt, LocalDateTime finishAt) {

+ 1 - 1
src/main/java/nju/seec/helper/sys/dataanalysis/api/ExerciseApi.java

@@ -23,7 +23,7 @@ public class ExerciseApi {
 
     @Async
     public void reportExercise(List<ExerciseRecord> exerciseRecords) {
-//        System.out.println(exerciseRecords);
+        System.out.println(exerciseRecords);
 //        restRequestUtil.sendPostRequest(exerciseReportUrl, exerciseRecords, Boolean.class);
     }