JudgementServiceImpl.java 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package cn.seecoder.judgement.service.impl;
  2. import cn.seecoder.bok.client.SeecoderBokClient;
  3. import cn.seecoder.bok.common.vo.RecordVO;
  4. import cn.seecoder.judgement.dto.StudentAnswerDTO;
  5. import cn.seecoder.judgement.service.JudgementService;
  6. import cn.seecoder.judgement.service.QuestionService;
  7. import cn.seecoder.judgement.vo.JudgedAnswersVO;
  8. import cn.seecoder.judgement.vo.question.BaseQuestionVO;
  9. import org.springframework.stereotype.Service;
  10. import java.util.*;
  11. import java.util.concurrent.atomic.AtomicInteger;
  12. /**
  13. * author:hr
  14. */
  15. @Service
  16. public class JudgementServiceImpl implements JudgementService {
  17. private final QuestionService questionService;
  18. public JudgementServiceImpl(QuestionService questionService){
  19. this.questionService = questionService;
  20. }
  21. @Override
  22. public JudgedAnswersVO submitQuestionsStudentAnswer(StudentAnswerDTO studentAnswerDTO) {
  23. System.out.println(new Date());
  24. System.out.println("start judging, students'answers are:");
  25. System.out.println(studentAnswerDTO);
  26. String userId = studentAnswerDTO.getUserId();
  27. Map<String, StudentAnswerDTO.AnswerRecordDTO> records = studentAnswerDTO.getRecords();
  28. List<String> questionIds = new ArrayList<>(records.keySet());
  29. List<BaseQuestionVO> questionVOList = questionService.getQuestionsByIds(questionIds);
  30. System.out.println("questions from bok are as follows:");
  31. System.out.println(questionVOList);
  32. AtomicInteger correct = new AtomicInteger();
  33. List<RecordVO> judgedAnswerRecords = new ArrayList<>();
  34. Map<String, JudgedAnswersVO.QuestionStudentAnswerInfo> judgedAnswers = new HashMap<>();
  35. questionVOList.forEach(baseQuestionVO -> {
  36. String questionId = baseQuestionVO.getId();
  37. Object answer = records.get(questionId).getAnswer();
  38. boolean isTrue = baseQuestionVO.pass(answer);
  39. if (isTrue) {
  40. correct.getAndIncrement();
  41. }
  42. judgedAnswers.put(questionId, JudgedAnswersVO.QuestionStudentAnswerInfo.of(questionId, answer, isTrue));
  43. //保存做题数据
  44. StudentAnswerDTO.AnswerRecordDTO answerRecordDTO = records.get(questionId);
  45. RecordVO record = new RecordVO();
  46. record.setUserId(userId);
  47. record.setQuestionId(questionId);
  48. record.setPass(isTrue);
  49. record.setStudentAnswer(String.valueOf(answer));
  50. record.setStartAt(answerRecordDTO.getStartAt());
  51. record.setFinishAt(answerRecordDTO.getEndAt());
  52. judgedAnswerRecords.add(record);
  53. });
  54. JudgedAnswersVO res = new JudgedAnswersVO(judgedAnswers);
  55. SeecoderBokClient seecoderBokClient = new SeecoderBokClient("http://bok.seecoder.cn", 0);
  56. List<RecordVO> recordVOS = seecoderBokClient.createUserRecord(judgedAnswerRecords);
  57. System.out.println("results are as follows:");
  58. System.out.println(res);
  59. return res;
  60. }
  61. }