using IStation.Untity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Policy;
using System.Text;
using System.Threading.Tasks;
namespace IStation.CalcModel
{
///
///
///
internal class TimeDataBundle
{
protected IStation.CalcModel.eCalcOptType _clacOptType = CalcModel.eCalcOptType.功率;
public List TimeDatas;
public List OpenPumpInfos { get; set; }//开泵角标
public double[,] SpanSumCacheFlow { get; set; }//缓存用:第一个元素是开始,第二元素是结束
public double[,] SpanSumCachePower { get; set; }//缓存用
public double[,] SpanSumCacheMoney { get; set; }//缓存用
public double[,] SpanSumCacheCompare { get; set; }//缓存用
public void CalcSpanCache(IStation.CalcModel.eCalcOptType clacOptType)
{
this._clacOptType = clacOptType;
int time_count = this.TimeDatas.Count;
SpanSumCacheFlow = new double[time_count, time_count];
SpanSumCachePower = new double[time_count, time_count];
SpanSumCacheMoney = new double[time_count, time_count];
for (int j = 0; j < time_count; j++)
{
for (int k = 0; k < time_count; k++)
{
SpanSumCacheFlow[j, k] = SpanSumCachePower[j, k] = SpanSumCacheMoney[j, k] = 0;//负数表示
}
}
for (int startIndx = 0; startIndx < time_count; startIndx++)
{
double flow = TimeDatas[startIndx].SumFlow;
double power = TimeDatas[startIndx].SumPower;
double money = TimeDatas[startIndx].SumMoney;
bool isLimitRange = false;
for (int endIndx = startIndx+1; endIndx < time_count; endIndx++)
{
if(isLimitRange == false)
{//只要中间出现,整个区域都不许
isLimitRange = TimeDatas[endIndx].SumPower == double.MaxValue ? true : false;
}
if(isLimitRange)
{
SpanSumCacheFlow[startIndx, endIndx] = flow;
SpanSumCachePower[startIndx, endIndx] = double.MaxValue;
SpanSumCacheMoney[startIndx, endIndx] = double.MaxValue;
}
else
{
flow += TimeDatas[endIndx].SumFlow;
SpanSumCacheFlow[startIndx, endIndx] = flow;
power += TimeDatas[endIndx].SumPower;
money += TimeDatas[endIndx].SumMoney;
SpanSumCachePower[startIndx, endIndx] = power;
SpanSumCacheMoney[startIndx, endIndx] = money;
}
}
}
if (clacOptType == CalcModel.eCalcOptType.功率)
{
SpanSumCacheCompare = SpanSumCachePower;
}
else
{
SpanSumCacheCompare = SpanSumCacheMoney;
}
}
public bool GetRangeData1(int startIndx, int endIndx, out double flow, out double compare)
{
flow = 0;
compare = 0;
if (endIndx == 0)
return false;
if (endIndx <= startIndx)
return false;
flow = SpanSumCacheFlow[startIndx, endIndx - 1];
compare = SpanSumCacheCompare[startIndx, endIndx - 1];
//if (flow > -0.1) return true;
//for (int i = startIndx; i < endIndx; i++)
//{
// flow += TimeDatas[i].SumFlow;
// compare += TimeDatas[i].SumCompare;
//}
//SpanSumCacheFlow[startIndx, endIndx - 1] = flow;
//SpanSumCacheCompare[startIndx, endIndx - 1] = compare;
return true;
}
public bool GetRangeDataStart1(int startIndx, out double flow, out double compare)
{
flow = 0;
compare = 0;
int time_count = this.TimeDatas.Count;
flow = SpanSumCacheFlow[startIndx, time_count - 1];
compare = SpanSumCacheCompare[startIndx, time_count - 1];
//if (flow > -0.1) return true;
//for (int i = startIndx; i < endIndx; i++)
//{
// flow += TimeDatas[i].SumFlow;
// compare += TimeDatas[i].SumCompare;
//}
//SpanSumCacheFlow[startIndx, endIndx - 1] = flow;
//SpanSumCacheCompare[startIndx, endIndx - 1] = compare;
return true;
}
public bool GetRangeData2(int startIndx, int endIndx, out double flow, out double power, out double money)
{
flow = 0;
power = 0;
money = 0;
if (endIndx == 0)
return false;
if (endIndx <= startIndx)
return false;
flow = SpanSumCacheFlow[startIndx, endIndx - 1];
power = SpanSumCachePower[startIndx, endIndx - 1];
money = SpanSumCacheMoney[startIndx, endIndx - 1];
//if (flow > -0.1) return true;
//for (int i = startIndx; i < endIndx; i++)
//{
// flow += TimeDatas[i].SumFlow;
// power += TimeDatas[i].SumPower;
// money += TimeDatas[i].SumMoney;
//}
//SpanSumCacheFlow[startIndx, endIndx - 1] = flow;
//SpanSumCachePower[startIndx, endIndx - 1] = power;
//SpanSumCacheMoney[startIndx, endIndx - 1] = money;
return true;
}
}
}