public RankingSimuladoAluno GetResultadoRankingAluno(int matricula, int idSimulado, int idAplicacao, string especialidade, string unidades, string localidade = "")
        {
            try
            {
                using (MiniProfiler.Current.Step("Obtendo resultado ranking aluno"))
                {
                    var simuladoConsolidado = _rankingSimuladoRepository.GetSimuladoConsolidado(matricula, idSimulado);
                    var result = new RankingSimuladoAluno();

                    if (simuladoConsolidado == null)
                    {
                        result.EstatisticasAlunoRankingOnline = _rankingSimuladoRepository.GetEstatisticaAlunoSimulado(matricula, idSimulado, true);

                        _rankingSimuladoRepository.InsertSimuladoConsolidado(matricula, idSimulado, result.EstatisticasAlunoRankingOnline);
                    }
                    else
                    {
                        result.EstatisticasAlunoRankingOnline = _rankingSimuladoRepository.GetEstatisticaAlunoSimulado(matricula, idSimulado, true);
                    }

                    result.EstatisticasAlunoRankingEstudo = _rankingSimuladoRepository.GetEstatisticaAlunoSimulado(matricula, idSimulado, false);

                    var local = string.IsNullOrEmpty(localidade) ? string.Empty : (localidade.IndexOf('(') > 0 ? localidade.Substring(0, localidade.IndexOf('(')).Trim() : localidade);

                    var rank = new RankingSimuladoAluno();

                    try
                    {
                        if (RedisCacheManager.CannotCache(RedisCacheConstants.Simulado.KeyRankingSimulado))
                        {
                            rank = _rankingSimuladoRepository.GetRankingObjetiva(matricula, idSimulado, especialidade, unidades, local);
                        }
                        else
                        {
                            rank = _rankingSimuladoRepository.GetRankingObjetivaCache(matricula, idSimulado, especialidade, unidades, local);
                        }
                    }
                    catch (Exception)
                    {
                        rank = _rankingSimuladoRepository.GetRankingObjetiva(matricula, idSimulado, especialidade, unidades, local);
                    }


                    if (rank != null)
                    {
                        result.Nota                    = rank.Nota;
                        result.Posicao                 = rank.Posicao;
                        result.DataRealizacao          = rank.Simulado.DtHoraInicio;
                        result.QuantidadeParticipantes = (int)Math.Ceiling(Convert.ToDecimal(getQuantidadeParticipantesRanking(rank.QuantidadeParticipantes)) / 2);
                    }

                    return(result);
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }
        private RankingSimuladoAluno ObterPosicaoAlunoNoRankingModoProva(RankingSimuladoAluno rankingAluno, int idSimulado, int idHistorico, string especialidade, string unidades, string localidade)
        {
            var addAlunoAoRanking   = 1;
            var ranking             = _exercicioRepository.ObterRankingPorSimulado(idSimulado, especialidade, unidades, localidade);
            var qtdQuestoes         = _exercicioRepository.ObterQuantidadeQuestoesSimuladoOnline(idSimulado);
            var posicaoRankingAluno = ranking.Where(x => x.Acertos > rankingAluno.EstatisticasAlunoRankingModoProva.Acertos).Count() + addAlunoAoRanking;

            if (ranking.Count == 0)
            {
                rankingAluno.Posicao = "1º";
            }
            else
            {
                rankingAluno.Posicao = posicaoRankingAluno.ToString() + "º";
            }

            rankingAluno.Nota                    = ((10d / (double)qtdQuestoes) * rankingAluno.EstatisticasAlunoRankingModoProva.Acertos).ToString("0.#");
            rankingAluno.DataRealizacao          = _exercicioRepository.ObterExercicio(idHistorico).dteDateInicio;
            rankingAluno.QuantidadeParticipantes = ranking.Count > 0 ? (ranking.Count + addAlunoAoRanking) : 1;

            return(rankingAluno);
        }
        public RankingSimuladoAluno GetResultadoRankingModoProva(int matricula, int idSimulado, int idHistorico, int idAplicacao, string especialidade = "", string unidades = "", string localidade = "")
        {
            try
            {
                using (MiniProfiler.Current.Step("Obtendo resultado ranking modo prova"))
                {
                    var result = new RankingSimuladoAluno();

                    result.EstatisticasAlunoRankingModoProva = _rankingSimuladoRepository.GetEstatisticaAlunoSimuladoModoProva(matricula, idSimulado, idHistorico);
                    result.EstatisticasAlunoRankingEstudo    = _rankingSimuladoRepository.GetEstatisticaAlunoSimulado(matricula, idSimulado, false);

                    var local = string.IsNullOrEmpty(localidade) ? string.Empty : (localidade.IndexOf('(') > 0 ? localidade.Substring(0, localidade.IndexOf('(')).Trim() : localidade);

                    this.ObterPosicaoAlunoNoRankingModoProva(result, idSimulado, idHistorico, especialidade, unidades, localidade);

                    return(result);
                }
            }
            catch (Exception e)
            {
                throw e;
            }
        }