| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 | using System;using System.Collections.Generic;using System.Collections.ObjectModel;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Xml.Linq;using Aitex.Core.Util;using DocumentFormat.OpenXml.Drawing.Diagrams;using DocumentFormat.OpenXml.Wordprocessing;using FurnaceUI.DataModule;using FurnaceUI.Models;using MECF.Framework.Common.OperationCenter;using MECF.Framework.UI.Client.CenterViews.Configs.SystemConfig;using OpenSEMI.ClientBase.Command;using SciChart.Core.Extensions;namespace FurnaceUI.Views.Parameter{    public class BackUpCompareViewModel : FurnaceUIViewModelBase    {        private List<string> _selectItemNames = new List<string>();        public List<string> SelectItemNames        {            get { return _selectItemNames; }            set { _selectItemNames = value; this.NotifyOfPropertyChange(nameof(SelectItemNames)); }        }        private bool _isShowAll = true;        public bool IsShowAll        {            get { return _isShowAll; }            set { _isShowAll = value; this.NotifyOfPropertyChange(nameof(IsShowAll)); }        }        private ObservableCollection<PageDataView> _historyTableDatas = new ObservableCollection<PageDataView>();        public ObservableCollection<PageDataView> HistoryTableDatas        {            get { return _historyTableDatas; }            set { _historyTableDatas = value; this.NotifyOfPropertyChange(nameof(HistoryTableDatas)); }        }        [Subscription("System.CompareFileDataA")]        public Dictionary<string, string> CompareFileDataA { get; set; }        [Subscription("System.SCDataLastWriteTime")]        public string SCDataLastWriteTime { get; set; }        [Subscription("System.CompareFileDataB")]        public Dictionary<string, string> CompareFileDataB { get; set; }        public BaseCommand<ConfigNode> TreeViewSelectedItemChangedCmd { private set; get; }        private string _selectItemName;        public string SelectItemName        {            get { return _selectItemName; }            set { _selectItemName = value; this.NotifyOfPropertyChange(nameof(SelectItemName)); }        }        private bool _busyIndicatorVisibility = false;        public bool BusyIndicatorVisibility        {            get { return _busyIndicatorVisibility; }            set { _busyIndicatorVisibility = value; this.NotifyOfPropertyChange(nameof(BusyIndicatorVisibility)); }        }        private BackUpCompareView _view { get; set; }        protected override void OnViewLoaded(object view)        {            base.OnViewLoaded(view);            _view = view as BackUpCompareView;            DelayData();            ConfigNodes = SystemConfigProvider.Instance.GetConfigTree("System").SubNodes;            TreeViewSelectedItemChangedCmd = new BaseCommand<ConfigNode>(TreeViewSelectedItemChanged);        }        private void TreeViewSelectedItemChanged(ConfigNode node)        {            BusyIndicatorVisibility = true;            SelectItemName = string.IsNullOrEmpty(node.Path) ? node.Name : $"{node.Path}.{node.Name}";            DelayData();        }        async void DelayData()        {            BusyIndicatorVisibility = true;            await WaitForResultsAsync();            GetDataItem(IsShowAll);            if (SelectItemNames.Count == 1 )            {                SelectItemNames.Add(SCDataLastWriteTime);            }        }        private async Task WaitForResultsAsync()        {            // Simulate waiting for results using a delay            // In a real-world scenario, you might wait for an event or a specific condition            await Task.Delay(300);            // Here you can add logic to check if the results are ready            // For example, polling or using a completion source        }        private void GetDataItem(bool isShowAll, string name = "")        {            HistoryTableDatas.Clear();            if (CompareFileDataB == null || CompareFileDataA == null)            {                return;            }            if (CompareFileDataB.Count >= CompareFileDataA.Count)            {                foreach (var item in CompareFileDataB)                {                    if (CompareFileDataA.ContainsKey(item.Key))                    {                        var dataItem = new PageDataView() { Name = item.Key, ValueStr = item.Value, CompareValueStr = CompareFileDataA[item.Key], IsDifference = CompareFileDataA[item.Key] != item.Value };                        if (isShowAll || (!isShowAll && dataItem.IsDifference))                            HistoryTableDatas.Add(dataItem);                    }                    else                    {                        var dataItem = new PageDataView() { Name = item.Key, ValueStr = item.Value, CompareValueStr = "", IsDifference = true };                        if (isShowAll || (!isShowAll && dataItem.IsDifference))                            HistoryTableDatas.Add(dataItem);                    }                }            }            else            {                foreach (var item in CompareFileDataA)                {                    if (CompareFileDataB.ContainsKey(item.Key))                    {                        var dataItem = new PageDataView() { Name = item.Key, ValueStr = item.Value, CompareValueStr = CompareFileDataB[item.Key], IsDifference = CompareFileDataB[item.Key] != item.Value };                        if (isShowAll || (!isShowAll && dataItem.IsDifference))                            HistoryTableDatas.Add(dataItem);                    }                    else                    {                        var dataItem = new PageDataView() { Name = item.Key, ValueStr = item.Value, CompareValueStr = "", IsDifference = true };                        if (isShowAll || (!isShowAll && dataItem.IsDifference))                            HistoryTableDatas.Add(dataItem);                    }                }            }            if (!string.IsNullOrEmpty(SelectItemName))            {                HistoryTableDatas = new ObservableCollection<PageDataView>(HistoryTableDatas.Where(a => a.Name.StartsWith(SelectItemName)).ToList());            }            HistoryTableDatas = new ObservableCollection<PageDataView>(HistoryTableDatas.OrderByDescending(a => a.IsDifference).ToList());            BusyIndicatorVisibility = false;        }        public void IsShowAllItemClick(object value)        {            IsShowAll = bool.Parse(value.ToString());            GetDataItem(bool.Parse(value.ToString()));        }        private List<ConfigNode> _ConfigNodes = new List<ConfigNode>();        public List<ConfigNode> ConfigNodes        {            get { return _ConfigNodes; }            set { _ConfigNodes = value; NotifyOfPropertyChange("ConfigNodes"); }        }        protected override void InvokeAfterUpdateProperty(Dictionary<string, object> data)        {            base.InvokeAfterUpdateProperty(data);        }    }}
 |