Ejemplo n.º 1
0
        // GET: Problems/Details/5
        public async Task <IActionResult> Details(int?id)
        {
            if (id == null)
            {
                return(NotFound());
            }

            var problem = await _context.Problem
                          .FirstOrDefaultAsync(m => m.Id == id);


            if (problem == null)
            {
                return(NotFound());
            }

            SubmitProblemViewModel submitProblemVM = new SubmitProblemViewModel();

            submitProblemVM.Id                 = problem.Id;
            submitProblemVM.ProblemName        = problem.ProblemName;
            submitProblemVM.ProblemDescription = problem.ProblemDescription;
            submitProblemVM.ProblemLevel       = problem.ProblemLevel;
            submitProblemVM.Points             = problem.Points;


            return(View(submitProblemVM));
        }
Ejemplo n.º 2
0
        public async Task <IActionResult> Details(int id, [Bind("Id,ProblemName,ProblemDescription,ProblemLevel,Points,SubmittedAnswer")] SubmitProblemViewModel submittedProblem)
        {
            if (id != submittedProblem.Id)
            {
                return(NotFound());
            }

            var problem = await _context.Problem
                          .FirstOrDefaultAsync(m => m.Id == id);

            if (problem == null)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                if (submittedProblem.SubmittedAnswer.Equals(problem.Answer))
                {
                    var CurrentUser = new ApplicationUser();
                    CurrentUser = await GetCurrentUserAsync();

                    await _context.Entry(CurrentUser).Reference(x => x.MyTeam).LoadAsync(); //explicitly load myTeam because of lazy loading

                    CurrentUser.MyTeam.Score += problem.Points;
                    try
                    {
                        _context.Update(CurrentUser);
                        await _context.SaveChangesAsync();
                    }
                    catch (DbUpdateConcurrencyException)
                    {
                        if (!ProblemExists(problem.Id))
                        {
                            return(NotFound());
                        }
                        else
                        {
                            throw;
                        }
                    }
                    return(RedirectToAction("MyTeam", "Teams"));
                }
            }
            return(RedirectToAction("Details", "Problems")); //refresh
        }
Ejemplo n.º 3
0
        public async Task <IActionResult> SaveOneProblem(SubmitProblemViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            var  json          = new mJsonResult();
            Guid examProblemID = Guid.Parse(model.examProblemID);

            using (var trans = _examContext.Database.BeginTransaction())
            {
                try
                {
                    var userProScore = await _examContext.UserProblemScores
                                       .FindAsync(examProblemID);

                    if (userProScore != null)
                    {
                        #region 判断(规定时间内答题)
                        if (userProScore.IsSubmitOver == 1)//已经提交的问题不允许提交
                        {
                            json.msg = "已经提交的问题不能再提交";
                            return(Ok(json));
                        }
                        if (!await GetProblemInCountdown(userProScore))
                        {
                            json.msg = "只能在规定时间内答题";
                            return(Ok(json));
                        }
                        #endregion

                        if (userProScore.SubmitAnswer != model.submitAnswer)
                        {
                            userProScore.ExaminationDate = DateTime.Now;
                            userProScore.SubmitAnswer    = model.submitAnswer;
                            if (model.isSubmitOver.HasValue)
                            {
                                userProScore.IsSubmitOver = model.isSubmitOver.Value;//代表已提交
                            }
                            string answer = userProScore.Answer
                                            .Replace("\n", "").Replace(" ", "")
                                            .Replace("\t", "").Replace("\r", "");
                            if (userProScore.ProblemType == (int)eProblemType.狭路相逢)
                            {
                                userProScore.Score = model.submitAnswer == answer
                                    ? userProScore.ProblemScore : -userProScore.ProblemScore;
                            }
                            else
                            {
                                userProScore.Score = model.submitAnswer == answer
                                    ? userProScore.ProblemScore : 0;
                            }
                            _examContext.UserProblemScores.Update(userProScore);
                            _examContext.SaveChanges();
                            //统计所有
                            var userId        = Guid.Parse(_identityService.GetUserIdentity());
                            var userExamScore = await _examContext.UserExamScores
                                                .SingleOrDefaultAsync(s => s.UserID == userId);

                            var userProblemScore = _examContext.UserProblemScores
                                                   .Where(x => x.Score.HasValue && x.UserID == userId);
                            switch (userProScore.ProblemType)
                            {
                            case (int)eProblemType.争分夺秒:
                                userExamScore.TypeScores1 = userProblemScore
                                                            .Where(x => x.ProblemType == (int)eProblemType.争分夺秒)
                                                            .Sum(s => s.Score);
                                break;

                            case (int)eProblemType.一比高下:
                                userExamScore.TypeScores2 = userProblemScore
                                                            .Where(x => x.ProblemType == (int)eProblemType.一比高下)
                                                            .Sum(s => s.Score);
                                break;

                            case (int)eProblemType.狭路相逢:
                                userExamScore.TypeScores3 = userProblemScore
                                                            .Where(x => x.ProblemType == (int)eProblemType.狭路相逢)
                                                            .Sum(s => s.Score);
                                break;
                            }
                            userExamScore.TotalScores = (userExamScore.TypeScores1 ?? 0)
                                                        + (userExamScore.TypeScores2 ?? 0) + (userExamScore.TypeScores3 ?? 0);

                            _examContext.UserExamScores.Update(userExamScore);
                            _examContext.SaveChanges();

                            trans.Commit();//显式事物提交
                            json.success = true;
                        }
                    }
                    else
                    {
                        return(NotFound());
                    }
                }catch (Exception ex)
                {
                    trans.Rollback();
                    _logger.LogError("保存一道题目的时候出错:{0}", ex.Message);
                    //throw new Exception();
                }
            }

            return(Ok(json));
        }