public GetEnergyControl() { InitializeComponent(); _window = TMPApplication.ServiceInjector.Instance.GetService <TMPApplication.WpfDialogs.Contracts.IWindowWithDialogs>(); if (_window == null) { throw new ArgumentNullException("Not found Window that implementing IWindowWithDialogs"); } CancelCommand = new DelegateCommand( o => { var r = App.ShowQuestion(Strings.InterruptQuestion); if (r == MessageBoxResult.Yes) { _cts.Cancel(); App.Current.MainWindow.TaskbarItemInfo.ProgressState = System.Windows.Shell.TaskbarItemProgressState.Error; } }, o => _cts != null && (_cts.IsCancellationRequested == false)); CloseControlCommand = new DelegateCommand(o => { if (_onClosed != null) { _onClosed(); } }); SaveCommand = new DelegateCommand(o => { try { if (_list != null) { Microsoft.Win32.SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog(); sfd.Filter = Strings.DialogCsvFilter; sfd.DefaultExt = ".csv"; sfd.AddExtension = true; Nullable <bool> result = sfd.ShowDialog(App.Current.MainWindow); if (result == true) { App.Log("Сохранение данных по ПС"); StringBuilder sb = new StringBuilder(); sb.AppendLine("Ид;Родитель;Название;A+;A-;R+;R-"); foreach (var item in _list) { EnergyValues values = (EnergyValues)item.ResultValue; if (values != null && item.IsGroup == false) { sb.AppendFormat("{0};{1};{2};{3};{4};{5};{6}\n", item.Id, item.ParentTypeCode, item.Name, values.AEnergyPlus, values.AEnergyMinus, values.REnergyPlus, values.REnergyMinus); } } System.IO.File.WriteAllText(sfd.FileName, sb.ToString(), Encoding.UTF8); } } } catch (Exception ex) { _window.ShowDialogError(ex, Strings.ErrorOnSave); } }, o => _list != null && _list.Count > 0); DataContext = this; }
private void Go() { int itemsCount = _list.Where(i => i.TypeCode == "SUBSTATION").ToList().Count; App.Log("Получение суточных значений по " + itemsCount.ToString() + " подстанциям"); Action <int> report = pos => { Progress = 100d * pos / itemsCount; TMPApplication.DispatcherExtensions.InUi(() => App.Current.MainWindow.TaskbarItemInfo.ProgressValue = ((double)pos) / itemsCount); }; int index = 0; foreach (var item in _list) { item.Status = ListPointStatus.Ожидание; } // columns - POINT_ID, POINT_CODE, ML_ID, PL_T, BT, ET, PL_V, DSTATUS // 381, А+ энергия за месяц" // 382, А- энергия за месяц" // 383, R+ энергия за месяц" // 384, R- энергия за месяц" // 385, А+ энергия за сутки" // 386, А- энергия за сутки" // 387, R+ энергия за сутки" // 388, R- энергия за сутки" // 389, Средняя P+ мощность за сутки" // 390, Средняя P- мощность за сутки" // 391, Средняя Q+ мощность за сутки // 392, Средняя Q- мощность за сутки // 3489, Максимальная получасовая P- мощность за сутки // 2301, Максимальная получасовая P+ мощность за сутки // 3490, Максимальная получасовая P- мощность за месяц // 2303, Максимальная получасовая P+ мощность за месяц // 3491, Максимальная часовая P- мощность за сутки // 2305, Максимальная часовая P+ мощность за сутки // 3492, Максимальная часовая P- мощность за месяц // 2307, Максимальная часовая P+ мощность за месяц // 3497, Максимальная получасовая Q+ мощность за сутки // 3498, Максимальная получасовая Q+ мощность за месяц // 3499, Максимальная часовая Q+ мощность за сутки // 3500, Максимальная часовая Q+ мощность за месяц // 3505, Максимальная получасовая Q- мощность за сутки // 3506, Максимальная получасовая Q- мощность за месяц // 3507, Максимальная часовая Q- мощность за сутки // 3508, Максимальная часовая Q- мощность за месяц Func <List <ListPointWithResult>, EnergyValues> getResultForPoints = (points) => { decimal?aEnergyPlus = null, aEnergyMinus = null, rEnergyPlus = null, rEnergyMinus = null; var values = GetValues(points, "[{id:385},{id:386},{id:387},{id:388}]"); var aplus = values.Where(r => r.Field <decimal?>("ML_ID") == 385).ToList(); var aminus = values.Where(r => r.Field <decimal?>("ML_ID") == 386).ToList(); var rplus = values.Where(r => r.Field <decimal?>("ML_ID") == 387).ToList(); var rminus = values.Where(r => r.Field <decimal?>("ML_ID") == 388).ToList(); foreach (var point in points) { EnergyValues energy = (EnergyValues)point.ResultValue; if (energy == null) { point.ResultValue = energy = new EnergyValues(); } aEnergyPlus = GetSummOfValues(aplus, point); aEnergyMinus = GetSummOfValues(aminus, point); energy.AEnergyPlus = aEnergyPlus; energy.AEnergyMinus = aEnergyMinus; rEnergyPlus = GetSummOfValues(rplus, point); rEnergyMinus = GetSummOfValues(rminus, point); energy.REnergyPlus = rEnergyPlus; energy.REnergyMinus = rEnergyMinus; } return(new EnergyValues() { AEnergyPlus = points.Sum(i => (i.ResultValue as EnergyValues).AEnergyPlus.HasValue ? (i.ResultValue as EnergyValues).AEnergyPlus : 0), AEnergyMinus = points.Sum(i => (i.ResultValue as EnergyValues).AEnergyMinus.HasValue ? (i.ResultValue as EnergyValues).AEnergyMinus : 0), REnergyPlus = points.Sum(i => (i.ResultValue as EnergyValues).REnergyPlus.HasValue ? (i.ResultValue as EnergyValues).REnergyPlus : 0), REnergyMinus = points.Sum(i => (i.ResultValue as EnergyValues).REnergyMinus.HasValue ? (i.ResultValue as EnergyValues).REnergyMinus : 0) }); }; foreach (var item in _list) { if (_cts.IsCancellationRequested) { _cts.Token.ThrowIfCancellationRequested(); return; } if (item.TypeCode != "SUBSTATION") { continue; } item.Status = ListPointStatus.Получение; try { if (item.IsGroup) { EnergyValues energy = (EnergyValues)item.ResultValue; if (energy == null) { item.ResultValue = energy = new EnergyValues(); } var auxItems = item.Items.Where(i => i.EсpName == "Свои нужды").ToList(); var trItems = item.Items.Where(i => i.EсpName == "Трансформаторы").ToList(); if (auxItems != null && auxItems.Count > 0) { EnergyValues auxResult = getResultForPoints(auxItems); energy.AuxiliaryAPlus = auxResult.AEnergyPlus; energy.AuxiliaryAMinus = auxResult.AEnergyMinus; } if (trItems != null && trItems.Count > 0) { EnergyValues trResult = getResultForPoints(trItems); energy.AEnergyPlus = trResult.AEnergyPlus; energy.AEnergyMinus = trResult.AEnergyMinus; energy.REnergyPlus = trResult.REnergyPlus; energy.REnergyMinus = trResult.REnergyMinus; } foreach (var child in item.Items) { child.Status = ListPointStatus.Готово; } } item.ResultType = "decimal"; } catch (Exception ex) { App.Log("ЭНЕРГИЯ ОШИБКА: ид точки - " + item.Id.ToString() + ", название - " + item.Name + ", ошибка - " + App.GetExceptionDetails(ex)); item.Status = ListPointStatus.Ошибка; } item.Status = ListPointStatus.Готово; report(++index); } }