Ejemplo n.º 1
0
        private RespostaHttp LogicaPost(List <string> Tags, double latitude, double longitude, Rota rota)
        {
            var resp = new RespostaHttp();

            if (rota.DataFim.CompareTo(rota.DataInicio) > 0)
            {
                resp.Ok       = false;
                resp.Mensagem = "Essa rota já foi finalizada e não aceita novas amostras.";
                return(resp);
            }
            else
            {
                try
                {
                    var leituraPacotes = new List <Pacote>();

                    foreach (var s in Tags)
                    {
                        Pacote p = _pacoteService.ObterPorTag(s);

                        if (p != null)
                        {
                            leituraPacotes.Add(p);
                        }
                    }

                    if (rota.AmostrasLocalizacao.Count == 0)
                    {
                        rota.Pacotes = leituraPacotes;
                        _rotaService.SalvarRota(rota);
                    }

                    else
                    {
                        foreach (var item in rota.Pacotes)
                        {
                            if (!leituraPacotes.Exists(x => x.PacoteId == item.PacoteId))
                            {
                                Ocorrencia o = new Ocorrencia
                                {
                                    Data           = DateTime.UtcNow,
                                    Descricao      = "Pacote não encontrado no veículo",
                                    Pacote         = item.PacoteId,
                                    TipoOCorrencia = TipoOCorrencia.NaoEncontrado,
                                    Finalizado     = false,
                                    Resolvido      = false
                                };

                                _ocorrenciaService.SalvarOcorrencia(o);
                            }
                        }
                    }

                    var localizacao = new Localizacao
                    {
                        HorarioAmostra = DateTime.UtcNow,
                        Latitude       = latitude,
                        Longitude      = longitude,
                        Rota           = rota
                    };

                    _localizacaoService.SalvarLocalizacao(localizacao);

                    var estacaoDestino = _estacaoService.ObterPorId(rota.Destino);
                    var addr           = estacaoDestino.Endereco;

                    double distancia = GeocodingService.Haversine(latitude, longitude, addr.Latitude, addr.Longitude);

                    if (distancia <= 20)
                    {
                        rota.DataFim = DateTime.UtcNow;
                        _rotaService.SalvarRota(rota);

                        resp.Ok       = true;
                        resp.Mensagem = "Localização salva com sucesso, rota finalizada.";

                        return(resp);
                    }
                    else
                    {
                        resp.Ok       = true;
                        resp.Mensagem = "Localização salva com sucesso.";

                        return(resp);
                    }
                }

                catch (Exception)
                {
                    return(null);
                }
            }
        }