using IStation.Untity; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace IStation.Calculation { /// /// 能效汇总多周辅助类 /// public class EtaSumMultiWeekHelper { /// /// 汇总 /// public static List Sum ( long CorpID, string ObjectType, long ObjectID, DateTime StartDay, DateTime EndDay, IEnumerable list ) { if (StartDay.Date > EndDay.Date) return default; if (list == null || list.Count() < 1) return default; var group_list = list.GroupBy(x => new { CorpID = x.CorpID, ObjectType = x.ObjectType, ObjectID = x.ObjectID, RunningCount = x.RunningCount, RunningFlag = IntListHelper.ToString(x.RunningFlag) }).ToList(); var result = group_list.Select(x => { var model = new Model.EtaSumMultiWeekRecord(); model.CorpID = CorpID; model.ObjectType = ObjectType; model.ObjectID = ObjectID; model.StartDay = StartDay.Date; model.EndDay = EndDay.Date; model.DataTime = DateTime.Now; model.RunningCount = x.Key.RunningCount; model.RunningFlag = IntListHelper.ToList(x.Key.RunningFlag); model.Qt = list.Sum(x => x.Qt); model.Dt = list.Sum(x => x.Dt); model.RunTime = list.Sum(x => x.RunTime); model.PointCount = list.Sum(x => x.PointCount); model.Qmin = list.Min(t => t.Qmin); model.Qmax = list.Max(t => t.Qmax); model.Qavg = list.Sum(t => t.Qavg * ((double)t.PointCount) / ((double)model.PointCount)); model.Emin = list.Min(t => t.Emin); model.Emax = list.Max(t => t.Emax); model.Eavg = list.Sum(t => t.Eavg * ((double)t.PointCount) / ((double)model.PointCount)); model.Hmin = list.Min(t => t.Hmin); model.Hmax = list.Max(t => t.Hmax); model.Havg = list.Sum(t => t.Havg * ((double)t.PointCount) / ((double)model.PointCount)); model.Pmin = list.Min(t => t.Pmin); model.Pmax = list.Max(t => t.Pmax); model.Pavg = list.Sum(t => t.Pavg * ((double)t.PointCount) / ((double)model.PointCount)); model.WPmin = list.Min(t => t.WPmin); model.WPmax = list.Max(t => t.WPmax); model.WPavg = list.Sum(t => t.WPavg * ((double)t.PointCount) / ((double)model.PointCount)); model.UWPmin = list.Min(t => t.UWPmin); model.UWPmax = list.Max(t => t.UWPmax); model.UWPavg = list.Sum(t => t.UWPavg * ((double)t.PointCount) / ((double)model.PointCount)); return model; }).ToList(); return result; } } }