Exemplo n.º 1
0
 public Result <TestEndOutput> TestEnd([FromBody] ExaminationIntput examinationIntput)
 {
     return(_iExaminationService.TestEnd(long.Parse(User.Identity.Name), examinationIntput));
 }
Exemplo n.º 2
0
        /// <summary>
        /// 交卷
        /// </summary>
        /// <param name="userId"></param>
        /// <param name="examinationIntput"></param>
        /// <returns></returns>
        public Result <TestEndOutput> TestEnd(long userId, ExaminationIntput examinationIntput)
        {
            Score score = new Score();

            if (string.IsNullOrEmpty(examinationIntput.ExaminationId))
            {
                return(Result <TestEndOutput> .Fail("该考试不存在"));
            }

            var has             = false;
            var thisExamination = _examination.Get(long.Parse(examinationIntput.ExaminationId));

            DateTime timeNow = DateTime.Now.Date;

            if (_score.Any(s => s.UserId == userId && s.ExaminationId == thisExamination.Id))
            {
                has   = true;
                score = _score.GetAll().FirstOrDefault(s => s.UserId == userId && s.ExaminationId == thisExamination.Id);
            }

            score.UserId        = userId;
            score.ExaminationId = thisExamination.Id;
            score.DayOrWeek     = thisExamination.DayOrWeek;
            string scoreContent = "[";
            double totalScore   = 0;
            var    types        = _questionType.GetAll().ToList();

            var error = 0;

            List <QuestionStringId> ErrorQuestion = new List <QuestionStringId>();


            ExaminationOutPut questionsResult = new ExaminationOutPut();
            var single   = _questionType.FirstOrDefault(q => q.Name == "单选"); //单选题数量
            var multiple = _questionType.FirstOrDefault(q => q.Name == "多选"); //多选题数量
            var judge    = _questionType.FirstOrDefault(q => q.Name == "判断"); //判断题数量

            foreach (QuestionAndInputAnswer item in examinationIntput.questionAndInputAnswers)
            {
                //item.QuestionItemId.TrimEnd() + "###" + item.InputAnswer.TrimEnd() + "&&&"
                scoreContent += "{\"" + item.QuestionItemId + "\":\"" + item.InputAnswer + "\"},";
                var thisQuestion = _question.Get(long.Parse(item.QuestionItemId));
                if (item.InputAnswer.TrimEnd() == thisQuestion.Answer)
                {
                    totalScore += types.FirstOrDefault(m => m.Id == thisQuestion.QuestionTypeId).Score;
                }
                else
                {
                    ErrorQuestion.Add(new QuestionStringId()
                    {
                        StrId        = thisQuestion.Id.ToString(),
                        Content      = thisQuestion.Content,
                        Options      = thisQuestion.Options,
                        AnswerNote   = thisQuestion.AnswerNote,
                        QuestionType = thisQuestion.QuestionTypeId == single.Id ? "单选" : thisQuestion.QuestionTypeId == multiple.Id ? "多选" : "判断",
                        Answer       = thisQuestion.Answer,
                        MyAnswer     = item.InputAnswer
                    });
                    error++;
                }
            }
            scoreContent     = scoreContent.Substring(0, scoreContent.Length - 1);
            scoreContent    += "]";
            score.Content    = scoreContent;
            score.TotalScore = totalScore;
            try
            {
                if (has)
                {
                    _score.Update(score);
                }
                else
                {
                    _score.Insert(score);
                }
                _unitOfWork.SaveChanges();
                return(Result <TestEndOutput> .Success(new TestEndOutput()
                {
                    Toal = examinationIntput.questionAndInputAnswers.Count(),
                    Error = error,
                    Score = totalScore,
                    ErrorQuestion = ErrorQuestion
                }));;
            }
            catch
            {
                return(Result <TestEndOutput> .Fail(""));
            }
        }