Пример #1
0
 public IHttpActionResult Get(int?id)
 {
     if (!id.HasValue)
     {
         return(BadRequest(ModelState));
     }
     try
     {
         var baseTest = _baseTestService.Find(e => e.Id == id.Value, e => e.Approver, e => e.Course, e => e.BaseTestContents);
         return(Ok(new
         {
             Approver = baseTest.Approver.FullName,
             baseTest.NumberOfQuestion,
             baseTest.StartTime,
             baseTest.EndTime,
             baseTest.Duration,
             baseTest.ExamCode,
             IsApproved = baseTest.Status == BaseTestStatus.Approved,
             Course = baseTest.Course.Name,
             questions = baseTest.BaseTestContents.Select(__ => new
             {
                 __.Content,
                 Options = JsonConvert.DeserializeObject <GetOptionVM[]>(__.Options),
                 __.Level
             })
         }));
     }
     catch (Exception ex)
     {
         _loggingService.Write(ex);
         return(InternalServerError(ex));
     }
 }
Пример #2
0
        public IHttpActionResult Submit([FromBody] ResultDataVM data)
        {
            try
            {
                var contents = JsonConvert.DeserializeObject <ResultVM>(data.Json.Decrypt());

                BaseTest           baseTest     = _baseTestService.Find(_ => _.Id == contents.ExamId);
                List <TestContent> testContents = new List <TestContent>();

                string studentCode = contents.StudentId;

                if (baseTest != null)
                {
                    if (_testService.Find(_ => _.BaseTestId == baseTest.Id &&
                                          _.StudentCode == studentCode) == null)
                    {
                        float totalMarkOfTest = 0;
                        float finalMarkOfTest = 0;
                        foreach (var ele in contents.ExamAs)
                        {
                            ele.Answers = ele.Answers ?? new List <int>();

                            Question quest = _questionService.Find(_ => _.Code == ele.QuestionCode, _ => _.Options);

                            List <Option> rightAnswer       = quest.Options.Where(_ => _.IsCorrect).ToList();
                            List <Option> finalRightAnswers = quest.Options.Where(_ => _.IsCorrect).ToList();
                            List <Option> studentAnswers    = _optionService.Search(_ => ele.Answers.Contains(_.Id)).ToList();

                            totalMarkOfTest += quest.Mark;
                            float markOfQuestion,
                                  markRightAnswers = 0,
                                  markWrongAnswers = 0;

                            rightAnswer.ForEach(_ =>
                            {
                                if (ele.Answers.Contains(_.Id))  //mỗi lần nó trả lời đúng 1 câu
                                {
                                    finalRightAnswers.Remove(_); //trừ đi những câu nó đã đánh đúng => còn lại những câu đúng mà nó k đánh
                                    var temp = studentAnswers.Find(x => x.Id == _.Id);
                                    studentAnswers.Remove(temp); //những câu nó sai
                                }
                            });

                            finalRightAnswers.ForEach(_ =>
                            {
                                markRightAnswers += Math.Abs((_.Percent * quest.Mark) / 100);
                            });
                            studentAnswers.ForEach(_ =>
                            {
                                markWrongAnswers += Math.Abs((_.Percent * quest.Mark) / 100);//điểm của những câu trả lời sai
                            });

                            markOfQuestion = (float)Math.Round(quest.Mark - markWrongAnswers - markRightAnswers, 2);

                            finalMarkOfTest += markOfQuestion < 0 ? 0 : markOfQuestion;

                            testContents.Add(new TestContent
                            {
                                Answers      = JsonConvert.SerializeObject(ele.Answers ?? new List <int>()),
                                Mark         = markOfQuestion < 0 ? 0 : markOfQuestion,
                                QuestionCode = ele.QuestionCode
                            });
                        }

                        var auth = _authenticationService.Find(_ => _.WebId == studentCode &&
                                                               _.Username == User.Identity.Name);

                        if (auth != null)
                        {
                            _authenticationService.Delete(auth);
                        }


                        var test = new Test
                        {
                            BaseTestId   = contents.ExamId,
                            IsFinished   = true,
                            StartTime    = baseTest.StartTime,
                            EndTime      = DateTimeOffset.Now,
                            Duration     = DateTimeOffset.Now - baseTest.StartTime,
                            Mark         = finalMarkOfTest,
                            TotalMark    = totalMarkOfTest,
                            StudentCode  = studentCode,
                            TestContents = testContents
                        };
                        bool result = _testService.Create(test);
                    }
                }
            }
            catch (Exception ex)
            {
                _loggingService.Write(ex);
                return(InternalServerError(ex));
            }
            return(Ok());
        }