|
@@ -1,21 +1,13 @@
|
|
|
package nju.seec.helper.service.impl;
|
|
package nju.seec.helper.service.impl;
|
|
|
|
|
|
|
|
import cn.hutool.core.util.IdUtil;
|
|
import cn.hutool.core.util.IdUtil;
|
|
|
-import nju.seec.helper.sys.bok.api.QuestionApi;
|
|
|
|
|
-import nju.seec.helper.sys.bok.api.QuestionQueryApi;
|
|
|
|
|
-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.vo.InteractiveVO;
|
|
|
|
|
-import nju.seec.helper.sys.bok.vo.QuestionVO;
|
|
|
|
|
-import nju.seec.helper.sys.bok.vo.RecordQuestionVO;
|
|
|
|
|
import nju.seec.helper.aspect.auth.LoginUser;
|
|
import nju.seec.helper.aspect.auth.LoginUser;
|
|
|
import nju.seec.helper.dao.ChooseDAO;
|
|
import nju.seec.helper.dao.ChooseDAO;
|
|
|
import nju.seec.helper.dao.QuestionRecordDAO;
|
|
import nju.seec.helper.dao.QuestionRecordDAO;
|
|
|
import nju.seec.helper.dao.QuizDAO;
|
|
import nju.seec.helper.dao.QuizDAO;
|
|
|
import nju.seec.helper.dao.UserDAO;
|
|
import nju.seec.helper.dao.UserDAO;
|
|
|
import nju.seec.helper.dto.question.BaseQuestionDTO;
|
|
import nju.seec.helper.dto.question.BaseQuestionDTO;
|
|
|
|
|
+import nju.seec.helper.dto.quiz.StudentAnswerDTO;
|
|
|
import nju.seec.helper.entity.QuestionRecord;
|
|
import nju.seec.helper.entity.QuestionRecord;
|
|
|
import nju.seec.helper.entity.Quiz;
|
|
import nju.seec.helper.entity.Quiz;
|
|
|
import nju.seec.helper.enums.ExceptionType;
|
|
import nju.seec.helper.enums.ExceptionType;
|
|
@@ -23,6 +15,17 @@ import nju.seec.helper.enums.QuizState;
|
|
|
import nju.seec.helper.enums.UserRole;
|
|
import nju.seec.helper.enums.UserRole;
|
|
|
import nju.seec.helper.exception.HelperException;
|
|
import nju.seec.helper.exception.HelperException;
|
|
|
import nju.seec.helper.service.QuestionService;
|
|
import nju.seec.helper.service.QuestionService;
|
|
|
|
|
+import nju.seec.helper.sys.bok.api.QuestionApi;
|
|
|
|
|
+import nju.seec.helper.sys.bok.api.QuestionQueryApi;
|
|
|
|
|
+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.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.ml.api.RecommendationApi;
|
|
|
import nju.seec.helper.vo.question.BaseQuestionVO;
|
|
import nju.seec.helper.vo.question.BaseQuestionVO;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.data.domain.Page;
|
|
import org.springframework.data.domain.Page;
|
|
@@ -52,6 +55,8 @@ public class QuestionServiceImpl implements QuestionService {
|
|
|
private final QuestionQueryApi questionQueryApi;
|
|
private final QuestionQueryApi questionQueryApi;
|
|
|
private final UserInteractiveApi userInteractiveApi;
|
|
private final UserInteractiveApi userInteractiveApi;
|
|
|
private final RecordApi recordApi;
|
|
private final RecordApi recordApi;
|
|
|
|
|
+ private final RecommendationApi recommendationApi;
|
|
|
|
|
+ private final ExerciseApi exerciseApi;
|
|
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
|
public QuestionServiceImpl(QuizDAO quizDAO
|
|
public QuestionServiceImpl(QuizDAO quizDAO
|
|
@@ -62,6 +67,8 @@ public class QuestionServiceImpl implements QuestionService {
|
|
|
, QuestionQueryApi questionQueryApi
|
|
, QuestionQueryApi questionQueryApi
|
|
|
, UserInteractiveApi userInteractiveApi
|
|
, UserInteractiveApi userInteractiveApi
|
|
|
, RecordApi recordApi
|
|
, RecordApi recordApi
|
|
|
|
|
+ , RecommendationApi recommendationApi
|
|
|
|
|
+ , ExerciseApi exerciseApi
|
|
|
) {
|
|
) {
|
|
|
this.quizDAO = quizDAO;
|
|
this.quizDAO = quizDAO;
|
|
|
this.userDAO = userDAO;
|
|
this.userDAO = userDAO;
|
|
@@ -71,6 +78,8 @@ public class QuestionServiceImpl implements QuestionService {
|
|
|
this.questionQueryApi = questionQueryApi;
|
|
this.questionQueryApi = questionQueryApi;
|
|
|
this.userInteractiveApi = userInteractiveApi;
|
|
this.userInteractiveApi = userInteractiveApi;
|
|
|
this.recordApi = recordApi;
|
|
this.recordApi = recordApi;
|
|
|
|
|
+ this.recommendationApi = recommendationApi;
|
|
|
|
|
+ this.exerciseApi = exerciseApi;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@@ -80,19 +89,16 @@ public class QuestionServiceImpl implements QuestionService {
|
|
|
|
|
|
|
|
@Transactional(readOnly = true)
|
|
@Transactional(readOnly = true)
|
|
|
@Override
|
|
@Override
|
|
|
- public List<BaseQuestionVO> getQuestionsByQuiz(LoginUser user, Long quizId) {
|
|
|
|
|
|
|
+ public List<BaseQuestionVO> getQuestionsByQuizId(LoginUser user, Long quizId) {
|
|
|
Quiz quiz = quizDAO.findQuizById(quizId);
|
|
Quiz quiz = quizDAO.findQuizById(quizId);
|
|
|
- List<String> questionIds = quiz.getQuestions();
|
|
|
|
|
- return questionQueryApi.getQuestionListById(questionIds)
|
|
|
|
|
|
|
+ return questionQueryApi.getQuestionListById(quiz.getQuestions())
|
|
|
.stream()
|
|
.stream()
|
|
|
.map(bokQuestion -> BaseQuestionVO.convertBokQuestionToVO(bokQuestion, quiz.getState() == QuizState.CLOSED || user.getRole() == UserRole.TEACHER))
|
|
.map(bokQuestion -> BaseQuestionVO.convertBokQuestionToVO(bokQuestion, quiz.getState() == QuizState.CLOSED || user.getRole() == UserRole.TEACHER))
|
|
|
.collect(Collectors.toList());
|
|
.collect(Collectors.toList());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- @Transactional(readOnly = true)
|
|
|
|
|
@Override
|
|
@Override
|
|
|
- public List<BaseQuestionVO> getQuestionsByQuiz(Quiz quiz) {
|
|
|
|
|
- List<String> questionIds = quiz.getQuestions();
|
|
|
|
|
|
|
+ public List<BaseQuestionVO> getQuestionsByIds(List<String> questionIds) {
|
|
|
return questionQueryApi.getQuestionListById(questionIds)
|
|
return questionQueryApi.getQuestionListById(questionIds)
|
|
|
.stream()
|
|
.stream()
|
|
|
.map(bokQuestion -> BaseQuestionVO.convertBokQuestionToVO(bokQuestion, true))
|
|
.map(bokQuestion -> BaseQuestionVO.convertBokQuestionToVO(bokQuestion, true))
|
|
@@ -188,6 +194,45 @@ public class QuestionServiceImpl implements QuestionService {
|
|
|
return userInteractiveApi.getInteractive(String.valueOf(user.getPid()), questionId);
|
|
return userInteractiveApi.getInteractive(String.valueOf(user.getPid()), questionId);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Override
|
|
|
|
|
+ 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))
|
|
|
|
|
+ .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);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
private static final Set<QuizState> HIDE_QUESTION_ANSWER_STATES = Collections.singleton(QuizState.ONGOING);
|
|
private static final Set<QuizState> HIDE_QUESTION_ANSWER_STATES = Collections.singleton(QuizState.ONGOING);
|
|
|
|
|
|
|
|
private Page<BaseQuestionVO> convert(LoginUser user, Page<QuestionVO> questionVOList) {
|
|
private Page<BaseQuestionVO> convert(LoginUser user, Page<QuestionVO> questionVOList) {
|