public BalanceSubstationView(IBalance balance) { _balance = balance; _task = new Task(() => { //System.Threading.Thread.Sleep(5000); table.Dispatcher.BeginInvoke( new Action(delegate() { table.BeginInit(); Create_tableColumns(); //ate = State.Idle; table.ItemsSource = _balance.Items; table.EndInit(); IsBusy = false; })); }); _task.ContinueWith((t) => { //State = State.Idle; EmcosSiteWrapperApp.LogError("Просмотр баланса подстанции - ошибка: " + t.Exception.Message); EmcosSiteWrapperApp.ShowError("Произошла ошибка.\n" + t.Exception.Message); }, TaskContinuationOptions.OnlyOnFaulted); InitializeComponent(); _task.Start(); DataContext = this; rootGrid.DataContext = _balance; _balance.PropertyChanged += Balance_PropertyChanged; }
private void GetEmcosArchivesForSubstations() { EmcosSiteWrapperApp.LogInfo("Получение архивных данных"); Status = State.Busy; DialogMessage = "Получение архивных данных ..."; EmcosSiteWrapperApp.LogInfo("Сохранение текущей сессии"); Repository.SaveBackup(); _cts = new System.Threading.CancellationTokenSource(); IsCancel = false; IsGettingData = true; try { var task = EmcosSiteWrapper.Instance.ExecuteAction(_cts, GetSubstationsDaysArchives); task.ContinueWith((s) => { EmcosSiteWrapperApp.LogInfo("Выполнено получение архивных данных"); try { DispatcherExtensions.InUi(() => ShowDialogInfo("Выполнено. ")); IsGettingData = false; Status = State.Ready; /*RaisePropertyChanged("HasData"); * RaisePropertyChanged("SubstationsTree"); * RaisePropertyChanged("WindowTitle");*/ } catch (Exception ex) { EmcosSiteWrapperApp.LogError("Получение данных. Ошибка - " + ex.Message); } }, System.Threading.Tasks.TaskContinuationOptions.OnlyOnRanToCompletion); task.ContinueWith((s) => { EmcosSiteWrapperApp.LogInfo("Прервано получение архивных данных"); ShowDialogWarning("Прервано. "); IsGettingData = false; Status = State.Ready; /*RaisePropertyChanged("HasData"); * RaisePropertyChanged("SubstationsTree"); * RaisePropertyChanged("WindowTitle");*/ }, System.Threading.Tasks.TaskContinuationOptions.OnlyOnFaulted); } catch (Exception ex) { EmcosSiteWrapperApp.LogError("Получение архивных данных. Ошибка - " + ex.Message); ShowDialogError("Произошла ошибка.\n" + ex.Message, Title); IsGettingData = false; } }
/// <summary> /// Список точек с расходом для программы 'Balans' /// </summary> private void BalanceExport() { if (HasData == false) { EmcosSiteWrapperApp.ShowWarning("Отсутствуют данные."); return; } Status = State.Busy; DialogMessage = "Экспорт данных: Список точек с расходом для программы 'Balans'"; var fileName = CreateNameForReport("ForBalance"); var task = new System.Threading.Tasks.Task(() => { var be = new Export.ForBalanceExport( new Export.ExportInfo { Title = "Данные для програмы Balance", StartDate = Session.Info.Period.StartDate, EndDate = Session.Info.Period.EndDate, Substations = Substations }); DispatcherExtensions.InUi(() => { if (be.Export(fileName) == false) { return; } }); System.Diagnostics.Process.Start(fileName); }); task.ContinueWith((t) => { Status = State.Ready; }, System.Threading.Tasks.TaskContinuationOptions.None); task.ContinueWith((s) => { EmcosSiteWrapperApp.LogError("Экспорт для программы 'Balance' - ошибка"); EmcosSiteWrapperApp.LogException(s.Exception); ShowDialogError("Произошла ошибка при формировании отчёта.\nОбратитесь к разработчику."); }, System.Threading.Tasks.TaskContinuationOptions.OnlyOnFaulted); task.Start(System.Threading.Tasks.TaskScheduler.Current); }
private void Export_Click(object sender, RoutedEventArgs e) { //State = State.Busy; //wait.Message = "Пожалуйста, подождите..\nПодготовка отчёта..."; var task = new System.Threading.Tasks.Task(() => { var reportFileName = System.IO.Path.Combine(System.IO.Path.GetTempPath(), _balance.Substation.Name + ".xlsx"); int index = 0; while (System.IO.File.Exists(reportFileName) == true) { try { System.IO.File.Delete(reportFileName); } catch (System.IO.IOException) { reportFileName = System.IO.Path.Combine(System.IO.Path.GetTempPath(), _balance.Substation.Name + " " + ++index + ".xlsx"); } } using (var sbe = new Export.SubstationExport(_balance)) sbe.Export(reportFileName); System.Diagnostics.Process.Start(reportFileName); //State = State.Idle; //DispatcherExtensions.InUi(() => wait.Message = "Пожалуйста, подождите..\nПодготовка данных."); }, System.Threading.Tasks.TaskCreationOptions.AttachedToParent); task.ContinueWith((s) => { var sb = new System.Text.StringBuilder(); Exception ex = s.Exception.Flatten(); while (ex != null) { if (ex.InnerException != null) { sb.AppendLine(ex.InnerException.Message); ex = ex.InnerException; } } EmcosSiteWrapperApp.LogError("Экспорт балансов подстанций - ошибка: " + sb.ToString()); DispatcherExtensions.InUi(() => EmcosSiteWrapperApp.ShowError("Произошла ошибка при формировании отчёта.\nОбратитесь к разработчику.")); }, System.Threading.Tasks.TaskContinuationOptions.OnlyOnFaulted); task.Start(System.Threading.Tasks.TaskScheduler.Current); }
private void UpdateData_Click(object sender, RoutedEventArgs e) { var btn = sender as Button; if (btn == null) { return; } //string dir = btn.Tag as String; //if (String.IsNullOrWhiteSpace(dir)) return; var item = rootGrid.DataContext as Model.Balance.IBalanceItem; //wait.Message = "Пожалуйста, подождите ...\nОбновление данных."; var cts = new System.Threading.CancellationTokenSource(); var task = EmcosSiteWrapper.Instance.ExecuteAction(cts, () => { //State = State.Busy; try { Emcos.Utils.GetBalanceItemArchiveData(item, _period.StartDate, _period.EndDate, cts); } catch (Exception ex) { EmcosSiteWrapperApp.LogError(String.Format("Обновление данных по точке ({0}). Произошла ошибка: {1}", item.Name, ex.Message)); //State = State.Idle; } DispatcherExtensions.InUi(() => { //Progress = 0; }); //State = State.Idle; }); }
/// <summary> /// Баланс подстанций /// </summary> private void ExportSubstationsBalance() { if (HasData == false) { EmcosSiteWrapperApp.ShowWarning("Отсутствуют данные."); return; } Status = State.Busy; DialogMessage = "Экспорт данных: Баланс подстанций"; var dialog = ShowDialogQuestion( String.Format("Скопировать файл отчёта в папку '{0}'?", Properties.Settings.Default.ReportBalancePSFolder), Title, TMPApplication.WpfDialogs.DialogMode.YesNo); var r = dialog.Result; var task = new System.Threading.Tasks.Task(() => { var defaultFileName = CreateNameForReport("out"); var sbe = new Export.SubstationsBalanceExport( new Export.ExportInfo { Title = "Отчёт по балансам подстанций", StartDate = Session.Info.Period.StartDate, EndDate = Session.Info.Period.EndDate, Substations = Substations }); DispatcherExtensions.InUi(() => { if (sbe.Export(defaultFileName) == false) { return; } }); if (r == TMPApplication.WpfDialogs.DialogResultState.Yes) { if (System.IO.Directory.Exists(Properties.Settings.Default.ReportBalancePSFolder) == false) { try { System.IO.Directory.CreateDirectory(Properties.Settings.Default.ReportBalancePSFolder); } catch (System.IO.IOException ioe) { ShowDialogError(String.Format("Папка {0} не найдена. При попытке её создать произошла ошибка: {1}.\nФайл отчёта не скопирован.", Properties.Settings.Default.ReportBalancePSFolder, ioe.Message)); } } var filename = System.IO.Path.Combine( Properties.Settings.Default.ReportBalancePSFolder, String.Format(Properties.Settings.Default.ReportBalancePSFileNameTemplate, Session.Info.Period.StartDate) + ".xlsx"); System.IO.File.Copy(defaultFileName, filename, true); System.Diagnostics.Process.Start(filename); } else { System.Diagnostics.Process.Start(defaultFileName); } }, System.Threading.Tasks.TaskCreationOptions.AttachedToParent); task.ContinueWith((t) => { Status = State.Ready; }, System.Threading.Tasks.TaskContinuationOptions.None); task.ContinueWith((s) => { EmcosSiteWrapperApp.LogError("Экспорт балансов подстанций - ошибка"); EmcosSiteWrapperApp.LogException(s.Exception); ShowDialogError("Произошла ошибка при формировании отчёта.\nОбратитесь к разработчику."); }, System.Threading.Tasks.TaskContinuationOptions.OnlyOnFaulted); task.Start(System.Threading.Tasks.TaskScheduler.Current); }
private void InitCommands(System.Windows.Window window) { // Редактор конфигурации PointsEditorCommand = new DelegateCommand(() => { DialogMessage = "Редактор конфигурации"; var pe = new Controls.PointsEditor(Repository.ConfigPoints, Repository.ConfigOtherPoints, this.Window); var dialog = this.CreateDialogCustom(pe, TMPApplication.WpfDialogs.DialogMode.Ok); dialog.Caption = DialogMessage; dialog.CloseBehavior = TMPApplication.WpfDialogs.DialogCloseBehavior.ExplicitClose; dialog.OkText = "Закрыть"; dialog.Ok = () => { dialog.Close(); this.ShowDialogWaitingScreen("Применение конфигурации"); // сохранить конфигурацию if (Repository.SaveConfiguration() == false) { EmcosSiteWrapperApp.LogWarning("Конфигурация не сохранена"); } else { EmcosSiteWrapperApp.LogWarning("Конфигурация сохранена"); } // обновить формулы групп в сессии foreach (IHierarchicalEmcosPoint point in pe.EmcosPoints.FlatItemsList) { if (point is IBalanceGroupItem balanceGroupItem) { Repository.UpdateGroupBalanceFormula(balanceGroupItem.Id, balanceGroupItem.Formula); } } // если появились новые точки - добавить точки в сессию и получить данные if (pe.NewPoints != null && pe.NewPoints.Count > 1) { ; } if (pe.DeletedPoints != null && pe.DeletedPoints.Count > 1) { ; } // пересчёт баланса var balanceGroups = Repository.ActiveSession.BalancePoints.FlatItemsList .Where(p => (p.TypeCode == "SUBSTATION" || p.ElementType == ElementTypes.SUBSTATION) || (p.TypeCode == "SECTIONBUS" || p.ElementType == ElementTypes.SECTION)); foreach (IBalanceGroupItem group in balanceGroups) { group.RecalculateBalance(); } this.CloseDialog(); }; dialog.Show(); }); // GetDataCommand = new DelegateCommand(GetEmcosArchivesForSubstations); // Сохранение данных SaveDataCommand = new DelegateCommand(() => { var result = U.InputBox("Сохранение", "Укажите название сессии", Session.Info.Period.GetFileNameForSaveSession()); if (String.IsNullOrWhiteSpace(result) == true) { return; } Repository.SaveAs(result); Repository.FillSessionsList(); }, (o) => (IsSessionLoadedAdnPeriodSelected)); // Выбор сессии SelectSessionCommand = new DelegateCommand(() => { CloseDialog(); DialogMessage = "Выбор сессии ..."; Repository.FillSessionsList(); Controls.SessionManager sm = new Controls.SessionManager(Repository); var dialog = this.CreateDialogCustom(sm, TMPApplication.WpfDialogs.DialogMode.YesNoCancel); dialog.Caption = DialogMessage; dialog.CloseBehavior = TMPApplication.WpfDialogs.DialogCloseBehavior.ExplicitClose; void closeDialogAction() { dialog.Close(); } dialog.YesText = "Загрузить"; dialog.Yes = () => { if (sm.SelectedSessionInfo == null) { ShowDialogWarning("Необходимо выбрать сессию из списка!", DialogMessage); return; } else { if (_repository.LoadFromFile(sm.SelectedSessionInfo.FileName) == false) { TMPApp.ShowWarning("Не удалось загрузить сессию."); } else { closeDialogAction(); } } }; dialog.NoText = "Новая"; dialog.No = () => { _repository.CreateEmptySession(); closeDialogAction(); }; dialog.CancelText = "Закрыть"; dialog.Cancel = () => { closeDialogAction(); }; dialog.Show(); }); CancelCommand = new DelegateCommand(() => { IsCancel = true; _cts.Cancel(); }, (o) => !IsCancel); // Детальная информация об элементе ViewDetailsCommand = new DelegateCommand(() => { ShowDetails(SelectedBalanceItem.ElementType); }, (o) => SelectedBalanceItem != null); ExportList = new List <ICommand> { new DelegateCommand(() => ExportSubstationsBalance(), (o) => (IsSessionLoadedAdnPeriodSelected), "Баланс подстанций"), new DelegateCommand(() => BalanceExport(), (o) => (IsSessionLoadedAdnPeriodSelected), "Для программы 'Balance'"), new DelegateCommand(() => ExportFiderAnaliz(), (o) => (IsSessionLoadedAdnPeriodSelected), "Для пофидерного анализа") }; OpenAuxiliaryReportCommand = new DelegateCommand(() => { IList <AuxiliaryReportItem> model = new List <Model.AuxiliaryReportItem>(); var list = Substations .GroupBy(i => i.Departament, i => i, (k, g) => new { Departament = k, Substations = g.ToList() }) .OrderBy(i => i.Departament) .ToList(); foreach (var item in list) { var departament = item.Departament; var dep = new AuxiliaryReportItem { Name = departament, Type = "Departament", Children = new List <AuxiliaryReportItem>() }; foreach (Model.Balance.Substation substation in item.Substations) { var sub = new AuxiliaryReportItem { Children = new List <AuxiliaryReportItem>(), Name = substation.Name, Type = "Substation" }; foreach (Model.Balance.IBalanceItem BalanceItem in substation.Items) { if (BalanceItem.ElementType == ElementTypes.UNITTRANSFORMER || BalanceItem.ElementType == ElementTypes.UNITTRANSFORMERBUS) { sub.Children.Add(new AuxiliaryReportItem { Name = BalanceItem.Name, APlus = BalanceItem.ActiveEnergy.Plus.Value, AMinus = BalanceItem.ActiveEnergy.Minus.Value, RPlus = BalanceItem.ReactiveEnergy.Plus.Value, RMinus = BalanceItem.ReactiveEnergy.Minus.Value, }); } } dep.Children.Add(sub); } model.Add(dep); } var arw = new AuxiliaryReportWindow(new AuxiliaryReportTreeModel(model)) { Owner = Window as System.Windows.Window, ShowInTaskbar = false }; arw.ShowDialog(); }, (o) => IsSessionLoadedAdnPeriodSelected); bool canExecuteUpdateSubstationDataCommand(object o) { if (SelectedBalanceItem == null) { return(false); } if (SelectedBalanceItem is Model.Balance.IBalanceGroupItem && (SelectedBalanceItem as Model.Balance.IBalanceGroupItem).ElementType == ElementTypes.SUBSTATION) { return(true); } else { return(false); } } UpdateSubstationDataCommand = new DelegateCommand(() => { IProgressDialog progressDialog = ShowDialogProgress("Обновление данных по подстанции ...") as IProgressDialog; DispatcherExtensions.InUi(() => { (Window as System.Windows.Window).TaskbarItemInfo.ProgressState = System.Windows.Shell.TaskbarItemProgressState.Normal; (Window as System.Windows.Window).TaskbarItemInfo.ProgressValue = 0; }); var substation = SelectedBalanceItem as Model.Balance.Substation; if (substation == null) { return; } substation.ClearData(); Action oncompleted = () => { Status = State.Ready; //vm.IsGettingData = false; /*RaisePropertyChanged("HasData"); * RaisePropertyChanged("SubstationsTree"); * RaisePropertyChanged("WindowTitle");*/ }; void updateCallBack(int current, int total) { DispatcherExtensions.InUi(() => { progressDialog.Progress = 100 * current / total; (Window as System.Windows.Window).TaskbarItemInfo.ProgressValue = ((double)current) / total; }); } try { Status = State.Busy; IsGettingData = true; IsCancel = false; _cts = new System.Threading.CancellationTokenSource(); substation.Status = Model.DataStatus.Wait; var task = System.Threading.Tasks.Task.Factory.StartNew(() => Emcos.Utils.GetArchiveDataForSubstation(Session.Info.Period.StartDate, Session.Info.Period.EndDate, substation, _cts, updateCallBack), _cts.Token); task.ContinueWith((s) => { if (s.Result == true) { DispatcherExtensions.InUi(() => ShowDialogInfo("Выполнено. ")); } else { CheckOnError(); } oncompleted(); }, System.Threading.Tasks.TaskContinuationOptions.OnlyOnRanToCompletion); task.ContinueWith((s) => { DispatcherExtensions.InUi(() => ShowDialogError("Произошла ошибка.\n" + s.Exception)); oncompleted(); }, System.Threading.Tasks.TaskContinuationOptions.OnlyOnFaulted); } catch (Exception e) { EmcosSiteWrapperApp.LogError(String.Format("Обновление данных [{0}]. Ошибка - {1}", substation.Code, e.Message)); ShowDialogError("Произошла ошибка.\n" + e.Message); oncompleted(); } }, canExecuteUpdateSubstationDataCommand); SetSubstationToUseMonthValueCommand = new DelegateCommand((o) => { System.Windows.Controls.MenuItem menuItem = o as System.Windows.Controls.MenuItem; if (menuItem == null) { return; } var substation = SelectedBalanceItem as Model.Balance.Substation; if (substation == null) { return; } else { substation.UseMonthValue = menuItem.IsChecked; } }, canExecuteUpdateSubstationDataCommand); }