コード例 #1
0
 public void AjouterQuantiteEtChiffreDaffaireAuProduit(uint idProduit, int quantite, decimal chiffreDaffaire)
 {
     lock (_lock) {
         StatistiqueProduit statLocaleDuProduit;
         if (produitVersStatistiqueLocale.ContainsKey(idProduit))
         {
             statLocaleDuProduit = produitVersStatistiqueLocale[idProduit];
         }
         else
         {
             statLocaleDuProduit = new StatistiqueProduit(idProduit);
             produitVersStatistiqueLocale[idProduit] = statLocaleDuProduit;
         }
         statLocaleDuProduit.AjouterQuantite(quantite);
         statLocaleDuProduit.AjouterChiffreDAffaire(chiffreDaffaire);
     }
 }
コード例 #2
0
        private void LancerLAnalyse()
        {
            ConcurrentDictionary <uint, StatistiqueProduit> produitVersStatistiques = new ConcurrentDictionary <uint, StatistiqueProduit>();
            object _lockProduitVersStatistiques = new object();

            var duréeEnJours = (fin - début).Days + 1;
            var jours        =
                Enumerable.Range(0, duréeEnJours)
                .Select(offset => début.AddDays(offset));

            //foreach (var jour in jours)
            Parallel.ForEach(jours, jour =>
            {
                var transactionsDuJours = repertoireDeTransactions.ObtenirToutesLesTransactionsALaDateDu(jour);
                var catalogue           = repertoireDeReferences.ObtenirLeCatalogueDuJour(jour);

                Parallel.ForEach(transactionsDuJours, transaction =>
                {
                    var idProduit   = transaction.Produit;
                    var quantite    = transaction.Quantité;
                    var uuidMagasin = transaction.Magasin;

                    var prixProduit = catalogue.ObtenirLePrixDe(transaction.Produit, transaction.Magasin);
                    var recette     = (decimal)(quantite * prixProduit);


                    StatistiqueProduit statistiquesDuProduit;
                    lock (_lockProduitVersStatistiques)
                    {
                        if (produitVersStatistiques.ContainsKey(idProduit))
                        {
                            statistiquesDuProduit = produitVersStatistiques[idProduit];
                        }
                        else
                        {
                            statistiquesDuProduit = new StatistiqueProduit(idProduit);
                            produitVersStatistiques[idProduit] = statistiquesDuProduit;
                        }
                    }
                    statistiquesDuProduit.AjouterQuantite(quantite);
                    statistiquesDuProduit.AjouterChiffreDAffaire(recette);


                    StatistiqueMagasin statistiquesDuMagasin;
                    lock (_lockMagasinVersStatistiques)
                    {
                        if (magasinVersStatistiques.ContainsKey(uuidMagasin))
                        {
                            statistiquesDuMagasin = magasinVersStatistiques[uuidMagasin];
                        }
                        else
                        {
                            statistiquesDuMagasin = new StatistiqueMagasin(uuidMagasin);
                            magasinVersStatistiques[uuidMagasin] = statistiquesDuMagasin;
                        }
                    }
                    statistiquesDuMagasin.AjouterQuantiteEtChiffreDaffaireAuProduit(idProduit, quantite, recette);
                });
            });

            Top100VentesGlobal =
                produitVersStatistiques
                .Values
                .OrderByDescending(stat => stat.QuantitéVendue)
                .Take(100);

            Top100CAGlobal = produitVersStatistiques
                             .Values
                             .OrderByDescending(stat => stat.ChiffreDAffaire)
                             .Take(100);
        }