示例#1
0
        public List <ComposizioneSquadre> Get(ComposizioneSquadreQuery query)
        {
            var listaSedi = new List <string>
            {
                query.CodiceSede
            };
            var listaSquadre        = _getSquadre.Get(listaSedi).Result;
            var statiOperativi      = _getStatoSquadre.Get(listaSedi);
            var composizioneSquadre = new List <ComposizioneSquadre>();

            foreach (Squadra s in listaSquadre)
            {
                if (statiOperativi.Exists(x => x.IdSquadra.Equals(s.Id)))
                {
                    s.Stato             = MappaStatoSquadraDaStatoMezzo.MappaStato(statiOperativi.Find(x => x.IdSquadra.Equals(s.Id)).StatoSquadra);
                    s.IndiceOrdinamento = -200;
                }
                else
                {
                    s.Stato = Squadra.StatoSquadra.InSede;
                }

                var c = new ComposizioneSquadre
                {
                    Squadra = s,
                    Id      = s.Id
                };
                composizioneSquadre.Add(c);
            }

            return(composizioneSquadre.OrderByDescending(x => x.Squadra.IndiceOrdinamento).ToList());
        }
示例#2
0
        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
            });
        }