using DevExpress.XtraEditors; using DevExpress.XtraGrid.Views.Grid.ViewInfo; using MathNet.Numerics; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms; namespace IStation.WinFrmUI.Monitor { public partial class DataIntegrationPage : DocumentPage { public DataIntegrationPage() { InitializeComponent(); this.PageTitle.Caption = "数据整合"; this.stationListCtrl1.FocusedChangedEvent += StationListCtrl1_FocusedChangedEvent; this.monitorDataSourcesTreeList1.FocusedChangedEvent += MonitorDataSourcesListCtrl1_FocusedChangedEvent; this.gridView1.SetNormalView(); this.colTime.DisplayFormat.FormatType = DevExpress.Utils.FormatType.DateTime; this.colTime.DisplayFormat.FormatString = "G"; } public class CurrentViewModel { [Display(Name = "年月")] public string YearMonth { get; set; } [Display(Name = "时间")] public DateTime Time { get; set; } [Display(Name = "运行工况")] public string RunFlags { get; set; } [Display(Name = "转速列表")] public string RpmList { get; set; } [Display(Name = "扬程列表")] public string HeadList { get; set; } [Display(Name = "总流量")] public double TotalFlow { get; set; } [Display(Name = "总功率")] public double TotalPower { get; set; } } private BLL.StationSignalRecordPacket _bll = new BLL.StationSignalRecordPacket(); private Model.Station _station = null; private Model.MonitorDataSources _monitorDataSources = null; private List _allBindingList = null; /// /// 清空数据 /// public void Clear() { _allBindingList = new List(); this.currentViewModelBindingSource.DataSource = _allBindingList; } /// /// 初始化数据 /// public override void InitialDataSource() { this.stationListCtrl1.SetBindingData(); this.monitorDataSourcesTreeList1.SetBindingData(); } //泵站变换 private void StationListCtrl1_FocusedChangedEvent(Model.Station obj) { _station = obj; SetBindingData(_monitorDataSources, _station); } //来源变换 private void MonitorDataSourcesListCtrl1_FocusedChangedEvent(Model.MonitorDataSources obj) { _monitorDataSources = obj; SetBindingData(_monitorDataSources, _station); } /// /// 绑定数据 /// public void SetBindingData(Model.MonitorDataSources monitorDataSources, Model.Station station) { _allBindingList = new List(); this.currentViewModelBindingSource.DataSource = _allBindingList; if (monitorDataSources == null || station == null) { return; } if (this.barCekLoad.Checked) { return; } var packets = _bll.Get(_monitorDataSources.ID, _station.ID); SetBindingData(packets); } /// /// 绑定数据 /// public void SetBindingData(List packets) { WaitFrmHelper.ShowWaitForm(); _allBindingList = new List(); if (packets != null && packets.Any()) { foreach (var packet in packets) { var station_signal_records = packet.StationSignalRecords; if (station_signal_records == null || !station_signal_records.Any()) continue; var year_month = $"{packet.Year}-{packet.Month}"; foreach (var record in station_signal_records) { var pump_signal_records = record.PumpSignalRecords; if (pump_signal_records == null || !pump_signal_records.Any()) continue; pump_signal_records = pump_signal_records.OrderBy(x => x.Flag).ToList(); var total_power = pump_signal_records.Sum(x => x.InstantaneousPower); var run_flags = pump_signal_records.Select(x => x.Flag).ToList(); var rpm_list = pump_signal_records.Select(x => { if (x.Rpm == 0 && (x.Flag == 15 || x.Flag == 16)) { return 590; } return x.Rpm; }).ToList(); var head_list = pump_signal_records.Select(x => { return Math.Round(x.Head, 2); }).ToList(); var vm = new CurrentViewModel(); vm.YearMonth = year_month; vm.Time = record.Time; vm.RunFlags = IStation.Untity.IntListHelper.ToString(run_flags); vm.RpmList = IStation.Untity.DoubleListHelper.ToString(rpm_list); vm.HeadList = IStation.Untity.DoubleListHelper.ToString(head_list); vm.TotalPower = Math.Round(total_power, 1); _allBindingList.Add(vm); } } } this.currentViewModelBindingSource.DataSource = _allBindingList; WaitFrmHelper.HideWaitForm(); } //整合 private void barBtnIntegration_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_monitorDataSources == null || _station == null) return; var dlg = new SetTimeStepDlg(); dlg.ReloadDataEvent += (timeStep) => { Task.Run(() => { this.Invoke(new Action(() => { AlertTool.ShowInfo(Application.OpenForms[0], "提示", "开始整合!"); })); var packets = _bll.AnalysisAndSave(_monitorDataSources.ID, _station.ID, timeStep); this.Invoke(new Action(() => { SetBindingData(packets); AlertTool.ShowInfo(Application.OpenForms[0], "提示", "整合完成!"); })); }); }; dlg.ShowDialog(); } // private void barCekLoad_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { SetBindingData(_monitorDataSources, _station); } //自定义组名 private void gridView1_CustomDrawGroupRow(object sender, DevExpress.XtraGrid.Views.Base.RowObjectCustomDrawEventArgs e) { var vm = this.gridView1.GetRow(e.RowHandle) as CurrentViewModel; var grid = e.Info as GridGroupRowInfo; if (grid.Level == 0) { grid.GroupText = vm.YearMonth; } else if (grid.Level == 1) { grid.GroupText = vm.RunFlags; } } #region 菜单 //全部展开 private void barBtnExpandAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.gridView1.ExpandAllGroups(); } //全部折叠 private void barBtnCollapseAll_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { this.gridView1.CollapseAllGroups(); } //检索 private void barCekSearch_CheckedChanged(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (this.barCekSearch.Checked) this.gridView1.ShowFindPanel(); else this.gridView1.HideFindPanel(); } // 刷新数据 private void barBtnRefresh_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { InitialDataSource(); } #endregion #region 导出 private void barBtnExportEpanet_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_monitorDataSources == null || _station == null) { XtraMessageBox.Show("无数据!"); return; } var dlg = new SetTimeStepDlg(); dlg.SetBindingData(300); dlg.ReloadDataEvent += (timeStep) => { WaitFrmHelper.ShowWaitForm("正在导出"); ExportEpanetHelper.Export(_monitorDataSources.ID, _station.ID, timeStep); WaitFrmHelper.HideWaitForm(); AlertTool.ShowInfo(System.Windows.Forms.Application.OpenForms[0], "提示", "导出完成!"); }; dlg.ShowDialog(); } private void barBtnExportWaterDesk_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_monitorDataSources == null || _station == null) { XtraMessageBox.Show("无数据!"); return; } var dlg = new SetTimeStepDlg(); dlg.SetBindingData(300); dlg.ReloadDataEvent += (timeStep) => { WaitFrmHelper.ShowWaitForm("正在导出"); ExportWaterDeskHelper.Export(_monitorDataSources.ID, _station.ID, timeStep); WaitFrmHelper.HideWaitForm(); AlertTool.ShowInfo(System.Windows.Forms.Application.OpenForms[0], "提示", "导出完成!"); }; dlg.ShowDialog(); } #endregion } }