BackUpCompareViewModel.cs 7.1 KB

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