public static Price GetPrice(bool summerTariff, string ticketType, string vehicleType) { if (ticketType == null || ticketType.Length == 0 || vehicleType == null || vehicleType.Length == 0) { return(null); } string sql = "select charge, summerTariff, ticketType, vehicleType from price where summerTariff=@summerTariff and ticketType=@ticketType and vehicleType=@vehicleType"; Price price = null; SqlCeCommand cmd = new SqlCeCommand(sql, DatabaseConnector.DatabaseConnection); cmd.Parameters.AddWithValue("@summerTariff", summerTariff); cmd.Parameters.AddWithValue("@ticketType", ticketType); cmd.Parameters.AddWithValue("@vehicleType", vehicleType); cmd.CommandType = CommandType.Text; SqlCeResultSet rs = cmd.ExecuteResultSet( ResultSetOptions.Scrollable); if (rs.HasRows) { int ordCharge = rs.GetOrdinal("charge"); int ordSummerTariff = rs.GetOrdinal("summerTariff"); int ordTicketType = rs.GetOrdinal("ticketType"); int ordVehicleType = rs.GetOrdinal("vehicleType"); rs.ReadFirst(); price = new Price(); price.Charge = rs.GetDecimal(ordCharge); price.SummerTariff = rs.GetBoolean(ordSummerTariff); price.TicketType = rs.GetString(ordTicketType); price.VehicleType = rs.GetString(ordVehicleType); } return(price); }
public ListaPub CarregarListaPublicacao(int idLista) { ListaPub lista; using (SqlCeCommand command = CreateCommand("SELECT * FROM LISTA WHERE ID_LISTA = @ID_LISTA")) { command.Parameters.AddWithValue("ID_LISTA", idLista); using (SqlCeResultSet resultSet = command.ExecuteResultSet(ResultSetOptions.None)) { resultSet.Read(); lista = new ListaPub() { IdLista = resultSet.GetInt32(resultSet.GetOrdinal("ORDEM_SORTEIO")), Nome = resultSet.GetString(resultSet.GetOrdinal("NOME")), FonteSementeSorteio = resultSet.GetString(resultSet.GetOrdinal("FONTE_SEMENTE")), SementeSorteio = resultSet.GetInt32(resultSet.GetOrdinal("SEMENTE_SORTEIO")), Candidatos = new List <CandidatoPub>() }; } } string queryCandidatos = @" SELECT CANDIDATO_LISTA.SEQUENCIA_CONTEMPLACAO, CANDIDATO.CPF, CANDIDATO.NOME, QUANTIDADE_CRITERIOS FROM CANDIDATO_LISTA INNER JOIN LISTA ON CANDIDATO_LISTA.ID_LISTA = LISTA.ID_LISTA INNER JOIN CANDIDATO ON CANDIDATO_LISTA.ID_CANDIDATO = CANDIDATO.ID_CANDIDATO WHERE LISTA.ID_LISTA = @ID_LISTA AND CANDIDATO_LISTA.SEQUENCIA_CONTEMPLACAO IS NOT NULL ORDER BY CANDIDATO_LISTA.SEQUENCIA_CONTEMPLACAO "; using (SqlCeCommand command = CreateCommand(queryCandidatos)) { command.Parameters.AddWithValue("ID_LISTA", idLista); using (SqlCeResultSet resultSet = command.ExecuteResultSet(ResultSetOptions.None)) { while (resultSet.Read()) { lista.Candidatos.Add(new CandidatoPub { IdCandidato = resultSet.GetInt32(resultSet.GetOrdinal("SEQUENCIA_CONTEMPLACAO")), Cpf = resultSet.GetDecimal(resultSet.GetOrdinal("CPF")), Nome = resultSet.GetString(resultSet.GetOrdinal("NOME")), QuantidadeCriterios = resultSet.GetInt32(resultSet.GetOrdinal("QUANTIDADE_CRITERIOS")) }); } } } return(lista); }
public void SortearProximaLista(Action <string> updateStatus, Action <int> updateProgress, Action <string> logText, int?sementePersonalizada = null) { updateStatus("Iniciando sorteio..."); Lista proximaLista = CarregarProximaLista(); if (proximaLista == null) { throw new Exception("Não existem listas disponíveis para sorteio."); } double quantidadeAtual = 0; double quantidadeTotal = Math.Min(proximaLista.Quantidade, (int)proximaLista.CandidatosDisponiveis); string fonteSemente = "PERSONALIZADA"; int semente = (sementePersonalizada == null) ? ObterSemente(ref fonteSemente) : (int)sementePersonalizada; ExecuteNonQuery( "UPDATE LISTA SET SORTEADA = 1, SEMENTE_SORTEIO = @SEMENTE_SORTEIO, FONTE_SEMENTE = @FONTE_SEMENTE WHERE ID_LISTA = @ID_LISTA", new SqlCeParameter("SEMENTE_SORTEIO", semente), new SqlCeParameter("FONTE_SEMENTE", fonteSemente), new SqlCeParameter("ID_LISTA", proximaLista.IdLista) ); Random random = new Random(semente); string queryGrupoSorteio = @" SELECT TOP(1) CANDIDATO_LISTA.CLASSIFICACAO AS CLASSIFICACAO, COUNT(*) AS QUANTIDADE FROM CANDIDATO_LISTA INNER JOIN CANDIDATO ON CANDIDATO_LISTA.ID_CANDIDATO = CANDIDATO.ID_CANDIDATO WHERE CANDIDATO_LISTA.ID_LISTA = @ID_LISTA AND CANDIDATO_LISTA.DATA_CONTEMPLACAO IS NULL AND CANDIDATO.CONTEMPLADO = 0 GROUP BY CANDIDATO_LISTA.CLASSIFICACAO ORDER BY CANDIDATO_LISTA.CLASSIFICACAO "; SqlCeCommand commandGrupoSorteio = CreateCommand(queryGrupoSorteio); commandGrupoSorteio.Parameters.AddWithValue("ID_LISTA", proximaLista.IdLista); commandGrupoSorteio.Prepare(); string queryCandidatosGrupo = @" SELECT CANDIDATO_LISTA.SEQUENCIA, CANDIDATO.ID_CANDIDATO, CANDIDATO.CPF, CANDIDATO.NOME FROM CANDIDATO_LISTA INNER JOIN CANDIDATO ON CANDIDATO_LISTA.ID_CANDIDATO = CANDIDATO.ID_CANDIDATO WHERE CANDIDATO_LISTA.ID_LISTA = @ID_LISTA AND CANDIDATO_LISTA.DATA_CONTEMPLACAO IS NULL AND CANDIDATO.CONTEMPLADO = 0 AND CANDIDATO_LISTA.CLASSIFICACAO = @CLASSIFICACAO ORDER BY CANDIDATO_LISTA.SEQUENCIA "; SqlCeCommand commandCandidatosGrupo = CreateCommand(queryCandidatosGrupo); commandCandidatosGrupo.Parameters.AddWithValue("ID_LISTA", proximaLista.IdLista); commandCandidatosGrupo.Parameters.AddWithValue("CLASSIFICACAO", -1); commandCandidatosGrupo.Prepare(); GrupoSorteio grupoSorteio = null; for (int i = 1; i <= proximaLista.Quantidade; i++) { if (grupoSorteio == null || grupoSorteio.Quantidade < 1) { updateStatus("Carregando próximo grupo de sorteio."); using (SqlCeResultSet resultSet = commandGrupoSorteio.ExecuteResultSet(ResultSetOptions.None)) { if (resultSet.Read()) { grupoSorteio = new GrupoSorteio { Classificacao = resultSet.GetInt32(resultSet.GetOrdinal("CLASSIFICACAO")), Quantidade = resultSet.GetInt32(resultSet.GetOrdinal("QUANTIDADE")) }; } else { grupoSorteio = null; } } if (grupoSorteio != null) { commandCandidatosGrupo.Parameters["CLASSIFICACAO"].Value = grupoSorteio.Classificacao; using (SqlCeResultSet resultSet = commandCandidatosGrupo.ExecuteResultSet(ResultSetOptions.None)) { while (resultSet.Read()) { CandidatoGrupo candidato = new CandidatoGrupo { Sequencia = resultSet.GetInt32(resultSet.GetOrdinal("SEQUENCIA")), IdCandidato = resultSet.GetInt32(resultSet.GetOrdinal("ID_CANDIDATO")), Cpf = resultSet.GetDecimal(resultSet.GetOrdinal("CPF")), Nome = resultSet.GetString(resultSet.GetOrdinal("NOME")) }; grupoSorteio.Candidatos.Add(candidato.Sequencia, candidato); } } } } if (grupoSorteio == null) { break; } else { updateStatus($"Sorteando entre o grupo de classificação \"{grupoSorteio.Classificacao}\": {quantidadeTotal - quantidadeAtual} vagas restantes."); } int indiceSorteado = (grupoSorteio.Quantidade == 1) ? 0 : random.Next(0, grupoSorteio.Quantidade); CandidatoGrupo candidatoSorteado = grupoSorteio.Candidatos.Skip(indiceSorteado).Take(1).First().Value; grupoSorteio.Candidatos.Remove(candidatoSorteado.Sequencia); ExecuteNonQuery( "UPDATE CANDIDATO SET CONTEMPLADO = 1 WHERE ID_CANDIDATO = @ID_CANDIDATO", new SqlCeParameter("ID_CANDIDATO", candidatoSorteado.IdCandidato) ); ExecuteNonQuery( @" UPDATE CANDIDATO_LISTA SET SEQUENCIA_CONTEMPLACAO = @SEQUENCIA_CONTEMPLACAO, DATA_CONTEMPLACAO = @DATA_CONTEMPLACAO WHERE ID_CANDIDATO = @ID_CANDIDATO AND ID_LISTA = @ID_LISTA ", new SqlCeParameter("SEQUENCIA_CONTEMPLACAO", i), new SqlCeParameter("DATA_CONTEMPLACAO", DateTime.Now), new SqlCeParameter("ID_CANDIDATO", candidatoSorteado.IdCandidato), new SqlCeParameter("ID_LISTA", proximaLista.IdLista) ); grupoSorteio.Quantidade--; quantidadeAtual++; updateProgress((int)((quantidadeAtual / quantidadeTotal) * 100)); logText(string.Format("{0:0000} - {1:000'.'000'.'000-00} - {2}", i, candidatoSorteado.Cpf, candidatoSorteado.Nome.ToUpper())); } updateStatus("Sorteio da lista finalizado!"); }
private void ClassificarListaSorteio(int idUltimaLista, string tipoOrdenacao) { List <CandidatoGrupo> candidatosLista = new List <CandidatoGrupo>(); using (SqlCeCommand command = CreateCommand("SELECT * FROM CANDIDATO_LISTA INNER JOIN CANDIDATO ON CANDIDATO_LISTA.ID_CANDIDATO = CANDIDATO.ID_CANDIDATO WHERE CANDIDATO_LISTA.ID_LISTA = @ID_LISTA")) { command.Parameters.AddWithValue("ID_LISTA", idUltimaLista); using (SqlCeResultSet resultSet = command.ExecuteResultSet(ResultSetOptions.None)) { while (resultSet.Read()) { candidatosLista.Add(new CandidatoGrupo { IdCandidato = resultSet.GetInt32(resultSet.GetOrdinal("ID_CANDIDATO")), Cpf = resultSet.GetDecimal(resultSet.GetOrdinal("CPF")), Nome = resultSet.GetString(resultSet.GetOrdinal("NOME")).ToUpper().TrimEnd(), QuantidadeCriterios = resultSet.GetInt32(resultSet.GetOrdinal("QUANTIDADE_CRITERIOS")) }); } } } CandidatoGrupo[] candidatosOrdenados; if (tipoOrdenacao == "SIMPLES") { candidatosOrdenados = candidatosLista .OrderByDescending(c => c.QuantidadeCriterios) .ThenBy(c => c.Nome) .ThenByDescending(c => c.Cpf) .ToArray(); } else if (tipoOrdenacao == "COMPOSTO") { candidatosOrdenados = candidatosLista .OrderByDescending(c => c.QuantidadeCriteriosComposta) .ThenBy(c => c.Nome) .ThenByDescending(c => c.Cpf) .ToArray(); } else { candidatosOrdenados = candidatosLista .OrderBy(c => c.Nome) .ThenByDescending(c => c.Cpf) .ToArray(); } CandidatoGrupo candidatoAnterior = null; int sequencia = 1; int classificacao = 1; SqlCeCommand updateCommand = CreateCommand( "UPDATE CANDIDATO_LISTA SET SEQUENCIA = @SEQUENCIA, CLASSIFICACAO = @CLASSIFICACAO WHERE ID_LISTA = @ID_LISTA AND ID_CANDIDATO = @ID_CANDIDATO", new SqlCeParameter("SEQUENCIA", -1), new SqlCeParameter("CLASSIFICACAO", -1), new SqlCeParameter("ID_LISTA", idUltimaLista), new SqlCeParameter("ID_CANDIDATO", -1) ); updateCommand.Prepare(); foreach (CandidatoGrupo candidato in candidatosOrdenados) { if (candidatoAnterior != null) { if (tipoOrdenacao == "SIMPLES" && candidato.QuantidadeCriterios != candidatoAnterior.QuantidadeCriterios) { classificacao++; } else if (tipoOrdenacao == "COMPOSTO" && candidato.QuantidadeCriteriosComposta != candidatoAnterior.QuantidadeCriteriosComposta) { classificacao++; } } updateCommand.Parameters["SEQUENCIA"].Value = sequencia; updateCommand.Parameters["CLASSIFICACAO"].Value = classificacao; updateCommand.Parameters["ID_CANDIDATO"].Value = candidato.IdCandidato; updateCommand.ExecuteNonQuery(); sequencia++; candidatoAnterior = candidato; } }