public async Task <List <Mezzo> > Get(AreaMappa areaMappa) { var ListaAnagraficaMezzo = new List <AnagraficaMezzo>(); var ListaPosizioneFlotta = _getPosizioneFlotta.Get(0).Result; var ListaMezziInRettangolo = new List <MessaggioPosizione>(); ListaMezziInRettangolo.AddRange(ListaPosizioneFlotta.Where(mezzo => mezzo.Localizzazione.Lat >= areaMappa.BottomLeft.Latitudine && mezzo.Localizzazione.Lat <= areaMappa.TopRight.Latitudine && mezzo.Localizzazione.Lon >= areaMappa.BottomLeft.Longitudine && mezzo.Localizzazione.Lon <= areaMappa.TopRight.Longitudine)); List <Mezzo> ListaMezziAreaMappa = GetAnagraficaMezziByTarga(ListaMezziInRettangolo).Result; return(GetListaMezziConStatoAggiornat(ListaMezziAreaMappa)); }
public async Task <List <Mezzo> > Get(List <string> sedi, string genereMezzo = null, string codiceMezzo = null, List <MessaggioPosizione> posizioneFlotta = null) { var pinNodi = sedi.Select(s => new PinNodo(s, true)); var ListaCodiciComandi = new List <string>(); var ListaCodiciSedi = new List <string>(); var listaSediAlberate = _getAlberaturaUnitaOperative.ListaSediAlberata(); foreach (var figlio in listaSediAlberate.GetSottoAlbero(pinNodi)) { var codice = figlio.Codice; string codiceE = ""; codiceE = ListaCodiciSedi.Find(x => x.Equals(codice)); if (string.IsNullOrEmpty(codiceE)) { if (!ListaCodiciComandi.Contains(codice.Split('.')[0])) { ListaCodiciComandi.Add(codice.Split('.')[0]); } ListaCodiciSedi.Add(codice); } } var ListaPosizioneFlotta = new List <MessaggioPosizione>(); if (posizioneFlotta == null) { ListaPosizioneFlotta = _getPosizioneFlotta.Get(0).Result; } else { ListaPosizioneFlotta = posizioneFlotta; } var ListaAnagraficaMezzo = GetAnagraficaMezziByCodComando(ListaCodiciComandi).Result; var ListaMezzi = new List <Mezzo>(); #region LEGGO DA API ESTERNA GetToken getToken = new GetToken(_client, _configuration, _memoryCache, _writeLog, _httpContext); var token = getToken.GeneraToken(); var lstMezziDto = new List <MezzoDTO>(); try { Parallel.ForEach(sedi, sede => { var httpManager = new HttpRequestManager <List <MezzoDTO> >(_client, _memoryCache, _writeLog, _httpContext, _configuration); httpManager.Configure("Mezzi_" + sede); var lstSediQueryString = string.Join("&codiciSedi=", ListaCodiciSedi.Where(s => sede.Contains(s.Split(".")[0])).ToArray()); var url = new Uri($"{_configuration.GetSection("UrlExternalApi").GetSection("GacApi").Value}{Classi.Costanti.GacGetMezziUtilizzabili}?codiciSedi={lstSediQueryString}"); lock (lstMezziDto) lstMezziDto.AddRange(httpManager.GetAsync(url, token).Result); }); } catch (Exception e) { throw new Exception("Elenco dei mezzi non disponibile"); } #endregion LEGGO DA API ESTERNA //MAPPING ListaMezzi = lstMezziDto.Select(m => { //if (!mezzoFake.Equals("CMOB")) //{ var anagraficaMezzo = ListaAnagraficaMezzo.Find(x => x.Targa.Equals(m.Descrizione)); var mezzo = MapMezzo(anagraficaMezzo, m); if (mezzo != null) { //listaMezziBySedeAppo.Add(mezzo); ListaMezzi.Add(mezzo); } //} return(mezzo); }).ToList(); ListaMezzi = ListaMezzi.Select(mezzo => { var CoordinateMezzoGeoFleet = ListaPosizioneFlotta.Find(x => x.CodiceMezzo.Equals(mezzo.Codice)); if (CoordinateMezzoGeoFleet == null) { mezzo.Coordinate = mezzo.Distaccamento.Coordinate; mezzo.CoordinateFake = true; } else { mezzo.Coordinate = new Coordinate(CoordinateMezzoGeoFleet.Localizzazione.Lat, CoordinateMezzoGeoFleet.Localizzazione.Lon); mezzo.CoordinateFake = false; } return(mezzo); }).ToList(); return(GetListaMezziConStatoAggiornat(ListaMezzi)); }
public async Task <List <Mezzo> > Get(List <string> sedi, string genereMezzo = null, string codiceMezzo = null) { var ListaCodiciSedi = new List <string>(); var ListaCodiciComandi = new List <string>(); var listaSediAlberate = _getAlberaturaUnitaOperative.ListaSediAlberata(); var pinNodi = sedi.Select(sede => new PinNodo(sede, true)).ToList(); foreach (var figlio in listaSediAlberate.GetSottoAlbero(pinNodi)) { var codice = figlio.Codice; string codiceE = ""; codiceE = ListaCodiciSedi.Find(x => x.Equals(codice)); if (string.IsNullOrEmpty(codiceE)) { if (!ListaCodiciComandi.Contains(codice.Split('.')[0])) { ListaCodiciComandi.Add(codice.Split('.')[0]); } ListaCodiciSedi.Add(codice); } } var ListaAnagraficaMezzo = new List <AnagraficaMezzo>(); var ListaPosizioneFlotta = _getPosizioneFlotta.Get(0).Result; #region LEGGO DA API ESTERNA GetToken getToken = new GetToken(_client, _configuration, _memoryCache, _writeLog, _httpContext); var token = getToken.GeneraToken(); var lstMezziDto = new List <MezzoDTO>(); Parallel.ForEach(sedi, sede => { var httpManager = new HttpRequestManager <List <MezzoDTO> >(_client, _memoryCache, _writeLog, _httpContext, _configuration); httpManager.Configure("Mezzi_" + sede); var lstSediQueryString = string.Join("&codiciSedi=", ListaCodiciSedi.Where(s => sede.Contains(s.Split(".")[0])).ToArray()); var url = new Uri($"{_configuration.GetSection("UrlExternalApi").GetSection("GacApi").Value}{Costanti.GacGetMezziUtilizzabili}?codiciSedi={lstSediQueryString}"); lock (lstMezziDto) lstMezziDto.AddRange(httpManager.GetAsync(url, token).Result); }); #endregion LEGGO DA API ESTERNA var ListaStatiOperativiMezzi = _getStatoMezzi.Get(sedi.ToArray()); var ListaMezzi = lstMezziDto.Select(m => { //if (!mezzoFake.Equals("CMOB")) //{ var mezzo = MapMezzo(m); if (mezzo != null) { //listaMezziBySedeAppo.Add(mezzo); return(mezzo); } //} if (ListaStatiOperativiMezzi.Count > 0) { mezzo.Stato = ListaStatiOperativiMezzi.Find(x => x.CodiceMezzo.Equals(mezzo.Codice)).StatoOperativo; } else { mezzo.Stato = Costanti.MezzoInSede; } return(mezzo); }).ToList(); return(ListaMezzi); }
public ComposizionePartenzaAvanzataResult Handle(ComposizionePartenzaAvanzataQuery query) { Log.Debug("Inizio elaborazione Composizione partenza avanzata Handler"); var lstSedi = query.CodiceSede.ToList(); var tipologia90 = _getTipologieByCodice.Get(new List <string> { "90" }).First(); var turnoCorrente = _getTurno.Get(); var turnoPrecedente = _getTurno.Get(turnoCorrente.DataOraInizio.AddMilliseconds(-1)); var turnoSuccessivo = _getTurno.Get(turnoCorrente.DataOraFine.AddMinutes(1)); //REPERISCO I DATI, FACCIO IL MAPPING ED APPLICO I FILTRI (MEZZI E SQUADRE) var lstSquadre = Task.Factory.StartNew(() => _getListaSquadre.Get(lstSedi) .ContinueWith(lstsquadre => { var statiOperativi = _getStatoSquadre.Get(lstSedi); return(lstsquadre.Result.Select(squadra => { if (statiOperativi.Exists(x => x.IdSquadra.Equals(squadra.Id))) { squadra.Stato = MappaStatoSquadraDaStatoMezzo.MappaStato(statiOperativi.Find(x => x.IdSquadra.Equals(squadra.Id)).StatoSquadra); } else { squadra.Stato = Squadra.StatoSquadra.InSede; } var comp = new Classi.Composizione.ComposizioneSquadre() { Id = squadra.Id, Squadra = squadra }; squadra.IndiceOrdinamento = new OrdinamentoSquadre(query.Richiesta).GetIndiceOrdinamento(comp); return comp; })); }) .ContinueWith(lstCompSquadre => FiltraSquadre(query, lstCompSquadre.Result, tipologia90, turnoCorrente, turnoPrecedente, turnoSuccessivo)).Result); var lstMezzi = Task.Factory.StartNew(() => _getPosizioneFlotta.Get(0) .ContinueWith(lstPosizioneFlotta => _getMezziUtilizzabili.Get(lstSedi, posizioneFlotta: lstPosizioneFlotta.Result).Result) .ContinueWith(lstmezzi => //Mapping { var composizioneMezzi = (from mezzo in lstmezzi.Result let kmGen = new Random().Next(1, 60).ToString() let tempoPer = Convert.ToDouble(kmGen.Replace(".", ",")) / 1.75 select new Classi.Composizione.ComposizioneMezzi() { Id = mezzo.Codice, Mezzo = mezzo, Km = kmGen, TempoPercorrenza = Math.Round(tempoPer, 2).ToString(CultureInfo.InvariantCulture), }).ToList(); var mezziPrenotati = _getMezziPrenotati.Get(query.CodiceSede); decimal totaleKM = 0; decimal totaleTempoPercorrenza = 0; string mediaDistanza; string mediaTempoPercorrenza; return(composizioneMezzi.Select(c => { if (c.IstanteScadenzaSelezione < DateTime.Now) { c.IstanteScadenzaSelezione = null; } if (mezziPrenotati.Find(x => x.CodiceMezzo.Equals(c.Mezzo.Codice)) != null) { c.Id = c.Mezzo.Codice; c.IstanteScadenzaSelezione = mezziPrenotati.Find(x => x.CodiceMezzo.Equals(c.Mezzo.Codice)).IstanteScadenzaSelezione; if (c.Mezzo.Stato.Equals("In Sede")) { c.Mezzo.Stato = mezziPrenotati.Find(x => x.CodiceMezzo.Equals(c.Mezzo.Codice)).StatoOperativo; } } //Per i mezzi con coordinate Fake nella property i Km e la TempoPercorrenza vengono impostati i valori medi della collection totaleKM += Convert.ToDecimal(c.Km.Replace(".", ",")); totaleTempoPercorrenza += Convert.ToDecimal(c.TempoPercorrenza.Replace(".", ",")); mediaDistanza = Math.Round(totaleKM / composizioneMezzi.Count(), 2).ToString(CultureInfo.InvariantCulture); mediaTempoPercorrenza = Math.Round(totaleTempoPercorrenza / composizioneMezzi.Count(), 2).ToString(CultureInfo.InvariantCulture); c.Km = mediaDistanza; c.TempoPercorrenza = mediaTempoPercorrenza; c.IndiceOrdinamento = new OrdinamentoMezzi(query.Richiesta, _getTipologieByCodice, _configuration, _memoryCache).GetIndiceOrdinamento(c, c.Mezzo.CoordinateFake); return c; })); }) .ContinueWith(lstCompMezzi => FiltraMezzi(query, lstCompMezzi.Result)).Result); //PREPARO PAGINAZIONE IN BASE AI FILTRI var indexMezzo = query.Filtro.Mezzo != null?lstMezzi.Result.FindIndex(c => c.Mezzo.Codice.Equals(query.Filtro.Mezzo.Codice)) : 0; var indexSquadra = query.Filtro.Squadre != null?lstSquadre.Result.FindIndex(c => c.Squadra.Codice.Equals(query.Filtro.Squadre.FirstOrDefault().Codice)) : 0; if (indexMezzo != 0) { query.Filtro.MezziPagination.Page = (indexMezzo + 1) / query.Filtro.MezziPagination.PageSize + 1; } if (indexSquadra != 0) { query.Filtro.SquadrePagination.Page = (indexSquadra + 1) / query.Filtro.SquadrePagination.PageSize + 1; } //COMPONGO IL DTO E FACCIO LA PAGINAZIONE var composizioneAvanzata = new Classi.Composizione.ComposizionePartenzaAvanzata() { ComposizioneMezziDataArray = lstMezzi.Result .Skip(query.Filtro.MezziPagination.PageSize * (query.Filtro.MezziPagination.Page - 1)) .Take(query.Filtro.MezziPagination.PageSize).ToList(), ComposizioneSquadreDataArray = lstSquadre.Result .Skip(query.Filtro.SquadrePagination.PageSize * (query.Filtro.SquadrePagination.Page - 1)) .Take(query.Filtro.SquadrePagination.PageSize).ToList(), MezziPagination = new Paginazione() { Page = query.Filtro.MezziPagination.Page, PageSize = query.Filtro.MezziPagination.PageSize, TotalItems = lstMezzi.Result.Count }, SquadrePagination = new Paginazione() { Page = query.Filtro.SquadrePagination.Page, PageSize = query.Filtro.SquadrePagination.PageSize, TotalItems = lstSquadre.Result.Count } }; Log.Debug("Fine elaborazione Composizione partenza avanzata Handler"); return(new ComposizionePartenzaAvanzataResult() { ComposizionePartenzaAvanzata = composizioneAvanzata }); }