using System.Linq;
using SHJX.Service.Model.Dao;
using System.Collections.Generic;
using System;
namespace SHJX.Service.Common.Calculate
{
public static class SampleCalculate
{
///
/// 获取空白样的结果
///
///
///
public static double[] temp = new double[50];
public static int tempCount = 0;
public static void GeBlankTaskResult(this List noneTasks, double maxVolume, out double blankValue)
{
if (noneTasks?.Count==0)
{
blankValue = 0;
return;
}
if (noneTasks?.Count > 1)
{
var noneMaxValue = noneTasks.Max(item => item.Amount);
var noneMinValue = noneTasks.Min(item => item.Amount);
if (noneMaxValue >= maxVolume)
{
GeBlankTaskResult( noneTasks.Where(item => item.Amount != noneMaxValue).ToList(), maxVolume, out blankValue);
}
if (noneMaxValue - noneMinValue > 0.8)
{
GeBlankTaskResult( noneTasks.Where(item => item.Amount != noneMinValue).ToList(), maxVolume, out blankValue);
}
temp[tempCount++] = Math.Round(noneTasks.Average(item => item.Amount), 2);
blankValue = temp[0];
}
else
{
var first = noneTasks?.FirstOrDefault();
if (first?.Amount >= maxVolume)
{
temp[tempCount++] = 0;
}
else
temp[tempCount++] = Math.Round(first?.Amount ?? 0, 2);
blankValue = temp[0];
}
//if (noneTasks?.Count > 1)
//{
// var noneMaxValue = noneTasks.Max(item => item.Amount);
// var noneMinValue = noneTasks.Min(item => item.Amount);
// if (noneMaxValue - noneMinValue <= 0.8)
// {
// blankValue = noneTasks.Average(item => item.Amount);
// return;
// }
// if (noneMaxValue >= maxVolume)
// {
// GeBlankTaskResult(noneTasks.Where(item => item.Amount != noneMaxValue).ToList(), maxVolume, out blankValue);
// }
// else
// {
// blankValue = noneMaxValue;
// }
//}
//else
//{
// var first = noneTasks?.FirstOrDefault();
// blankValue = first?.Amount ?? 0;
//}
}
public static void GetBDTaskResult(this List bdTasks, double maxVolume, string level, out double bdValue)
{
if (bdTasks?.Count == 0)
{
bdValue = 0;
return;
}
double bdAmount = 0;
if (bdTasks is not null && bdTasks.Any())
{
List bdTasksUsed = new List();
for (int i = 0; i < bdTasks.Count; i++)
{
if (bdTasks[i].Amount < maxVolume)
{
bdTasksUsed.Add(bdTasks[i]);
}
}
if (bdTasksUsed.Count == 0)
{
bdAmount = Math.Round(maxVolume, 2);
}
else
{
bdAmount = Math.Round(bdTasksUsed.Average(item => Convert.ToDouble(item.Amount)), 2);
}
if (bdAmount == 0)
{
bdValue = 0;
}
else
{
bdValue = level switch
{
"Low" => 0.125 / bdAmount,
"High" => 1.25 / bdAmount,
_ => throw new ArgumentNullException(level)
};
}
bdValue = Math.Round(bdValue, 5);
}
else
{
bdAmount = 0;
var first = bdTasks?.FirstOrDefault();
if (first?.Amount >= maxVolume)
bdAmount = Math.Round(maxVolume, 2);
else
{
bdAmount = Math.Round(first?.Amount ?? 0, 2);
}
if (bdAmount == 0)
{
bdValue = 0;
}
else
{
bdValue = level switch
{
"Low" => 0.125 / bdAmount,
"High" => 1.25 / bdAmount,
_ => throw new ArgumentNullException(level)
};
}
bdValue = Math.Round(bdValue, 5);
}
}
}
}