namespace IStation.Service
{
///
/// 能效(多)实时记录
///
public partial class EtaMultiRealRecord
{
///
/// 通过 Station 获取流量、扬程、日期区间内运行的汇总内容数据
///
public List GetRunSummaryContentByStationOfQHDayRange(int Station, double Qmin, double Qmax, double Hmin, double Hmax, DateTime StartDay, DateTime EndDay)
{
//判断流量
if (Qmin > Qmax)
{
return default;
}
//判断扬程
if (Hmin > Hmax)
{
return default;
}
//判断日期
if (StartDay.Date > EndDay.Date)
{
return default;
}
var dal = DALCreateHelper.CreateDAL();
var entity_list = dal.GetRunSummaryContentByStationOfQHDayRange(Station, Qmin, Qmax, Hmin, Hmax, StartDay.Date, EndDay.Date);
var model_list = Entity2Models(entity_list);
return model_list;
}
///
/// 获取流量扬程区间的运行时间和平均效率
///
public List GetRunQHETRectByObjectOfDayRange(int Station, double Qspace, double Hspace, DateTime StartDay, DateTime EndDay)
{
if (StartDay.Date > EndDay.Date)
{
return default;
}
if (Qspace <= 0 || Hspace <= 0)
{
return default;
}
var dal = DALCreateHelper.CreateDAL();
var entity_list = dal.GetRunQHETByStationOfDayRange(Station, StartDay, EndDay);
if (entity_list == null || entity_list.Count < 1)
{
return default;
}
//流量最小值
var min_double_q = entity_list.Min(x => x.Q);
int q_min = 0;
if (min_double_q > 10000)
q_min = (int)(Math.Floor((min_double_q / 10000)) * 10000);
else if (min_double_q > 1000)
q_min = (int)(Math.Floor((min_double_q / 1000)) * 1000);
else if (min_double_q > 100)
q_min = (int)(Math.Floor((min_double_q / 100)) * 100);
else
q_min = (int)(Math.Floor((min_double_q / Qspace)) * Qspace);
//流量最大值
int q_max = (int)Math.Ceiling(entity_list.Max(x => x.Q));
//扬程最大值
int h_max = (int)Math.Ceiling(entity_list.Max(x => x.H));
//扬程最小值
int h_min = (int)Math.Floor(entity_list.Min(x => x.H));
//流量小数位数
var q_digit = 1;
//扬程小数位数
var h_digit = 2;
var list = new List();
double q_temp = q_min;
while (q_temp < q_max)
{
double q_temp_over = Math.Round(q_temp + Qspace, q_digit);
if (q_temp_over > q_max)
q_temp_over = q_max;
double h_temp = h_min;
while (h_temp < h_max)
{
double h_temp_over = Math.Round(h_temp + Hspace, h_digit);
if (h_temp_over > h_max)
h_temp_over = h_max;
var items = entity_list.Where(t => t.H >= h_temp && t.H <= h_temp_over && t.Q >= q_temp && t.Q <= q_temp_over).ToList();
var model = new Model.EtaQHETRect();
model.Hmax = h_temp_over;
model.Hmin = h_temp;
model.Qmax = q_temp_over;
model.Qmin = q_temp;
if (items.Count > 0)
{
model.Tsum = items.Sum(t => t.T);
model.Eavg = Math.Round(items.Average(t => t.E), 2);
}
list.Add(model);
h_temp = h_temp_over;
}
q_temp = q_temp_over;
}
return list;
}
///
/// 获取流量扬程区间的运行时间和平均效率
///
public Model.EtaQHETRectList GetRunQHETRectListByObjectOfDayRange(int Station, double Qspace, double Hspace, DateTime StartDay, DateTime EndDay)
{
if (EndDay.Date < StartDay.Date)
{
return default;
}
if (Qspace <= 0 || Hspace <= 0)
{
return default;
}
var dal = DALCreateHelper.CreateDAL();
var entity_list = dal.GetRunQHETByStationOfDayRange(Station, StartDay, EndDay);
if (entity_list == null || entity_list.Count < 1)
{
return default;
}
var list = new Model.EtaQHETRectList();
//流量最大值
int q_max = (int)Math.Ceiling(entity_list.Max(x => x.Q));
//流量最小值
int q_min = (int)Math.Floor(entity_list.Min(x => x.Q));
//扬程最大值
int h_max = (int)Math.Ceiling(entity_list.Max(x => x.H));
//扬程最小值
int h_min = (int)Math.Floor(entity_list.Min(x => x.H));
//流量小数位数
var q_digit = 1;
//扬程小数位数
var h_digit = 2;
list.Qmax = q_max;
list.Qmin = q_min;
list.Hmax = h_max;
list.Hmin = h_min;
list.Qspace = Qspace;
list.Hspace = Hspace;
double q_temp = q_min;
while (q_temp < q_max)
{
double q_temp_over = Math.Round(q_temp + Qspace, q_digit);
if (q_temp_over > q_max)
q_temp_over = q_max;
double h_temp = h_min;
while (h_temp < h_max)
{
double h_temp_over = Math.Round(h_temp + Hspace, h_digit);
if (h_temp_over > h_max)
h_temp_over = h_max;
var items = entity_list.Where(t => t.H >= h_temp && t.H <= h_temp_over && t.Q >= q_temp && t.Q <= q_temp_over).ToList();
if (items.Count > 0)
{
var model = new Model.EtaQHETRect();
model.Hmax = h_temp_over;
model.Hmin = h_temp;
model.Qmax = q_temp_over;
model.Qmin = q_temp;
model.Tsum = items.Sum(t => t.T);
model.Eavg = Math.Round(items.Average(t => t.E), 2);
list.RectList.Add(model);
}
h_temp = h_temp_over;
}
q_temp = q_temp_over;
}
return list;
}
}
}