private void cadastraPalpiteConcurso(int idConcurso, DezenaDuplaSena dezena)
        {
            var paramList = new DynamicParameters();

            paramList.Add("@idConcurso", idConcurso);
            paramList.Add("@sorteio", dezena.Sorteio);
            paramList.Add("@dezena", dezena.Dezena);

            cn.Execute("sp_cadastraPalpiteDuplaSena", paramList, commandType: CommandType.StoredProcedure);
        }
        internal List <DezenaDuplaSena> GetPalpiteProximoSorteio(int?idConcurso)
        {
            List <DezenaDuplaSena> numeros = new List <DezenaDuplaSena>();

            using (cn)
            {
                using (IDataReader dr = cn.ExecuteReader("sp_palpiteProximoSorteioDuplaSena", new { @idConcurso = idConcurso }, commandType: CommandType.StoredProcedure))
                {
                    while (dr.Read())
                    {
                        DezenaDuplaSena numero = new DezenaDuplaSena();
                        numero.Dezena  = Convert.ToByte(dr["dezena"]);
                        numero.Sorteio = Convert.ToByte(dr["sorteio"]);

                        numeros.Add(numero);
                    }
                }
            }

            return(numeros);
        }
        public void GeraPalpiteProximoSorteio(int idConcurso)
        {
            int sorteiosAnteriores = 5;
            int quantidadePalpite  = 40;
            Dictionary <byte, byte> numerosLoteria = new Dictionary <byte, byte>(DuplaSena.TotalNumerosLoteria);
            Dictionary <byte, byte> ultimosNumeros = _repository.GeraPalpiteProxSorteio(sorteiosAnteriores);

            for (byte i = 1; i <= DuplaSena.TotalNumerosLoteria; i++)
            {
                byte?value = ultimosNumeros.FirstOrDefault(n => n.Key == i).Value;
                numerosLoteria.Add(i, value == null ? (byte)0 : (byte)value);
            }

            var primeirosMenosSairam = numerosLoteria.OrderBy(n => n.Value).ToList().Take(quantidadePalpite);

            List <DezenaDuplaSena> palpite = new List <DezenaDuplaSena>();

            while (palpite.Count != DuplaSena.QuantidadePadraoAposta)
            {
                int random = new System.Random().Next(0, quantidadePalpite);

                DezenaDuplaSena numero = new DezenaDuplaSena()
                {
                    Dezena = primeirosMenosSairam.ElementAt(random).Key
                };

                if (!palpite.Any(p => p.Dezena == numero.Dezena))
                {
                    palpite.Add(numero);
                }
            }

            for (int i = 0; i < palpite.Count; i++)
            {
                palpite[i].Sorteio = i % 2 == 0 ? (byte)1 : (byte)2;
            }

            _repository.InserirPalpite(idConcurso, palpite);
        }
        private Concurso buscar(int?id)
        {
            DuplaSena con = new DuplaSena();

            try
            {
                using (cn)
                {
                    cn.Open();

                    using (IDataReader dr = cn.ExecuteReader("sp_buscaConcursoDuplaSena", new { @IdConcurso = id }, commandType: CommandType.StoredProcedure))
                    {
                        if (dr.Read())
                        {
                            con.ProximoConcurso = new ProximoConcurso();

                            con.ID                            = Convert.ToInt32(dr["idConcurso"]);
                            con.Data                          = Convert.ToDateTime(dr["data"]);
                            con.Cidade                        = Convert.ToString(dr["cidade"]);
                            con.Local                         = Convert.ToString(dr["local"]);
                            con.ValorAcumulado                = Convert.ToDecimal(dr["valorAcumulado"]);
                            con.ArrecadacaoTotal              = Convert.ToDecimal(dr["arrecadacaoTotal"]);
                            con.ProximoConcurso.Data          = Convert.ToDateTime(dr["proximoConcursoData"]);
                            con.ProximoConcurso.ValorEstimado = Convert.ToDecimal(dr["proximoConcursoValorEstimado"]);
                            con.EspecialValorAcumulado        = dr["especialValorAcumulado"] == DBNull.Value ? (decimal?)null : Convert.ToDecimal(dr["especialValorAcumulado"]);
                        }
                    }

                    if (con.ID != 0)
                    {
                        using (IDataReader dr = cn.ExecuteReader("sp_buscaDezenasDuplaSena", new { @IdConcurso = con.ID }, commandType: CommandType.StoredProcedure))
                        {
                            con.Dezenas = new List <DezenaDuplaSena>();

                            while (dr.Read())
                            {
                                DezenaDuplaSena dezena = new DezenaDuplaSena()
                                {
                                    Sorteio = Convert.ToByte(dr["sorteio"]),
                                    Dezena  = Convert.ToByte(dr["dezena"]),
                                };

                                con.Dezenas.Add(dezena);
                            }
                        }

                        using (IDataReader dr = cn.ExecuteReader("sp_buscaPremiosDuplaSena", new { @IdConcurso = con.ID }, commandType: CommandType.StoredProcedure))
                        {
                            con.Premios = new List <PremioDuplaSena>();

                            while (dr.Read())
                            {
                                PremioDuplaSena premio = new PremioDuplaSena()
                                {
                                    Sorteio    = Convert.ToByte(dr["sorteio"]),
                                    Acertos    = Convert.ToByte(dr["acertos"]),
                                    Ganhadores = Convert.ToInt32(dr["ganhadores"]),
                                    ValorPago  = Convert.ToDecimal(dr["valorPago"])
                                };

                                con.Premios.Add(premio);
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return(con);
        }
        private Concurso deserializaConcurso(dynamic obj)
        {
            DuplaSena loteria = new DuplaSena()
            {
                ID               = obj.concurso.numero,
                Data             = DateTime.ParseExact(obj.concurso.data.ToString(), "dd/MM/yyyy", new CultureInfo("pt-BR")),
                Cidade           = obj.concurso.cidade,
                Local            = obj.concurso.local,
                ValorAcumulado   = Convert.ToDecimal(obj.concurso.valor_acumulado.ToString().Replace(".", "")),
                ArrecadacaoTotal = Convert.ToDecimal(obj.concurso.arrecadacao_total.ToString().Replace(".", ""))
            };

            loteria.Dezenas = new List <DezenaDuplaSena>();

            foreach (byte dezena in obj.concurso.numeros_sorteados_1)
            {
                DezenaDuplaSena d = new DezenaDuplaSena()
                {
                    Sorteio = 1,
                    Dezena  = dezena
                };

                loteria.Dezenas.Add(d);
            }

            foreach (byte dezena in obj.concurso.numeros_sorteados_2)
            {
                DezenaDuplaSena d = new DezenaDuplaSena()
                {
                    Sorteio = 2,
                    Dezena  = dezena
                };

                loteria.Dezenas.Add(d);
            }

            loteria.Premios = new List <PremioDuplaSena>()
            {
                new PremioDuplaSena()
                {
                    Acertos    = 6,
                    ValorPago  = Convert.ToDecimal(obj.concurso.premiacao_1.sena.valor_pago.ToString().Replace(".", "")),
                    Ganhadores = Convert.ToInt32(obj.concurso.premiacao_1.sena.ganhadores.ToString().Replace(".", "")),
                    Sorteio    = 1
                },
                new PremioDuplaSena()
                {
                    Acertos    = 5,
                    ValorPago  = Convert.ToDecimal(obj.concurso.premiacao_1.quina.valor_pago.ToString().Replace(".", "")),
                    Ganhadores = Convert.ToInt32(obj.concurso.premiacao_1.quina.ganhadores.ToString().Replace(".", "")),
                    Sorteio    = 1
                },
                new PremioDuplaSena()
                {
                    Acertos    = 4,
                    ValorPago  = Convert.ToDecimal(obj.concurso.premiacao_1.quadra.valor_pago.ToString().Replace(".", "")),
                    Ganhadores = Convert.ToInt32(obj.concurso.premiacao_1.quadra.ganhadores.ToString().Replace(".", "")),
                    Sorteio    = 1
                },
                new PremioDuplaSena()
                {
                    Acertos    = 6,
                    ValorPago  = Convert.ToDecimal(obj.concurso.premiacao_2.sena.valor_pago.ToString().Replace(".", "")),
                    Ganhadores = Convert.ToInt32(obj.concurso.premiacao_2.sena.ganhadores.ToString().Replace(".", "")),
                    Sorteio    = 2
                },
                new PremioDuplaSena()
                {
                    Acertos    = 5,
                    ValorPago  = Convert.ToDecimal(obj.concurso.premiacao_2.quina.valor_pago.ToString().Replace(".", "")),
                    Ganhadores = Convert.ToInt32(obj.concurso.premiacao_2.quina.ganhadores.ToString().Replace(".", "")),
                    Sorteio    = 2
                },
                new PremioDuplaSena()
                {
                    Acertos    = 4,
                    ValorPago  = Convert.ToDecimal(obj.concurso.premiacao_2.quadra.valor_pago.ToString().Replace(".", "")),
                    Ganhadores = Convert.ToInt32(obj.concurso.premiacao_2.quadra.ganhadores.ToString().Replace(".", "")),
                    Sorteio    = 2
                }
            };

            loteria.ProximoConcurso = new ProximoConcurso()
            {
                Data          = DateTime.ParseExact(obj.proximo_concurso.data.ToString(), "dd/MM/yyyy", new CultureInfo("pt-BR")),
                ValorEstimado = Convert.ToDecimal(obj.proximo_concurso.valor_estimado.ToString().Replace(".", ""))
            };

            return(loteria);
        }