| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- 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<String, StudentAnswerDTO.AnswerRecordDTO> records = studentAnswerDTO.getRecords();
- List<String> questionIds = new ArrayList<>(records.keySet());
- List<BaseQuestionVO> questionVOList = questionService.getQuestionsByIds(questionIds);
- System.out.println("questions from bok are as follows:");
- System.out.println(questionVOList);
- AtomicInteger correct = new AtomicInteger();
- List<RecordVO> judgedAnswerRecords = new ArrayList<>();
- Map<String, JudgedAnswersVO.QuestionStudentAnswerInfo> 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<RecordVO> recordVOS = seecoderBokClient.createUserRecord(judgedAnswerRecords);
- System.out.println("results are as follows:");
- System.out.println(res);
- return res;
- }
- }
|