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