Пример #1
0
        public IList <DTOs.OutputGeneration.Day> GetMaxEmissionsPerDay(Gas gas, Coal coal, EmissionsFactor emissionsFactor)
        {
            MaxEmissionGenerators maxEmissionGenerators = new MaxEmissionGenerators();

            maxEmissionGenerators.Day = new List <DTOs.OutputGeneration.Day>();

            foreach (var gasGenerator in gas.GasGenerator)
            {
                foreach (var inputday in gasGenerator.Generation.Day)
                {
                    DTOs.OutputGeneration.Day outputDay = new DTOs.OutputGeneration.Day();
                    outputDay.Date     = inputday.Date;
                    outputDay.Name     = gasGenerator.Name;
                    outputDay.Emission = inputday.Energy * gasGenerator.EmissionsRating * emissionsFactor.Medium;
                    maxEmissionGenerators.Day.Add(outputDay);
                }
            }

            foreach (var coalGenerator in coal.CoalGenerator)
            {
                foreach (var inputday in coalGenerator.Generation.Day)
                {
                    DTOs.OutputGeneration.Day outputDay = new DTOs.OutputGeneration.Day();
                    outputDay.Date     = inputday.Date;
                    outputDay.Name     = coalGenerator.Name;
                    outputDay.Emission = inputday.Energy * coalGenerator.EmissionsRating * emissionsFactor.High;
                    maxEmissionGenerators.Day.Add(outputDay);
                }
            }
            var result = maxEmissionGenerators.Day.GroupBy(x => x.Date)
                         .SelectMany(group => group.Where(element => element.Emission == group.Max(obj => obj.Emission)));

            return(result.ToList());
        }
Пример #2
0
        /// <summary>
        /// Triggered whenever a new .xml file has been added to the input folder
        /// </summary>
        /// <param name="source"></param>
        /// <param name="e"></param>
        private static void OnCreated(object source, FileSystemEventArgs e)
        {
            if (e.ChangeType != WatcherChangeTypes.Created)
            {
                return;
            }

            const string generatorXPath     = "//WindGenerator|//GasGenerator|//CoalGenerator";
            const string referenceDataXPath = "//ValueFactor|//EmissionsFactor";

            var appSettings         = ConfigurationManager.AppSettings;
            var outputFolder        = appSettings["OutputFolder"];
            var referenceDataFolder = appSettings["ReferenceDataFolder"];
            var inputFolder         = appSettings["InputFolder"];

            var reader       = new XmlReader();
            var pathToReport = e.FullPath;

            //redeclare lists to empty them
            _allTotalGenerationValuesCollection = new List <TotalGenerationValue>();
            _actualHeatRates     = new List <ActualHeatRates>();
            _generatorCollection = new List <object>();

            var emissionFactor = new EmissionsFactor();
            var valueFactor    = new ValueFactor();

            ICollection <object> generatorCollection = new List <object>();

            var doc = new XmlDocument();
            var referenceDataDoc = new XmlDocument();

            try
            {
                doc.Load(pathToReport);
                referenceDataDoc.Load(referenceDataFolder !);
            }
            catch (IOException ex)
            {
                Console.WriteLine(ex.Message);
            }

            var generators       = doc.SelectNodes(generatorXPath);
            var factors          = referenceDataDoc.SelectNodes(referenceDataXPath);
            var oldReportsFolder = @$ "{inputFolder}\OldReports";

            if (!Directory.Exists(oldReportsFolder))
            {
                Directory.CreateDirectory(oldReportsFolder);
            }

            emissionFactor = ParseValueAndEmissionsFactor(factors, emissionFactor, reader, ref valueFactor);

            PopulateGeneratorCollection(generators, _generatorCollection, reader);
            ObjectListToOutputObjects(_generatorCollection, valueFactor, emissionFactor);

            SetDistinctAllDayCollectionWithHighestValue();
            CreateXmlFile(outputFolder);

            try
            {
                var newFileName = GetNewFileName(e.FullPath);
                if (!File.Exists(e.FullPath))
                {
                    return;
                }

                File.Move(e.FullPath, @$ "{oldReportsFolder}\{newFileName}.xml");
                Console.WriteLine(@$ "Moved {e.Name} to \ReadReports");
            }