Beispiel #1
0
        public IActionResult Create([FromBody] Taxista item)
        {
            _context.Taxistas.Add(item);
            _context.SaveChanges();

            return(CreatedAtRoute("GetTaxistaById", new { id = item.Id }, item));
        }
Beispiel #2
0
        public void MovimentarTaxistasAleatorio()
        {
            const double CONSTANTE_DESLOCAMENTO_TAXISTA = 0.0001;
            const double PROBABILIDADE_MOVIMENTACAO_DIRECAO_NORTE_LATITUDE  = 0.5;
            const double PROBABILIDADE_MOVIMENTACAO_DIRECAO_LESTE_LONGITUDE = 0.5;
            const double PROBAILIDADE_TAXISTA_MOVIMENTAR = 0.9;

            Random rand_pos = new Random();

            lock (_taxistas)
            {
                for (int i = 0; i < _taxistas.Count; i++)
                {
                    Taxista taxi = _taxistas.ElementAt(i);

                    ////reposiciona o taxista pela cidade
                    //int direcao_latitude = (rand.NextDouble() > PROBABILIDADE_MOVIMENTACAO_DIRECAO_NORTE_LATITUDE) ? 1 : -1;
                    //int direcao_longitude = (rand.NextDouble() > PROBABILIDADE_MOVIMENTACAO_DIRECAO_LESTE_LONGITUDE) ? 1 : -1;

                    //taxi.PosicaoAtual.Latitude += (rand.NextDouble() * CONSTANTE_DESLOCAMENTO_TAXISTA) * direcao_latitude;
                    //taxi.PosicaoAtual.Longitude += (rand.NextDouble() * CONSTANTE_DESLOCAMENTO_TAXISTA) * direcao_longitude;

                    if (rand_pos.NextDouble() < PROBAILIDADE_TAXISTA_MOVIMENTAR)
                    {
                        double direcao_latitude  = (rand_pos.NextDouble() > PROBABILIDADE_MOVIMENTACAO_DIRECAO_NORTE_LATITUDE) ? rand_pos.NextDouble() : -rand_pos.NextDouble();
                        double direcao_longitude = (rand_pos.NextDouble() > PROBABILIDADE_MOVIMENTACAO_DIRECAO_LESTE_LONGITUDE) ? rand_pos.NextDouble() : -rand_pos.NextDouble();

                        taxi.PosicaoAtual.Latitude  += rand_pos.NextDouble() * direcao_latitude * CONSTANTE_DESLOCAMENTO_TAXISTA;
                        taxi.PosicaoAtual.Longitude += rand_pos.NextDouble() * direcao_longitude * CONSTANTE_DESLOCAMENTO_TAXISTA;
                    }
                }
            }
        }
Beispiel #3
0
        private void CarregarInformacoesUsuario()
        {
            Taxista taxista = (Taxista)Base.SessaoUsuario;

            if (taxista.Status != StatusTaxista.Pendente)
            {
                if (taxista.Veiculo != null)
                {
                    int montadora = taxista.Veiculo.Modelo.Montadora.ID;
                    int modelo    = taxista.Veiculo.Modelo.ID;

                    this.CarregarCaixaModelo(montadora);
                    ddlMarca.SelectedValue  = montadora.ToString();
                    ddlModelo.SelectedValue = modelo.ToString();

                    txtAnoFabMod.Text          = string.Format("{0}/{1}", taxista.Veiculo.AnoFabricacao, taxista.Veiculo.AnoModelo);
                    txtCor.Text                = taxista.Veiculo.CorPredominante;
                    txtPlaca.Text              = taxista.Veiculo.Placa.ToUpper();
                    txtRenavam.Text            = taxista.Veiculo.Renavam;
                    txtAutorizacaoTrafego.Text = taxista.Veiculo.AutorizacaoTrafego;

                    if (taxista.Veiculo.Rastreador != null)
                    {
                        txtNumeroSerie.Text     = taxista.Veiculo.Rastreador.ID.ToString().ToUpper();
                        txtCodigoSeguranca.Text = taxista.Veiculo.Rastreador.CodigoSeguranca.ToString().ToUpper();
                    }
                }

                txtCNH.Text           = taxista.CNH;
                txtNumeroLicenca.Text = taxista.NumeroLicenca;

                tableContrato.Visible = false;
            }
        }
