SampleRightPosViewModel.cs 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. using System;
  2. using Prism.Mvvm;
  3. using System.Linq;
  4. using Prism.Events;
  5. using Prism.Commands;
  6. using System.Windows.Media;
  7. using SHJX.Service.Common.Event;
  8. using System.Collections.Generic;
  9. using SHJX.Service.Model.EventArgs;
  10. using SHJX.Service.Common.UserColor;
  11. using SHJX.Service.Model.XmlModules;
  12. using SHJX.Service.Model.CRUDModules;
  13. using SHJX.Service.Control.Interface;
  14. using System.Collections.ObjectModel;
  15. using SHJX.Service.Model.ControlModules;
  16. using SHJX.Service.Model.Enums;
  17. using SHJX.Service.Control.Extends;
  18. namespace SHJX.Service.Main.ViewModels
  19. {
  20. public class SampleRightPosViewModel : BindableBase
  21. {
  22. #region Fields
  23. private readonly ISampleService _sampleService;
  24. #endregion
  25. #region Peoperties
  26. public ObservableCollection<SampleDetailControl> DetailControls { get; set; }
  27. #endregion
  28. public SampleRightPosViewModel(ISampleService sampleService, IEventAggregator ea)
  29. {
  30. _sampleService = sampleService;
  31. DetailControls = new ObservableCollection<SampleDetailControl>();
  32. SamplePosition leftPosition = _sampleService.GetSamplePosition("Left");
  33. SamplePosition middlePosition = _sampleService.GetSamplePosition("Middle");
  34. int startCount = leftPosition.Count + middlePosition.Count + 1;
  35. SamplePosition position = _sampleService.GetSamplePosition("Right");
  36. for (int i = 0; i < position.Count; i++)
  37. {
  38. SampleDetailControl sampleDetail = new()
  39. {
  40. Index = i,
  41. Name = $"{position.Value}{i + startCount}",
  42. TagCurrentTagNo = $"{i + startCount}"
  43. };
  44. DetailControls.Add(sampleDetail);
  45. }
  46. #region Subscribe Event
  47. ea.GetEvent<SampleDetailEvent>().Subscribe(SampleDetailReceived);
  48. ea.GetEvent<UpdateSampleDetailEvent>().Subscribe(UpdateSampleDetailReceived);
  49. ea.GetEvent<UpdateSampleDetailNullEvent>().Subscribe(UpdateSampleDetailReceivedNull);
  50. ea.GetEvent<TaskResultNoticeEvent>().Subscribe(UpdateTaskResult);
  51. ea.GetEvent<TaskFinishNoticeEvent>().Subscribe(TaskFinishNotice);
  52. ea.GetEvent<AdjustResultEvent>().Subscribe(AdjustResult);
  53. #endregion
  54. }
  55. #region Commands
  56. private DelegateCommand _loadingCommand;
  57. public DelegateCommand LoadingCommand => _loadingCommand ??= new DelegateCommand(ExecuteLoadingCommand);
  58. #endregion
  59. #region Executes
  60. private void ExecuteLoadingCommand()
  61. {
  62. List<SampleDetail> details = _sampleService.GetSampleDetailByPosition("Right");
  63. foreach (SampleDetail detail in details)
  64. {
  65. DetailControls.FirstOrDefault(item => item.Name.Equals(detail.NodeName, StringComparison.Ordinal)).SampleDetailInfo = detail.DetailInfo;
  66. DetailControls.FirstOrDefault(item => item.Name.Equals(detail.NodeName, StringComparison.Ordinal)).SampleTagColor =
  67. detail.TaskStatus.Equals(DetailState.New) ? UColor.CheckedColor : detail.TaskStatus.Equals(DetailState.Doing)
  68. ? UColor.SentColor : UColor.MainColor;
  69. }
  70. }
  71. #endregion
  72. #region Event Methods
  73. private void SampleDetailReceived(List<SampleDetail> detailArgs)
  74. {
  75. foreach (SampleDetail detailArg in detailArgs)
  76. {
  77. SampleDetailControl detail = DetailControls.FirstOrDefault(item => item.Name.Equals(detailArg.NodeName));
  78. if (detail is null)
  79. {
  80. continue;
  81. }
  82. SampleDetail sample = _sampleService.GetSampleDetailByName(detailArg.NodeName);
  83. if (sample.TaskStatus.Equals(DetailState.Doing))
  84. {
  85. continue;
  86. }
  87. sample.AcidBaseProp = detailArg.AcidBaseProp;
  88. sample.DetailInfo = detailArg.DetailInfo;
  89. sample.SampleType = detailArg.SampleType;
  90. sample.TaskStatus = detailArg.TaskStatus;
  91. sample.SampleVolume = detailArg.SampleVolume;
  92. sample.SampleMultiple = detailArg.SampleMultiple;
  93. sample.QuicklyTitration = detailArg.QuicklyTitration;
  94. sample.IsCalibration = detailArg.IsCalibration;
  95. (string detailinfo, SolidColorBrush tagColor) = detailArg.TaskStatus switch
  96. {
  97. DetailState.Init => (string.Empty, UColor.MainColor),
  98. DetailState.New => (detailArg.DetailInfo, UColor.CheckedColor),
  99. _ => throw new ArgumentException("未找到对应的枚举状态定义")
  100. };
  101. DetailControls[detail.Index].SampleTagColor = tagColor;
  102. DetailControls[detail.Index].SampleDetailInfo = detailinfo;
  103. DetailControls[detail.Index].SampleResultColor = "#000000";
  104. _sampleService.UpdateSampleDetail(sample);
  105. }
  106. }
  107. private void UpdateSampleDetailReceived(List<object> objs)
  108. {
  109. List<SampleDetailControl> details = DetailControls.Where(item => objs.Contains(item.Name)).ToList();
  110. foreach (SampleDetailControl detail in details)
  111. {
  112. DetailControls[detail.Index].SampleTagColor = UColor.SentColor;
  113. DetailControls[detail.Index].SampleDetailInfo = detail.SampleDetailInfo;
  114. }
  115. }
  116. private void UpdateSampleDetailReceivedNull(List<EquipmentArea> objs)
  117. {
  118. EquipmentArea obj = objs[0];
  119. List<SampleDetailControl> details = DetailControls.Where(item => obj.PointName.Contains(item.Name)).ToList();
  120. foreach (SampleDetailControl detail in details)
  121. {
  122. if (obj.Enable == true)
  123. {
  124. DetailControls[detail.Index].SampleTagColor = UColor.MainColor;
  125. }
  126. else
  127. {
  128. DetailControls[detail.Index].SampleTagColor = UColor.SentColor;
  129. }
  130. DetailControls[detail.Index].SampleDetailInfo = "";
  131. }
  132. }
  133. private void UpdateTaskResult(TaskResultArgs arg)
  134. {
  135. if (arg is null)
  136. {
  137. return;
  138. }
  139. SampleDetailControl detail = DetailControls.Where(item => item.Name.Equals(arg.Name)).FirstOrDefault();
  140. if (detail is null)
  141. {
  142. return;
  143. }
  144. DetailControls[detail.Index].SampleVolume = arg.Amount;
  145. DetailControls[detail.Index].SampleResult = arg.Result;
  146. DetailControls[detail.Index].SampleResultColor = arg.ResultColor;
  147. }
  148. private void TaskFinishNotice(string arg)
  149. {
  150. if (arg is null)
  151. {
  152. return;
  153. }
  154. SampleDetailControl detail = DetailControls.FirstOrDefault(item => item.Name.Equals(arg));
  155. if (detail is null)
  156. {
  157. return;
  158. }
  159. DetailControls[detail.Index].SampleTagColor = UColor.MainColor;
  160. }
  161. private void AdjustResult(AdjustResultArgs arg)
  162. {
  163. List<EquipmentTask> tasks = _sampleService.GetSampleTaskByWaveKey(arg.Key, "Right");
  164. foreach (EquipmentTask task in tasks)
  165. {
  166. SampleDetailControl detail = DetailControls.Where(item => item.Name.Equals(task.Source)).FirstOrDefault();
  167. if (detail is null)
  168. {
  169. continue;
  170. }
  171. task.Result = CalculationResult.CalculateSample(task, arg.Value);
  172. _sampleService.UpdateResult(task);
  173. DetailControls[detail.Index].SampleResult = task.Result.ToString("F2");
  174. }
  175. }
  176. #endregion
  177. }
  178. }