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); } } } }