Beispiel #4
0
        public Taxista ObterTaxiLivreMaisProximo(Localizacao localCliente)
        {
            IList <Taxista> taxis = this.FiltrarTaxistasLivresPorCirculos(localCliente);

            if (taxis != null && taxis.Count > 0)
            {
                //limita o número de entradas a serem processadas
                if (taxis.Count() > TOP_ROWS)
                {
                    taxis = taxis.OrderBy(tx => this.ObterDistanciaEuclidiana(tx.PosicaoAtual.Latitude, tx.PosicaoAtual.Longitude, localCliente.Latitude, localCliente.Longitude)).Take(TOP_ROWS).ToList();
                }

                TimeSpan minDuration        = TimeSpan.MaxValue;
                Taxista  taxistaMaisProximo = null;

                //busca o taxista mais próximo de acordo com as estimativas do Google API
                foreach (Taxista taxi in taxis)
                {
                    Leg response = Geolocation.ObterDirecao(taxi.PosicaoAtual.Endereco, localCliente.Endereco);
                    if (response != null)
                    {
                        if (response.Duration.Value < minDuration)
                        {
                            taxistaMaisProximo = taxi;
                            minDuration        = response.Duration.Value;
                        }
                    }
                }

                return(taxistaMaisProximo);
            }
            return(null);
        }
Beispiel #5
0
        public static XmlDocument TransformTaxistaIntoXML(XmlDocument xmldoc, Taxista taxista, int index)
        {
            //let's add another element (child of the root)
            XmlElement xml_taxista = xmldoc.CreateElement("taxista");

            xmldoc.ChildNodes.Item(1).AppendChild(xml_taxista);

            XmlElement xml_id = xmldoc.CreateElement("id");

            xml_id.AppendChild(xmldoc.CreateTextNode(taxista.ID.ToString()));
            xmldoc.ChildNodes.Item(1).ChildNodes.Item(index).AppendChild(xml_id);

            XmlElement xml_latitude = xmldoc.CreateElement("latitude");

            xml_latitude.AppendChild(xmldoc.CreateTextNode(taxista.PosicaoAtual.Latitude.ToString()));
            xmldoc.ChildNodes.Item(1).ChildNodes.Item(index).AppendChild(xml_latitude);

            XmlElement xml_longitude = xmldoc.CreateElement("longitude");

            xml_longitude.AppendChild(xmldoc.CreateTextNode(taxista.PosicaoAtual.Longitude.ToString()));
            xmldoc.ChildNodes.Item(1).ChildNodes.Item(index).AppendChild(xml_longitude);

            XmlElement xml_endereco = xmldoc.CreateElement("endereco");

            xml_endereco.AppendChild(xmldoc.CreateTextNode(taxista.PosicaoAtual.Endereco.ToString()));
            xmldoc.ChildNodes.Item(1).ChildNodes.Item(index).AppendChild(xml_endereco);

            XmlElement xml_status = xmldoc.CreateElement("status");

            xml_status.AppendChild(xmldoc.CreateTextNode(taxista.Status.ToString()));
            xmldoc.ChildNodes.Item(1).ChildNodes.Item(index).AppendChild(xml_status);

            return(xmldoc);
        }
Beispiel #6
0
        public async Task <Taxista> GetTaxistaByEmailAsync(string email)
        {
            var response = await client.GetAsync($"/api/taxistas/email/{email}");

            Taxista taxista = await response.Content.ReadAsAsync <Taxista>();

            return(taxista);
        }
Beispiel #7
0
        public async Task <Taxista> GetTaxistaByIdAsync(Guid id)
        {
            var response = await client.GetAsync($"/api/taxistas/{id}");

            Taxista taxista = await response.Content.ReadAsAsync <Taxista>();

            return(taxista);
        }
