public ReviewExamDTO Update(ExamAnswerDTO examAnswer, Guid userId)
        {
            ReviewExamDTO mark = examineeService.CalculateMark(examAnswer, userId);

            mark.Date   = DateTime.Now.ToString("dd/MM/yyyy");
            mark.ExamId = examAnswer.ExamId;

            Score score = Get(examAnswer.ExamId, userId);

            score.Score1        = Math.Round(mark.Score, 2, MidpointRounding.AwayFromZero);
            score.Time          = mark.TimeSpent;
            score.AnswerContent = AnswerContentJSONToString(examAnswer, score.Score1, score.Time);
            scoreRepository.Update(score);
            ExamineeService.ExamineeService.QuestionState.Clear();
            return(mark);
        }
示例#2
0
        public ReviewExamDTO CalculateMark(ExamAnswerDTO examAnswer, Guid userId)
        {
            ReviewExamDTO mark = new ReviewExamDTO();

            mark.TimeSpent = CalculateTimeSpent(examAnswer.ExamId, userId);
            int numsOfTrue = 0;

            examAnswer.AnswerDetails.ForEach(answer =>
            {
                var key = questionRepository.GetById(answer.QuestionId);
                if (key.Type == 3)
                {
                    if (answer.Content.Equals(key.Content))
                    {
                        QuestionState.Add(key.Id, true);
                        numsOfTrue++;
                    }
                }
                else
                {
                    var userAnswers = answer.UserAnswers.Where(x => x.IsSelected == true).Select(x => x.AnswerId).OrderBy(x => x).ToList();
                    var trueAnswers = answerRepository.ListByQuestionId(key.Id).Where(x => x.IsCorrect == true).Select(x => x.Id).OrderBy(x => x).ToList();
                    if (string.Join("", userAnswers).Equals(string.Join("", trueAnswers)))
                    {
                        QuestionState.Add(key.Id, true);
                        numsOfTrue++;
                    }
                }
                if (!QuestionState.ContainsKey(key.Id))
                {
                    QuestionState.Add(key.Id, false);
                }
            });
            mark.Score = Math.Round(((Double)numsOfTrue) / examRepository.Count(examAnswer.ExamId, examService.IsRandom(examAnswer.ExamId)) * 10, 2, MidpointRounding.AwayFromZero);

            return(mark);
        }