using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IStation.Calculation
{
///
/// 能效标准业务周辅助类
///
public class EtaStandardLogicWeekHelper
{
///
/// 分析
///
public static List Standard
(
long CorpID,
string ObjectType,
long ObjectID,
DateTime StartDay,
DateTime EndDay,
IEnumerable configures,
IEnumerable list
)
{
if (StartDay.Date > EndDay.Date)
return default;
if (configures == null || configures.Count() < 1)
return default;
if (list == null || list.Count() < 1)
return default;
var dt_now = DateTime.Now;
var record_list = new List();
foreach (var configure in configures)
{
var configure_record_list = list.Where(x => x.ConfigureID == configure.ID).ToList();
if (configure_record_list != null && configure_record_list.Count > 0)
{
var record = new Model.EtaStandardLogicWeekRecord();
record.CorpID = CorpID;
record.ConfigureID = configure.ID;
record.ObjectType = ObjectType;
record.ObjectID = ObjectID;
record.StartDay = StartDay.Date;
record.EndDay = EndDay.Date;
record.DataTime = dt_now;
record.LowerLimit = configure.LowerLimit;
record.UpperLimit = configure.UpperLimit;
record.Dt = configure_record_list.Sum(t => t.Dt);
record.Dtt = configure_record_list.Sum(t => t.Dtt);
record.Qt = configure_record_list.Sum(t => t.Qt);
record.Qtt = configure_record_list.Sum(t => t.Qtt);
record.PointCount = configure_record_list.Sum(t => t.PointCount);
record.TotalPointCount = configure_record_list.Sum(t => t.TotalPointCount);
record.Qmin = configure_record_list.Min(t => t.Qmin);
record.Qmax = configure_record_list.Max(t => t.Qmax);
record.Qavg = configure_record_list.Sum(t => t.Qavg * ((double)t.PointCount) / ((double)record.PointCount));
record.Emin = configure_record_list.Min(t => t.Emin);
record.Emax = configure_record_list.Max(t => t.Emax);
record.Eavg = configure_record_list.Sum(t => t.Eavg * ((double)t.PointCount) / ((double)record.PointCount));
record.Hmin = configure_record_list.Min(t => t.Hmin);
record.Hmax = configure_record_list.Max(t => t.Hmax);
record.Havg = configure_record_list.Sum(t => t.Havg * ((double)t.PointCount) / ((double)record.PointCount));
record.Pmin = configure_record_list.Min(t => t.Pmin);
record.Pmax = configure_record_list.Max(t => t.Pmax);
record.Pavg = configure_record_list.Sum(t => t.Pavg * ((double)t.PointCount) / ((double)record.PointCount));
record.WPmin = configure_record_list.Min(t => t.WPmin);
record.WPmax = configure_record_list.Max(t => t.WPmax);
record.WPavg = configure_record_list.Sum(t => t.WPavg * ((double)t.PointCount) / ((double)record.PointCount));
record.UWPmin = configure_record_list.Min(t => t.UWPmin);
record.UWPmax = configure_record_list.Max(t => t.UWPmax);
record.UWPavg = configure_record_list.Sum(t => t.UWPavg * ((double)t.PointCount) / ((double)record.PointCount));
record_list.Add(record);
}
}
return record_list;
}
}
}