Beispiel #8
0
        private Taxista ObterDadosFormularioTaxista()
        {
            Taxista taxista = (Taxista)Base.SessaoUsuario;

            taxista.CNH           = txtCNH.Text;
            taxista.NumeroLicenca = txtNumeroLicenca.Text;
            taxista.Status        = StatusTaxista.SemStatus;
            return(taxista);
        }
Beispiel #9
0
        private Taxista ObterDadosFormularioTaxista()
        {
            Taxista taxista = new Taxista();

            taxista.Email = txtEmail.Text;
            taxista.Senha = txtSenha.Text;
            taxista.PermitirNotificacaoEmail = chkEnvioEmail.Checked;
            return(taxista);
        }
Beispiel #10
0
        private void CarregarInformacoesDispositivos()
        {
            Taxista taxista = (Taxista)Base.SessaoUsuario;

            if (taxista != null && taxista.Veiculo != null && taxista.Veiculo.Rastreador != null)
            {
                lblNumeroSerie.Text     = taxista.Veiculo.Rastreador.ID.ToString().ToUpper();
                lblCodigoSeguranca.Text = taxista.Veiculo.Rastreador.CodigoSeguranca.ToString().ToUpper();
            }
        }
        public async Task <IActionResult> CreateTaxistaAsync(Taxista taxista)
        {
            taxista.Id              = Guid.NewGuid();
            taxista.Estatus         = "Activo";
            taxista.Puntuacion      = 5.0M;
            taxista.AdministradorId = new Guid(HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier)?.Value);
            var createdAt = await service.CreateTaxistaAsync(taxista);

            return(RedirectToAction("GetById", new { id = taxista.Id }));
        }
Beispiel #12
0
        public async Task <Uri> CreateTaxistaAsync(Taxista taxista)
        {
            var response = await client.PostAsJsonAsync("api/taxistas", taxista);

            response.EnsureSuccessStatusCode();
            // URI of the created resource.
            var createdAt = response.Headers.Location;

            return(createdAt);
        }
Beispiel #13
0
        public async Task <Taxista> UpdateTaxistaAsync(Taxista taxista)
        {
            HttpResponseMessage response = await client.PutAsJsonAsync($"api/taxistas/{taxista.Id}", taxista);

            response.EnsureSuccessStatusCode();

            // Deserialize the updated product from the response body.
            taxista = await response.Content.ReadAsAsync <Taxista>();

            return(taxista);
        }
Beispiel #14
0
        private static void CarregarTaxistas()
        {
            taxistas = Taxista.ListarTodos().OrderBy(tx => tx.Pessoa.NomeOuRazaoSocial).Take(NUMERO_TAXISTAS).ToList();

            for (int i = 0; i < taxistas.Count; i++)
            {
                taxistas[i].PosicaoAtual = DefinirPosicao();

                TaxistaLocationClient taxista_location = new TaxistaLocationClient();
                taxista_location.IniciarPosicaoComStatusAleatorio(taxistas[i].ID, taxistas[i].PosicaoAtual.Latitude, taxistas[i].PosicaoAtual.Longitude);
            }
        }
Beispiel #15
0
        public static string GetLocation(Guid taxistaID)
        {
            OFMS    ofms    = OFMS.GetInstance();
            Taxista taxista = ofms.Taxistas.FirstOrDefault(taxi => taxi.ID == taxistaID);

            if (taxista != null && taxista.PosicaoAtual != null)
            {
                return(string.Format("{0}|{1}", taxista.PosicaoAtual.Latitude.ToString().Replace(",", "."), taxista.PosicaoAtual.Longitude.ToString().Replace(",", ".")));
            }

            return(String.Empty);
        }
Beispiel #16
0
        public static void AtualizaPosicaoTaxista(Guid ID, double latitude, double longitude)
        {
            Taxista taxista = _taxistas.FirstOrDefault(taxi => taxi.ID == ID);

            if (taxista != null)
            {
                AtualizaPosicaoTaxista(ID, latitude, longitude, taxista.Status);
            }
            else
            {
                AtualizaPosicaoTaxista(ID, latitude, longitude, StatusTaxista.TaxiLivre);
            }
        }
