Ejemplo n.º 1
0
        /// <summary>
        /// Method to find out max emission each day and the generator name.
        /// Only Gas and coal generators as per wind generators do not have emission
        /// </summary>
        /// <param name="incomingGeneratedReport"></param>
        /// <returns></returns>
        private MaxEmissionGenerators MaxEmissionGeneratorPerDay(GenerationReport incomingGeneratedReport)
        {
            var maxEmissionGenerator = new MaxEmissionGenerators();

            foreach (var generator in incomingGeneratedReport.coal.coalGenerator)
            {
                foreach (var day in generator.generation.day)
                {
                    var coalDayOutput = new DayOutput
                    {
                        Name     = generator.name,
                        Date     = day.date,
                        Emission = TotalDailyEmissions(day.energy, generator.EmissionsRating,
                                                       GetGeneratorFactorMapping(generator.name).emissionsFactor)
                    };
                    SetMaxEmission(coalDayOutput);
                }
            }

            foreach (var generator in incomingGeneratedReport.gas.gasGenerator)
            {
                foreach (var day in generator.generation.day)
                {
                    var gasdayOutput = new DayOutput
                    {
                        Name     = generator.name,
                        Date     = day.date,
                        Emission = TotalDailyEmissions(day.energy, generator.emissionsRating,
                                                       GetGeneratorFactorMapping(generator.name).emissionsFactor)
                    };
                    SetMaxEmission(gasdayOutput);
                }
            }
            var dayOutput = _lsFinalMaxGenOutput.GroupBy(x => x.Date)
                            .OrderBy(g => g.Key);

            var lsfinalDayOutput = dayOutput.SelectMany(@group => @group.OrderByDescending(c => c.Emission).Take(1)).ToList();

            maxEmissionGenerator.Days = lsfinalDayOutput;

            return(maxEmissionGenerator);
        }
Ejemplo n.º 2
0
 /// <summary>
 /// SetEmission - Add emission for each generator in existing list
 /// If name and date is a match, this means cumulative emission and emission for generator needs to be updated in final list.
 /// if name is same but date different, then new entry for the generator
 /// else it is a new entry
 /// </summary>
 /// <param name="incomingDayOutput"></param>
 private void SetMaxEmission(DayOutput incomingDayOutput)
 {
     if (_lsFinalMaxGenOutput.Exists(x =>
                                     string.Equals(x.Name.ToLower(), incomingDayOutput.Name.ToLower(), StringComparison.CurrentCultureIgnoreCase) && x.Date.Date == incomingDayOutput.Date.Date))
     {
         var index = _lsFinalMaxGenOutput.FindIndex(generator => string.Equals(generator.Name.ToLower(),
                                                                               incomingDayOutput.Name.ToLower(), StringComparison.CurrentCultureIgnoreCase));
         var updatedValue = new DayOutput
         {
             Date     = incomingDayOutput.Date,
             Name     = incomingDayOutput.Name,
             Emission = _lsFinalMaxGenOutput[index].Emission + incomingDayOutput.Emission
         };
         _lsFinalMaxGenOutput[index] = updatedValue;
     }
     else if (_lsFinalMaxGenOutput.Exists(x => String.Equals(x.Name, incomingDayOutput.Name, StringComparison.CurrentCultureIgnoreCase) && x.Date.Date != incomingDayOutput.Date.Date))
     {
         _lsFinalMaxGenOutput.Add(incomingDayOutput);
     }
     else
     {
         _lsFinalMaxGenOutput.Add(incomingDayOutput);
     }
 }