CalculationResult.cs 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. namespace SHJX.Service.Control.Extends
  2. {
  3. /// <summary>
  4. /// 计算结果
  5. /// </summary>
  6. public class CalculationResult
  7. {
  8. private static IDataManager _dataManager;
  9. public CalculationResult(IDataManager dataManager)
  10. {
  11. _dataManager = dataManager;
  12. }
  13. public static double CalculateCalibration(EquipmentTask task)
  14. {
  15. double k = CalculateType(task.WaveKey, TaskTypeName.CALIBRATION_ZH, (arg) => 10 / arg);
  16. EquipmentTask blankTask = _dataManager.Query<EquipmentTask>().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();
  17. double taskRes = (10 + blankTask.Amount) * k - 10;
  18. double ret = (taskRes * 0.01 * 8 * 1000) / blankTask.SampleVolume;
  19. return ret;
  20. }
  21. public static double CalculateBlank(EquipmentTask task)
  22. {
  23. double k = CalculateType(task.WaveKey, TaskTypeName.CALIBRATION_ZH, (arg) => 10 / arg);
  24. double taskRes = (10 + task.Amount) * k - 10;
  25. double ret = (taskRes * 0.01 * 8 * 1000) / task.SampleVolume;
  26. return ret;
  27. }
  28. public static double CalculateSample(EquipmentTask task)
  29. {
  30. double k = CalculateType(task.WaveKey, TaskTypeName.CALIBRATION_ZH, (arg) => 10 / arg);
  31. return CalculateSample(task, k);
  32. }
  33. public static double CalculateSample(EquipmentTask task, double k)
  34. {
  35. double blank = CalculateType(task.WaveKey, TaskTypeName.BLANK_ZH, (arg) => arg);
  36. double taskRes = (10 + task.Amount) * k - 10;
  37. double blankRes = ((10 + blank) * k - 10) * task.SampleMultiple;
  38. double ret = ((taskRes - blankRes) * 0.01 * 8 * 1000) / task.SampleVolume;
  39. return ret;
  40. }
  41. public static double CalculateType(string key, string type, Func<double, double> func)
  42. {
  43. List<EquipmentTask> tasks = _dataManager.Query<EquipmentTask>().Where(it => it.WaveKey.Equals(key) && it.TaskType.Equals(type) && it.Status.Equals(TaskState.Finished)).ToList();
  44. if (!tasks.Any())
  45. {
  46. tasks = _dataManager.Query<EquipmentTask>().Where(it => it.TaskType.Equals(type)).With(a => a.WaveKey, b => b.WaveKey, _dataManager.Query<EquipmentTask>().Where(it => it.TaskType.Equals(type) && it.Status.Equals(TaskState.Finished)).OrderBy(it => it.CreateTime, OrderPattern.Desc).Take(1), WithPattern.Equals).ToList();
  47. if (!tasks.Any())
  48. {
  49. return 0;
  50. }
  51. }
  52. double avg = 0;
  53. return CalculateType(tasks, func, ref avg);
  54. }
  55. public static double CalculateType(List<EquipmentTask> tasks, Func<double, double> func, ref double avgRes)
  56. {
  57. double volumeSum = 0.0;
  58. volumeSum = tasks.Sum(it => it.Amount);
  59. if (volumeSum.Equals(0))
  60. {
  61. return 0;
  62. }
  63. avgRes = volumeSum / tasks.Count;
  64. double returnResult = func.Invoke(avgRes);
  65. return Math.Round(returnResult, 2);
  66. }
  67. }
  68. }