Exemple #1
0
        public decimal GetIndiceOrdinamento(Classi.Composizione.ComposizioneMezzi composizione, bool CoordinateFake)
        {
            int     ValoreIntOriginePerSganciamento = 0;
            decimal ValoreAdeguatezzaMezzo;

            ValoreAdeguatezzaMezzo = GeneraValoreAdeguatezzaMezzo(_Richiesta.Tipologie, composizione.Mezzo.Genere);

            if (!CoordinateFake)
            {
                composizione = GetDistanceByGoogle(composizione, _Richiesta).Result;
            }

            int ValoreCompetenza = 0;

            switch (_Richiesta.Competenze.Select(c => c.Descrizione).ToList().FindIndex(c => c.Equals(composizione.Mezzo.Distaccamento.Descrizione)))
            {
            case 0: ValoreCompetenza = 3000; break;

            case 1: ValoreCompetenza = 2000; break;

            case 2: ValoreCompetenza = 1000; break;
            }

            return(100 / (1 + Convert.ToDecimal(composizione.TempoPercorrenza.Replace(".", ",")) / 5400)
                   + ValoreIntOriginePerSganciamento + ValoreAdeguatezzaMezzo + ValoreCompetenza);
        }
Exemple #2
0
        private async Task <Classi.Composizione.ComposizioneMezzi> GetDistanceByGoogle(Classi.Composizione.ComposizioneMezzi composizione, RichiestaAssistenza richiesta)
        {
            var origine     = $"origins={ composizione.Mezzo.Coordinate.Latitudine.ToString().Replace(",", ".")},{ composizione.Mezzo.Coordinate.Longitudine.ToString().Replace(",", ".")}";
            var destination = $"destinations={ richiesta.Localita.Coordinate.Latitudine.ToString().Replace(",", ".")},{ richiesta.Localita.Coordinate.Longitudine.ToString().Replace(",", ".")}";
            var mode        = "mode=Driving";
            var sensor      = "sensor=false";

            var queryString = new StringContent("");

            //CACHE
            DistanceMatrix distanza;
            var            nomeCache = "DistanceMatrix_";

            using var _client = new HttpClient();

            if (!_memoryCache.TryGetValue(nomeCache, out distanza))
            {
                var response = await _client.PostAsync(_configuration.GetSection("UrlExternalApi").GetSection("DistanceMatrix").Value + $"&{origine}&{destination}&{mode}&{sensor}", queryString).ConfigureAwait(false);

                response.EnsureSuccessStatusCode();
                using HttpContent content = response.Content;

                string data = await content.ReadAsStringAsync().ConfigureAwait(false);

                distanza = JsonConvert.DeserializeObject <DistanceMatrix>(data);

                var cacheEntryOptions = new MemoryCacheEntryOptions().SetSlidingExpiration(TimeSpan.FromHours(8));
                _memoryCache.Set(nomeCache, distanza, cacheEntryOptions);
            }
            //FINE CACHE

            if (distanza.Rows[0].Elements[0].Distance != null)
            {
                //LE Value sono espresse in SECONDI
                composizione.Km = distanza.Rows[0].Elements[0].Distance.Text.ToString().Substring(0, distanza.Rows[0].Elements[0].Distance.Text.ToString().Length - 2);
                composizione.TempoPercorrenza = (distanza.Rows[0].Elements[0].Duration.Value / 60).ToString();
            }
            else
            {
                composizione.Km = "100";
                composizione.TempoPercorrenza = "50";
            }

            return(composizione);
        }