package cn.seecoder.judgement.service.impl; import cn.seecoder.bok.client.SeecoderBokClient; import cn.seecoder.bok.common.vo.RecordVO; import cn.seecoder.judgement.dto.StudentAnswerDTO; import cn.seecoder.judgement.service.JudgementService; import cn.seecoder.judgement.service.QuestionService; import cn.seecoder.judgement.vo.JudgedAnswersVO; import cn.seecoder.judgement.vo.question.BaseQuestionVO; import org.springframework.stereotype.Service; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; /** * author:hr */ @Service public class JudgementServiceImpl implements JudgementService { private final QuestionService questionService; public JudgementServiceImpl(QuestionService questionService){ this.questionService = questionService; } @Override public JudgedAnswersVO submitQuestionsStudentAnswer(StudentAnswerDTO studentAnswerDTO) { System.out.println(new Date()); System.out.println("start judging, students'answers are:"); System.out.println(studentAnswerDTO); String userId = studentAnswerDTO.getUserId(); Map records = studentAnswerDTO.getRecords(); List questionIds = new ArrayList<>(records.keySet()); List questionVOList = questionService.getQuestionsByIds(questionIds); System.out.println("questions from bok are as follows:"); System.out.println(questionVOList); AtomicInteger correct = new AtomicInteger(); List judgedAnswerRecords = new ArrayList<>(); Map judgedAnswers = new HashMap<>(); questionVOList.forEach(baseQuestionVO -> { String questionId = baseQuestionVO.getId(); Object answer = records.get(questionId).getAnswer(); boolean isTrue = baseQuestionVO.pass(answer); if (isTrue) { correct.getAndIncrement(); } judgedAnswers.put(questionId, JudgedAnswersVO.QuestionStudentAnswerInfo.of(questionId, answer, isTrue)); //保存做题数据 StudentAnswerDTO.AnswerRecordDTO answerRecordDTO = records.get(questionId); RecordVO record = new RecordVO(); record.setUserId(userId); record.setQuestionId(questionId); record.setPass(isTrue); record.setStudentAnswer(String.valueOf(answer)); record.setStartAt(answerRecordDTO.getStartAt()); record.setFinishAt(answerRecordDTO.getEndAt()); judgedAnswerRecords.add(record); }); JudgedAnswersVO res = new JudgedAnswersVO(judgedAnswers); SeecoderBokClient seecoderBokClient = new SeecoderBokClient("http://bok.seecoder.cn", 0); List recordVOS = seecoderBokClient.createUserRecord(judgedAnswerRecords); System.out.println("results are as follows:"); System.out.println(res); return res; } }