Beispiel #17
0
        protected void btnConfirmar_Click(Object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                Veiculo veiculo = this.ObterDadosFormularioVeiculo();
                veiculo.Rastreador   = this.ObterDadosFormularioRastreador();
                veiculo.Proprietario = Base.SessaoUsuario.Pessoa;

                Taxista taxista = this.ObterDadosFormularioTaxista();
                taxista.Veiculo = veiculo;
                veiculo.Taxistas.Add(taxista);
                veiculo.Salvar();

                PageBase.CaixaMensagens.Exibir(App_LocalResources.LabelsResource.VEICULO, App_LocalResources.MensagensResource.VEICULO_SUCESSO);
            }
        }
Beispiel #18
0
        protected void gvTaxistas_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                Taxista taxista      = (Taxista)e.Row.DataItem;
                Label   lblLatitude  = (Label)e.Row.FindControl("lblLatitude");
                Label   lblLongitude = (Label)e.Row.FindControl("lblLongitude");
                Label   lblNome      = (Label)e.Row.FindControl("lblNome");
                Label   lblDataHora  = (Label)e.Row.FindControl("lblDataHora");

                lblLatitude.Text  = taxista.PosicaoAtual.Latitude.ToString();
                lblLongitude.Text = taxista.PosicaoAtual.Longitude.ToString();
                lblNome.Text      = (taxista.Pessoa.TipoPessoa == TipoPessoa.PessoaFisica) ? ((PessoaFisica)taxista.Pessoa).Nome : ((PessoaJuridica)taxista.Pessoa).RazaoSocial;
                lblDataHora.Text  = taxista.PosicaoAtual.Data.ToString("G");
            }
        }
Beispiel #19
0
        public void AlterarStatusTaxistaAleatorio()
        {
            const double PROBABILIDADE_MODIFICACAO_STATUS_TAXISTAS = 0.1; //número máximo de modificações = 10%

            lock (_taxistas)
            {
                Random rand           = new Random();
                int    number_changes = rand.Next((int)(_taxistas.Count * PROBABILIDADE_MODIFICACAO_STATUS_TAXISTAS));

                for (int i = 0; i < number_changes; i++)
                {
                    Taxista taxi = _taxistas.ElementAt(rand.Next(_taxistas.Count()));
                    taxi.Status = (taxi.Status == StatusTaxista.TaxiLivre) ? StatusTaxista.EmAtendimento : StatusTaxista.TaxiLivre;
                }
            }
        }
Beispiel #20
0
        public static void Main(string[] args)
        {
            random   = new Random(DateTime.Now.Millisecond);
            rand_pos = new Random(DateTime.Now.Millisecond + DateTime.Now.Minute);

            //Obtem a lista de todos os taxistas
            taxistas = Taxista.ListarTodos();
            //taxistas = new List<Taxista>();
            //taxistas.Add(Taxista.Obter(Guid.Parse("9eb7a533-6c2c-43a4-b6b1-e9e085b0c3e0")));
            Console.WriteLine("\n\n\n\n\n\n\n");

            //Realiza a inserção de informações no mapa a cada 10 segundos
            Timer t = new Timer(TimerCallback, null, 0, 100);

            //aguarda uma tecla para finalizar
            Console.ReadLine();
        }
Beispiel #21
0
        public IActionResult Update(Guid id, Taxista item)
        {
            var taxista = _context.Taxistas.Find(id);

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

            taxista.Correo          = item.Correo;
            taxista.Contraseña      = item.Contraseña;
            taxista.PrimerNombre    = item.PrimerNombre;
            taxista.Apellidos       = item.Apellidos;
            taxista.Telefono        = item.Telefono;
            taxista.Direccion       = item.Direccion;
            taxista.FechaModificado = DateTime.Now;
            taxista.Estatus         = item.Estatus;

            _context.Taxistas.Update(taxista);
            _context.SaveChanges();
            return(NoContent());
        }
