BackUpCompareViewModel.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. using Aitex.Core.Util;
  2. using FurnaceUI.DataModule;
  3. using FurnaceUI.Models;
  4. using MECF.Framework.UI.Client.CenterViews.Configs.SystemConfig;
  5. using OpenSEMI.ClientBase.Command;
  6. using System.Collections.Generic;
  7. using System.Collections.ObjectModel;
  8. using System.Linq;
  9. using System.Threading.Tasks;
  10. namespace FurnaceUI.Views.Parameter
  11. {
  12. public class BackUpCompareViewModel : FurnaceUIViewModelBase
  13. {
  14. private List<string> _selectItemNames = new List<string>();
  15. public List<string> SelectItemNames
  16. {
  17. get { return _selectItemNames; }
  18. set { _selectItemNames = value; this.NotifyOfPropertyChange(nameof(SelectItemNames)); }
  19. }
  20. private bool _isShowAll = true;
  21. public bool IsShowAll
  22. {
  23. get { return _isShowAll; }
  24. set { _isShowAll = value; this.NotifyOfPropertyChange(nameof(IsShowAll)); }
  25. }
  26. private ObservableCollection<PageDataView> _historyTableDatas = new ObservableCollection<PageDataView>();
  27. public ObservableCollection<PageDataView> HistoryTableDatas
  28. {
  29. get { return _historyTableDatas; }
  30. set { _historyTableDatas = value; this.NotifyOfPropertyChange(nameof(HistoryTableDatas)); }
  31. }
  32. [Subscription("System.CompareFileDataA")]
  33. public Dictionary<string, string> CompareFileDataA { get; set; }
  34. [Subscription("System.SCDataLastWriteTime")]
  35. public string SCDataLastWriteTime { get; set; }
  36. [Subscription("System.CompareFileDataB")]
  37. public Dictionary<string, string> CompareFileDataB { get; set; }
  38. public BaseCommand<ConfigNode> TreeViewSelectedItemChangedCmd { private set; get; }
  39. private string _selectItemName;
  40. public string SelectItemName
  41. {
  42. get { return _selectItemName; }
  43. set { _selectItemName = value; this.NotifyOfPropertyChange(nameof(SelectItemName)); }
  44. }
  45. private bool _busyIndicatorVisibility = false;
  46. public bool BusyIndicatorVisibility
  47. {
  48. get { return _busyIndicatorVisibility; }
  49. set { _busyIndicatorVisibility = value; this.NotifyOfPropertyChange(nameof(BusyIndicatorVisibility)); }
  50. }
  51. private BackUpCompareView _view { get; set; }
  52. protected override void OnViewLoaded(object view)
  53. {
  54. base.OnViewLoaded(view);
  55. _view = view as BackUpCompareView;
  56. DelayData();
  57. ConfigNodes = SystemConfigProvider.Instance.GetConfigTree("System").SubNodes;
  58. TreeViewSelectedItemChangedCmd = new BaseCommand<ConfigNode>(TreeViewSelectedItemChanged);
  59. }
  60. private void TreeViewSelectedItemChanged(ConfigNode node)
  61. {
  62. BusyIndicatorVisibility = true;
  63. SelectItemName = string.IsNullOrEmpty(node.Path) ? node.Name : $"{node.Path}.{node.Name}.";
  64. DelayData();
  65. }
  66. async void DelayData()
  67. {
  68. BusyIndicatorVisibility = true;
  69. await WaitForResultsAsync();
  70. GetDataItem(IsShowAll);
  71. if (SelectItemNames.Count == 1)
  72. {
  73. SelectItemNames.Add(SCDataLastWriteTime);
  74. }
  75. }
  76. private async Task WaitForResultsAsync()
  77. {
  78. // Simulate waiting for results using a delay
  79. // In a real-world scenario, you might wait for an event or a specific condition
  80. await Task.Delay(300);
  81. // Here you can add logic to check if the results are ready
  82. // For example, polling or using a completion source
  83. }
  84. private void GetDataItem(bool isShowAll, string name = "")
  85. {
  86. HistoryTableDatas.Clear();
  87. if (CompareFileDataB == null || CompareFileDataA == null)
  88. {
  89. return;
  90. }
  91. if (CompareFileDataB.Count >= CompareFileDataA.Count)
  92. {
  93. foreach (var item in CompareFileDataB)
  94. {
  95. if (CompareFileDataA.ContainsKey(item.Key))
  96. {
  97. var dataItem = new PageDataView() { Name = item.Key, ValueStr = item.Value, CompareValueStr = CompareFileDataA[item.Key], IsDifference = CompareFileDataA[item.Key] != item.Value };
  98. if (isShowAll || (!isShowAll && dataItem.IsDifference))
  99. HistoryTableDatas.Add(dataItem);
  100. }
  101. else
  102. {
  103. var dataItem = new PageDataView() { Name = item.Key, ValueStr = item.Value, CompareValueStr = "", IsDifference = true };
  104. if (isShowAll || (!isShowAll && dataItem.IsDifference))
  105. HistoryTableDatas.Add(dataItem);
  106. }
  107. }
  108. }
  109. else
  110. {
  111. foreach (var item in CompareFileDataA)
  112. {
  113. if (CompareFileDataB.ContainsKey(item.Key))
  114. {
  115. var dataItem = new PageDataView() { Name = item.Key, ValueStr = item.Value, CompareValueStr = CompareFileDataB[item.Key], IsDifference = CompareFileDataB[item.Key] != item.Value };
  116. if (isShowAll || (!isShowAll && dataItem.IsDifference))
  117. HistoryTableDatas.Add(dataItem);
  118. }
  119. else
  120. {
  121. var dataItem = new PageDataView() { Name = item.Key, ValueStr = item.Value, CompareValueStr = "", IsDifference = true };
  122. if (isShowAll || (!isShowAll && dataItem.IsDifference))
  123. HistoryTableDatas.Add(dataItem);
  124. }
  125. }
  126. }
  127. if (!string.IsNullOrEmpty(SelectItemName))
  128. {
  129. HistoryTableDatas = new ObservableCollection<PageDataView>(HistoryTableDatas.Where(a => a.Name.StartsWith(SelectItemName)).ToList());
  130. }
  131. HistoryTableDatas = new ObservableCollection<PageDataView>(HistoryTableDatas.OrderByDescending(a => a.IsDifference).ToList());
  132. BusyIndicatorVisibility = false;
  133. }
  134. public void IsShowAllItemClick(object value)
  135. {
  136. IsShowAll = bool.Parse(value.ToString());
  137. GetDataItem(bool.Parse(value.ToString()));
  138. }
  139. private List<ConfigNode> _ConfigNodes = new List<ConfigNode>();
  140. public List<ConfigNode> ConfigNodes
  141. {
  142. get { return _ConfigNodes; }
  143. set { _ConfigNodes = value; NotifyOfPropertyChange("ConfigNodes"); }
  144. }
  145. protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)
  146. {
  147. base.InvokeAfterUpdateProperty(data);
  148. }
  149. }
  150. }