TitrationKMnO.cs 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. using SHJX.Service.Control.Extends;
  2. using SHJX.Service.Control.LiquidHandler;
  3. namespace SHJX.Service.Control.Pipeline.Nodes.LiquidNode
  4. {
  5. /// <summary>
  6. /// 高锰酸钾
  7. /// </summary>`
  8. public class TitrationKMnO : INode
  9. {
  10. #region Fields
  11. private static TaskExtend _taskExtend;
  12. private static IDataManager _dataManager;
  13. private static TitrationValue _titrationValue;
  14. private static LiquidAmount _liquidAmount;
  15. #endregion
  16. public TitrationKMnO(TaskExtend taskExtend, IDataManager dataManager)
  17. {
  18. Name = nameof(TitrationKMnO);
  19. _taskExtend = taskExtend;
  20. _dataManager = dataManager;
  21. _titrationValue = dataManager.Query<TitrationValue>().First();
  22. _liquidAmount = dataManager.Query<LiquidAmount>().Where(it => it.LiquidName.Equals(EquipmentNames.Titration1PotassiumPermanganate)).First();
  23. }
  24. private static bool flag = true; //重新计算空白值
  25. public override INode Invoke()
  26. {
  27. ExecuteCommand.ShowStatusOpenClose(CurrentTask, "1号滴定位滴定(开始)");
  28. LiquidContent.StartNew.Execute(EquipmentNames.Titration1PotassiumPermanganate, CurrentTask.RouteType, (object obj) =>
  29. {
  30. CurrentTask.Amount += Convert.ToDouble(obj);
  31. if (CurrentTask.TaskType.Equals("样品", StringComparison.Ordinal))
  32. {
  33. CurrentTask.Result = CalculationResult.CalculateSample(CurrentTask);
  34. }
  35. if (CurrentTask.TaskType.Equals("空白", StringComparison.Ordinal))
  36. {
  37. CurrentTask.Result = CalculationResult.CalculateBlank(CurrentTask);
  38. }
  39. _dataManager.Update(CurrentTask);
  40. if (CurrentTask.TaskType.BeIn("样品", "空白"))
  41. {
  42. TaskResultArgs resultArgs = new()
  43. {
  44. Name = CurrentTask.Source,
  45. Amount = CurrentTask.Amount.ToString("F2"),
  46. Result = CurrentTask.Result.ToString("F2")
  47. };
  48. if (CurrentTask.TaskType.Equals("样品") && CurrentTask.Amount > 6.3)
  49. {
  50. resultArgs.ResultColor = "#FF0000";
  51. }
  52. Messager<TaskResultArgs>.Send("TaskResult", resultArgs);
  53. }
  54. if (CurrentTask.TaskType.Equals("标定"))
  55. {
  56. // 1) 标定:任务提前完成
  57. CurrentTask.Status = TaskState.Finished;
  58. _dataManager.Update(CurrentTask);
  59. List<EquipmentTask> blankTasks = _dataManager.Query<EquipmentTask>().Where(it => it.WaveKey.Equals(CurrentTask.WaveKey) && it.TaskType.Equals(TaskTypeName.BLANK_ZH) && it.Status.In(TaskState.Execute,TaskState.Finished)).ToList();
  60. foreach (var blankTask in blankTasks)
  61. {
  62. // 1)提前完成是为了这里遍历
  63. var refreshResult = CalculationResult.CalculateCalibration(blankTask);
  64. TaskResultArgs resultArgs = new()
  65. {
  66. Name = blankTask.Source,
  67. Amount = blankTask.Amount.ToString("F2"),
  68. Result = refreshResult.ToString("F2")
  69. };
  70. blankTask.Result = refreshResult;
  71. _dataManager.Update(blankTask);
  72. CurrentTask.Result = blankTask.Result;
  73. Messager<TaskResultArgs>.Send("TaskResult", resultArgs);
  74. }
  75. }
  76. }, CurrentTask.QuicklyTitration, CurrentTask.TaskType);
  77. ExecuteCommand.ShowStatusOpenClose(CurrentTask, "1号滴定位滴定(结束)");
  78. return this;
  79. }
  80. }
  81. }