Beispiel #22
0
        protected void btnEntrar_Click(object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                Usuario usuario = null;
                if (this.TipoUsuarioLogin.HasValue)
                {
                    string pagina_home = "~/";

                    if (this.TipoUsuarioLogin.Value == TipoUsuario.Taxista)
                    {
                        usuario     = Taxista.LogarTaxista(txtEmail.Text, txtSenha.Text);
                        pagina_home = Constantes.CONSTANTE_PAGINA_HOME_TAXISTA;
                    }
                    else if (this.TipoUsuarioLogin.Value == TipoUsuario.Cliente)
                    {
                        usuario     = Cliente.LogarCliente(txtEmail.Text, txtSenha.Text);
                        pagina_home = Constantes.CONSTANTE_PAGINA_HOME_CLIENTE;
                    }

                    //loga usuário de acordo com o perfil e redireciona para a página inicial
                    if (usuario != null)
                    {
                        Session.Clear();
                        Session.Add(Constantes.CONSTANTE_SESSAO_USUARIO, usuario);
                        Response.Redirect(pagina_home);
                    }
                    else
                    {
                        PageBase.CaixaMensagens.Exibir(App_LocalResources.LabelsResource.AUTENTICACAO, App_LocalResources.MensagensResource.LOGIN_NAO_REALIZADO);
                    }
                }
                else
                {
                    Response.Redirect("~/");
                }
            }
        }
Beispiel #23
0
        public static void AtualizaPosicaoTaxista(Guid ID, double latitude, double longitude, StatusTaxista status)
        {
            if (_taxistas == null)
            {
                OFMS.GetInstance();
            }

            lock (_taxistas)
            {
                Taxista taxista = _taxistas.FirstOrDefault(taxi => taxi.ID == ID);
                if (taxista == null)
                {
                    taxista        = Taxista.Obter(ID);
                    taxista.Status = status;

                    if (taxista != null)
                    {
                        taxista.PosicaoAtual = new Localizacao();
                    }
                    else
                    {
                        throw new TaxistaNaoEncontradoException();
                    }

                    taxista.PosicaoAtual.Latitude  = latitude;
                    taxista.PosicaoAtual.Longitude = longitude;
                    taxista.PosicaoAtual.Data      = DateTime.Now;
                    _taxistas.Add(taxista);
                }
                else
                {
                    taxista.PosicaoAtual.Latitude  = latitude;
                    taxista.PosicaoAtual.Longitude = longitude;
                    taxista.PosicaoAtual.Data      = DateTime.Now;
                }
            }
        }
Beispiel #24
0
        private Guid DefinirAtendimento(Requisicao atendimento, MetodoBuscaTaxi metodo, out TimeSpan processTime)
        {
            processTime = new TimeSpan();
            DateTime beginTime;

            Taxista taxista = null;

            switch (metodo)
            {
            case MetodoBuscaTaxi.GPS:
                beginTime   = DateTime.Now;
                taxista     = this.ObterTaxiLivreMaisProximo(atendimento.Cliente.PosicaoAtual);
                processTime = DateTime.Now.Subtract(beginTime);
                break;

            case MetodoBuscaTaxi.BROADCASTING:
                beginTime   = DateTime.Now;
                taxista     = this.ObterTaxiLivrePeloMetodoBroadcasting(atendimento.Cliente.PosicaoAtual);
                processTime = DateTime.Now.Subtract(beginTime);
                break;

            case MetodoBuscaTaxi.DISTANCIA_EUCLIDIANA:
                beginTime   = DateTime.Now;
                taxista     = this.ObterTaxiLivrePorDistanciaEuclidiana(atendimento.Cliente.PosicaoAtual);
                processTime = DateTime.Now.Subtract(beginTime);
                break;

            case MetodoBuscaTaxi.OTIMIZACAO:
                break;

            default:
                taxista = this.ObterTaxiLivreMaisProximo(atendimento.Cliente.PosicaoAtual);
                break;
            }

            if (taxista != null && _filaEspera.Count <= 0)
            {
                taxista.Status     = StatusTaxista.EmAtendimento;
                atendimento.Status = StatusRequisicao.RequisicaoRealizada;

                //libera o taxista anterior (caso onde o taxista escolhido anteriormente recusou)
                if (atendimento.Taxista != null)
                {
                    atendimento.Taxista.Status = StatusTaxista.TaxiLivre;
                }

                atendimento.Taxista = taxista;

                //adiciona a lista de atendimentos
                _requisicoes.Add(atendimento);
            }
            else
            {
                //se não houver taxistas, a requisição aguarda na fila
                atendimento.Status = StatusRequisicao.EmProcessamento;

                //libera o taxista anterior e define remove taxista da responsabilidade
                if (atendimento.Taxista != null)
                {
                    atendimento.Taxista.Status = StatusTaxista.TaxiLivre;
                    atendimento.Taxista        = null;
                }

                _filaEspera.Add(atendimento);       //adiciona a fila de espera

                throw new NenhumTaxiParaAtenderRequisicaoException();
            }
            return(atendimento.ID);
        }
        public IActionResult Index()
        {
            Taxista taxista = new Taxista();

            return(View(taxista));
        }
