CurrentTaskViewModel.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. using Mapster;
  2. using Prism.Commands;
  3. using Prism.Events;
  4. using ProjectManagementSystem.Common.Extenions;
  5. using ProjectManagementSystem.Common.Logger;
  6. using ProjectManagementSystem.Common.Models.Crms;
  7. using ProjectManagementSystem.Common.Service;
  8. using ProjectManagementSystem.Language;
  9. using ProjectManagementSystemView.Infrastructure.Events;
  10. using ProjectManagementSystemView.Infrastructure.Extensions;
  11. using ProjectManagementSystemView.Infrastructure.Models;
  12. using System;
  13. using System.Collections.Concurrent;
  14. using System.Collections.Generic;
  15. using System.Collections.ObjectModel;
  16. using System.Linq;
  17. using System.Text;
  18. using System.Threading.Tasks;
  19. using System.Windows;
  20. namespace ProjectManagementSystemView.ViewModels
  21. {
  22. public class CurrentTaskViewModel
  23. {
  24. private ConcurrentDictionary<int, OperateInfo> operateInfoDict = new ConcurrentDictionary<int, OperateInfo>();
  25. public bool IsVisible { get; set; }
  26. public VmTaskData SelectedVmData { get; set; }
  27. public ObservableCollection<VmTaskData> VmDatas { get; set; } = new ObservableCollection<VmTaskData>();
  28. public ObservableCollection<VmStepData> StepVmDatas { get; set; } = new ObservableCollection<VmStepData>();
  29. public DelegateCommand<object> TaskCancelCommand { get; set; }
  30. public CurrentTaskViewModel(IEventAggregator eventAggregator)
  31. {
  32. TaskCancelCommand = new DelegateCommand<object>(arg =>
  33. {
  34. TaskOpreate(arg, Crms.PmsApi.TaskCancel);
  35. });
  36. eventAggregator.GetEvent<UpdateViewEvent>().Subscribe(UpdateView);
  37. }
  38. private void GetBehaviorRemark(VmStepData v)
  39. {
  40. if (operateInfoDict.TryGetValue(v.AgvBehavior, out var operateInfo1))
  41. {
  42. v.StepMoveName = $"{operateInfo1.Remark} {v.Param1}-{v.Param2}-{v.Param3}";
  43. return;
  44. }
  45. if (operateInfoDict.TryGetValue(v.PmsBehavior, out var operateInfo2))
  46. {
  47. v.StepMoveName = operateInfo2.Remark;
  48. return;
  49. }
  50. }
  51. private void UpdateView()
  52. {
  53. if (!IsVisible) return;
  54. var dataList = Crms.PmsApi.GetTaskDataList();
  55. if (dataList != null)
  56. {
  57. for (int i = 0; i < dataList.Count; i++)
  58. {
  59. var item = dataList[i];
  60. item.AllWarehouse = item.AllWarehouse.ToShortPosString();
  61. }
  62. if (operateInfoDict.Count == 0)
  63. {
  64. var operateList = Crms.PmsApi.GetOperateList(string.Empty);
  65. if (operateList != null)
  66. {
  67. foreach (var item in operateList)
  68. {
  69. operateInfoDict.AddOrUpdate(item.Code, item, (key, value) => item);
  70. }
  71. }
  72. }
  73. }
  74. VmDatas.Update(dataList, (s, v) => s.TaskID == v.TaskID,
  75. (data, vm) =>
  76. {
  77. var log1 = ProjectManagementSystem.Common.Core.TaskBehavior.GetTempLog(data.TaskID);
  78. var log2 = ProjectManagementSystem.Common.Core.AsyncBehavior.GetTempLog(data.TaskID);
  79. vm.Message = $"{log1}{log2}";
  80. });
  81. var selectedTask = SelectedVmData == null ? null : dataList?.FirstOrDefault(d => d.TaskID == SelectedVmData?.TaskID);
  82. StepVmDatas.Update(selectedTask?.StepList?.OrderBy(d => d.StepID), (s, v) => s.ID == v.ID,
  83. (data, vm) =>
  84. {
  85. GetBehaviorRemark(vm);
  86. });
  87. }
  88. private void TaskOpreate(object sender, Predicate<string> predicate)
  89. {
  90. string taskId = SelectedVmData?.TaskID;
  91. if (string.IsNullOrEmpty(taskId)) return;
  92. string allWarehouse = SelectedVmData.AllWarehouse;
  93. string text = $"{sender} {taskId}?({allWarehouse})";
  94. var dialogResult = MessageBox.Show(text, Langs.Prompt, MessageBoxButton.OKCancel, MessageBoxImage.Question, MessageBoxResult.Cancel);
  95. if (dialogResult != MessageBoxResult.OK)
  96. {
  97. return;
  98. }
  99. bool result = predicate(taskId);
  100. CLog.Instance.TaskLog.WriteInfo(Langs.CurrentTaskViewManualOperation, $"{taskId},{sender}{result.ToChineseString()}");
  101. }
  102. }
  103. }