30 lines
1.3 KiB
C#
30 lines
1.3 KiB
C#
using System.Collections.Concurrent;
|
|
using System.Collections.Generic;
|
|
using BattSim.Models;
|
|
|
|
namespace BattSim.Services
|
|
{
|
|
public static class DataFilter
|
|
{
|
|
public enum FilterOption { ALL, YEAR, MONTH, WEEK, DAY }
|
|
public static EnergyData[] FilterData(EnergyData[] data, FilterOption filterOption)
|
|
{
|
|
var dailyData = data
|
|
.GroupBy(d=>d.Time.Date)
|
|
.Select(group=> new EnergyData{
|
|
Consumption = group.Sum(d => d.Consumption),
|
|
Production = group.Sum(d => d.Production),
|
|
BatteryCharge = group.Max(d => d.BatteryCharge),
|
|
Time = group.First().Time
|
|
}).ToArray();
|
|
|
|
return filterOption switch {
|
|
FilterOption.DAY => data[(data.Length > 96?data.Length - 96:0)..], // 24 hours * 4 quarters per hour
|
|
FilterOption.WEEK => data[(data.Length > 672?data.Length - 672:0)..], // 7 days * 24 hours * 4 quarters per hour
|
|
FilterOption.MONTH => dailyData[(dailyData.Length > 30?dailyData.Length - 30:0)..],
|
|
FilterOption.YEAR => dailyData[(dailyData.Length > 365?dailyData.Length - 365:0)..],
|
|
_ => dailyData
|
|
};
|
|
}
|
|
}
|
|
} |