public ActionResult Index(string ddlPlayer) { CapivaraModels Capivara = new CapivaraModels(); int id = Convert.ToInt32(Request.Form[0]); long idGuilda = 0; long.TryParse(User.Identity.GetIdGuilda(), out idGuilda); //ObterPlayer Capivara = new Player().ObterPlayerCapivara(id, idGuilda); //Obter a segunda da semana passada DateTime segundaFeira = DateTime.Today.AddDays(((int)(DateTime.Today.DayOfWeek) * -1) + 1); //Defesas da Semana Capivara.DefesasConsolidado = new GPCLib.DataAccess.DefesaPlayer().ListarDefesaConsolidado(segundaFeira.AddDays(-7), segundaFeira.AddDays(-1), id, idGuilda); GPCLib.DataAccess.AtaquesPlayer daAtaquesPlayer = new AtaquesPlayer(); //Ataques da Semana Capivara.AtaquesConsolidado = daAtaquesPlayer.ListarAtaqueConsolidado(segundaFeira, segundaFeira.AddDays(6), id, idGuilda); //Obter Time Defesa GVG (passar data de Domingo) Capivara.TimeGVG = new DefesaPlayer().ObterTimeDefesaGVG(id, segundaFeira.AddDays(-1), idGuilda); Capivara = CalcularStreak(new AtaquesPlayer().ListarAtaques(id, idGuilda), Capivara); return(View(Capivara)); }
private CapivaraModels CalcularStreak(List <GPCLib.Models.LutasModels> Lutas, CapivaraModels capi) { List <LutasModels> LutasOrdenado = Lutas.OrderBy(o => o.DataHora).ToList(); int countStreak = 0; int vitoriaAnterior = 0; int countMaiorStreak = 0; DateTime dInicioMaiorStreak = DateTime.MinValue; DateTime dFimMaiorStreak = DateTime.MinValue; DateTime dInicioStreak = DateTime.MinValue; DateTime dFimStreak = DateTime.MinValue; if (Lutas.Count > 0) { //se o indice 2 já for uma vitoria, guarda a da inicio e a vitorianAnterir if (Lutas[0].Vitoria == 2) { dInicioStreak = Lutas[0].DataHora; vitoriaAnterior = 2; } } foreach (LutasModels item in LutasOrdenado) { if (item.Vitoria == 2) { //Se o loop anterior for diretente de vitoria tem que resetar a data inicio. if (vitoriaAnterior != 2) { dInicioStreak = item.DataHora; } countStreak++; dFimStreak = item.DataHora; } else { //guardar o maior streak if (countStreak >= countMaiorStreak && countStreak > 0) { dInicioMaiorStreak = dInicioStreak; dFimMaiorStreak = dFimStreak; countMaiorStreak = countStreak; } countStreak = 0; dFimStreak = DateTime.MinValue; } vitoriaAnterior = item.Vitoria; } //guardar o maior streak if (countStreak >= countMaiorStreak && countStreak > 0) { dInicioMaiorStreak = dInicioStreak; dFimMaiorStreak = dFimStreak; countMaiorStreak = countStreak; } capi.FimStreak = dFimMaiorStreak; capi.InicioStreak = dInicioMaiorStreak; capi.StreakVitoria = countMaiorStreak; return(capi); }
public CapivaraModels ObterPlayerCapivara(int idPlayer, long idGuilda) { SqlConnection conexao = new SqlConnection(); SqlCommand command = new SqlCommand(); conexao.ConnectionString = ConfigurationManager.ConnectionStrings["DB_SW"].ToString(); StringBuilder select = new StringBuilder(); //multiguild select.AppendLine("SET DATEFORMAT dmy;"); select.AppendLine("select a.Nome,a.Imagem,"); select.AppendLine("(select count(vitoria) from dbo.Lutas b inner join dbo.Guilda_Player b1 on b1.idPlayer = b.CodPlayer and b1.ativo = 1 and b1.idGuilda = @idGuilda where b.CodPlayer = a.id and b.vitoria = 2) Vitorias,"); select.AppendLine("(select count(vitoria) from dbo.Lutas c inner join dbo.Guilda_Player b1 on b1.idPlayer = c.CodPlayer and b1.ativo = 1 and b1.idGuilda = @idGuilda where c.CodPlayer = a.id and c.vitoria = 1) Empates,"); select.AppendLine("(select count(vitoria) from dbo.Lutas d inner join dbo.Guilda_Player b1 on b1.idPlayer = d.CodPlayer and b1.ativo = 1 and b1.idGuilda = @idGuilda where d.CodPlayer = a.id and d.vitoria = 0) Derrotas,"); select.AppendLine("(select count(d1.vitoria) from dbo.PlayerDefesas d1 inner join dbo.Guilda_Player b1 on b1.idPlayer = d1.IdPlayer and b1.ativo = 1 and b1.idGuilda = @idGuilda where d1.vitoria = 2 and d1.IdPlayer = a.id) DefesaSucesso,"); select.AppendLine("(select count(d2.vitoria) from dbo.PlayerDefesas d2 inner join dbo.Guilda_Player b1 on b1.idPlayer = d2.IdPlayer and b1.ativo = 1 and b1.idGuilda = @idGuilda where d2.vitoria = 1 and d2.IdPlayer = a.id) DefesaEmpate,"); select.AppendLine("(select count(d3.vitoria) from dbo.PlayerDefesas d3 inner join dbo.Guilda_Player b1 on b1.idPlayer = d3.IdPlayer and b1.ativo = 1 and b1.idGuilda = @idGuilda where d3.vitoria = 0 and d3.IdPlayer = a.id ) DefesaDerrota,"); select.AppendLine("(select count(1) from "); select.AppendLine("DB_SW.dbo.PlayerStatus e "); select.AppendLine("inner join DB_SW.dbo.Batalhas f on f.id = e.idBatalha and f.IdGuildaAtacante = @idGuilda"); select.AppendLine("inner join dbo.Guilda_Player b1 on b1.idPlayer = e.IdPlayer and b1.ativo = 1 and b1.idGuilda = @idGuilda"); select.AppendLine("where "); select.AppendLine("e.idPlayer = a.id and e.Status = 'S') Escalado,"); select.AppendLine("(select count(1) from "); select.AppendLine("DB_SW.dbo.PlayerStatus g "); select.AppendLine("inner join DB_SW.dbo.Batalhas h on h.id = g.idBatalha and h.IdGuildaAtacante = @idGuilda"); select.AppendLine("inner join dbo.Guilda_Player b1 on b1.idPlayer = g.IdPlayer and b1.ativo = 1 and b1.idGuilda = @idGuilda"); select.AppendLine("where g.idPlayer = a.id and g.Status = 'S'"); select.AppendLine("and not exists (select 0 from DB_SW.dbo.Lutas i inner join dbo.Guilda_Player b1 on b1.idPlayer = i.CodPlayer and b1.ativo = 1 and b1.idGuilda = @idGuilda where i.CodPlayer = g.IdPlayer and i.CodBatalhas = g.IdBatalha))NAtacou"); select.AppendLine("from dbo.Player a"); select.AppendLine("where "); select.AppendLine("a.id = @idPlayer"); command.CommandText = select.ToString(); command.CommandType = System.Data.CommandType.Text; command.Parameters.Add(new SqlParameter("@idPlayer", System.Data.SqlDbType.Int)); command.Parameters["@idPlayer"].Value = idPlayer; command.Parameters.Add(new SqlParameter("@idGuilda", System.Data.SqlDbType.BigInt)); command.Parameters["@idGuilda"].Value = idGuilda; CapivaraModels objRetorno = new CapivaraModels(); conexao.Open(); command.Connection = conexao; SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { objRetorno = new CapivaraModels(); objRetorno.Player = new Player().ObterPlayer(idPlayer); objRetorno.PercentualDefesa = 0; objRetorno.PercentualParticipacao = 0; objRetorno.PercentualVitoria = 0; objRetorno.Vitorias = Convert.ToInt32(reader["Vitorias"].ToString()); objRetorno.Empates = Convert.ToInt32(reader["Empates"].ToString()); objRetorno.Derrotas = Convert.ToInt32(reader["Derrotas"].ToString()); objRetorno.Escalado = Convert.ToInt32(reader["Escalado"].ToString()); objRetorno.NAtacou = Convert.ToInt32(reader["NAtacou"].ToString()); objRetorno.DefesaVitorias = Convert.ToInt32(reader["DefesaSucesso"].ToString()); objRetorno.DefesaEmpates = Convert.ToInt32(reader["DefesaEmpate"].ToString()); objRetorno.DefesaDerrotas = Convert.ToInt32(reader["DefesaDerrota"].ToString()); objRetorno.Imagem = reader["Imagem"].ToString(); } //Ataques if (objRetorno.Vitorias > 0 || objRetorno.Empates > 0 || objRetorno.Derrotas > 0) { objRetorno.PercentualVitoria = Math.Round((Convert.ToDouble(objRetorno.Vitorias) / (objRetorno.Vitorias + objRetorno.Empates + objRetorno.Derrotas) * 100)); } //Defesas if (objRetorno.DefesaVitorias > 0 || objRetorno.DefesaEmpates > 0 || objRetorno.DefesaDerrotas > 0) { objRetorno.PercentualDefesa = Math.Round((Convert.ToDouble(objRetorno.DefesaVitorias) / (objRetorno.DefesaVitorias + objRetorno.DefesaEmpates + objRetorno.DefesaDerrotas) * 100)); } //Escalado if (objRetorno.Escalado > 0) { objRetorno.PercentualParticipacao = Math.Round(((objRetorno.Escalado - objRetorno.NAtacou) / Convert.ToDouble(objRetorno.Escalado)) * 100); } return(objRetorno); }