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); } } }