namespace SHJX.Service.Control.Extends { /// /// 计算结果 /// public class CalculationResult { private static IDataManager _dataManager; public CalculationResult(IDataManager dataManager) { _dataManager = dataManager; } public static double CalculateCalibration(EquipmentTask task) { double k = CalculateType(task.WaveKey, TaskTypeName.CALIBRATION_ZH, (arg) => 10 / arg); EquipmentTask blankTask = _dataManager.Query().Where(it => it.WaveKey.Equals(task.WaveKey) && it.Source.Equals(task.Source) && it.TaskType.Equals(TaskTypeName.BLANK_ZH) && it.Status.In(TaskState.Execute,TaskState.Finished)).First(); double taskRes = (10 + blankTask.Amount) * k - 10; double ret = (taskRes * 0.01 * 8 * 1000) / blankTask.SampleVolume; return ret; } public static double CalculateBlank(EquipmentTask task) { double k = CalculateType(task.WaveKey, TaskTypeName.CALIBRATION_ZH, (arg) => 10 / arg); double taskRes = (10 + task.Amount) * k - 10; double ret = (taskRes * 0.01 * 8 * 1000) / task.SampleVolume; return ret; } public static double CalculateSample(EquipmentTask task) { double k = CalculateType(task.WaveKey, TaskTypeName.CALIBRATION_ZH, (arg) => 10 / arg); return CalculateSample(task, k); } public static double CalculateSample(EquipmentTask task, double k) { double blank = CalculateType(task.WaveKey, TaskTypeName.BLANK_ZH, (arg) => arg); double taskRes = (10 + task.Amount) * k - 10; double blankRes = ((10 + blank) * k - 10) * task.SampleMultiple; double ret = ((taskRes - blankRes) * 0.01 * 8 * 1000) / task.SampleVolume; return ret; } public static double CalculateType(string key, string type, Func func) { List tasks = _dataManager.Query().Where(it => it.WaveKey.Equals(key) && it.TaskType.Equals(type) && it.Status.Equals(TaskState.Finished)).ToList(); if (!tasks.Any()) { tasks = _dataManager.Query().Where(it => it.TaskType.Equals(type)).With(a => a.WaveKey, b => b.WaveKey, _dataManager.Query().Where(it => it.TaskType.Equals(type) && it.Status.Equals(TaskState.Finished)).OrderBy(it => it.CreateTime, OrderPattern.Desc).Take(1), WithPattern.Equals).ToList(); if (!tasks.Any()) { return 0; } } double avg = 0; return CalculateType(tasks, func, ref avg); } public static double CalculateType(List tasks, Func func, ref double avgRes) { double volumeSum = 0.0; volumeSum = tasks.Sum(it => it.Amount); if (volumeSum.Equals(0)) { return 0; } avgRes = volumeSum / tasks.Count; double returnResult = func.Invoke(avgRes); return Math.Round(returnResult, 2); } } }