Beispiel #26
0
        protected void btnConfirmar_Click(Object sender, EventArgs e)
        {
            if (Page.IsValid)
            {
                if (this.TipoUsuarioLogin.HasValue)
                {
                    if (this.TipoUsuarioLogin.Value == TipoUsuario.Taxista)
                    {
                        Taxista taxista = ObterDadosFormularioTaxista();
                        Pessoa  pessoa  = null;

                        if (Convert.ToInt32(rbtTipoPessoa.SelectedValue) == (int)TipoPessoa.PessoaFisica)
                        {
                            pessoa = ObterDadosFormularioPessoaFisica();
                        }
                        else
                        {
                            pessoa = ObterDadosFormularioPessoaJuridica();
                        }

                        taxista.Pessoa = pessoa;
                        taxista.Salvar();

                        //realiza login do usuario
                        Session.Add(Constantes.CONSTANTE_SESSAO_USUARIO, taxista);

                        //exibe mensagem de confirmação do cadastro
                        PageBase.CaixaMensagens.ExibirRedirecionar(App_LocalResources.LabelsResource.CADASTRO, App_LocalResources.MensagensResource.CADASTRO_SUCESSO, Constantes.CONSTANTE_PAGINA_HOME_TAXISTA);
                    }
                    else if (this.TipoUsuarioLogin.Value == TipoUsuario.Cliente)
                    {
                        Cliente cliente = ObterDadosFormularioCliente();
                        Pessoa  pessoa  = null;

                        if (Convert.ToInt32(rbtTipoPessoa.SelectedValue) == (int)TipoPessoa.PessoaFisica)
                        {
                            pessoa = ObterDadosFormularioPessoaFisica();
                        }
                        else
                        {
                            pessoa = ObterDadosFormularioPessoaJuridica();
                        }

                        cliente.Pessoa = pessoa;
                        cliente.Salvar();

                        //realiza login do usuário
                        Session.Add(Constantes.CONSTANTE_SESSAO_USUARIO, cliente);

                        //exibe mensagem de confirmação do cadastro
                        PageBase.CaixaMensagens.ExibirRedirecionar(App_LocalResources.LabelsResource.CADASTRO, App_LocalResources.MensagensResource.CADASTRO_SUCESSO, Constantes.CONSTANTE_PAGINA_HOME_CLIENTE);
                    }
                    else
                    {
                        PageBase.CaixaMensagens.ExibirRedirecionar(App_LocalResources.LabelsResource.CADASTRO, App_LocalResources.MensagensResource.TIPO_USUARIO_NAO_DEFINIDO, Constantes.CONSTANTE_PAGINA_LOGIN);
                    }
                }
                else
                {
                    PageBase.CaixaMensagens.ExibirRedirecionar(App_LocalResources.LabelsResource.CADASTRO, App_LocalResources.MensagensResource.TIPO_USUARIO_NAO_DEFINIDO, Constantes.CONSTANTE_PAGINA_LOGIN);
                }

                updMultiview.Update();
            }
        }
        public async Task <IActionResult> GetTaxistaByIdAsync(Taxista taxista)
        {
            var updated = await service.UpdateTaxistaAsync(taxista);

            return(View(updated));
        }