using DevExpress.XtraEditors; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Drawing; 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.timeValueSwiftPlotChartView1.SetTimeAxisX( DevExpress.XtraCharts.DateTimeMeasureUnit.Minute); } 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; /// /// 清空数据 /// public void Clear() { } /// /// 初始化数据 /// 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) { 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(); this.timeValueSwiftPlotChartView1.ClearSeries(); if (packets != null && packets.Any()) { var total_flow_list = new List(); var total_pressure_list = new List(); var pump_total_flow_list = new List(); var diff_flow_list = new List(); foreach (var packet in packets) { var station_signal_records = packet.StationSignalRecords; if (station_signal_records == null || !station_signal_records.Any()) continue; foreach (var station in station_signal_records) { var time = station.Time; var total_flow = station.TotalFlow; var total_pressure = station.TotalPressure; var pump_total_flow = station.PumpSignalRecords.Sum(x => x.FlowRate); var diff_flow = station.DiffFlow; if (total_pressure < 0) { continue; } if (total_flow<=0&& pump_total_flow<=0) { continue; } if (pump_total_flow > 0 && Math.Abs(diff_flow) > 2000) { continue; } total_flow = Math.Round(total_flow, 1); pump_total_flow = Math.Round(pump_total_flow, 1); diff_flow = Math.Round(diff_flow, 1); total_pressure = Math.Round(total_pressure,2); if (station.PumpSignalRecords.Exists(x=>x.Rpm<0)) { continue; } total_flow_list.Add(new TimeValue(time, total_flow)); pump_total_flow_list.Add(new TimeValue(time, pump_total_flow)); diff_flow_list.Add(new TimeValue(time, diff_flow)); total_pressure_list.Add(new TimeValue(time, total_pressure)); } #region MyRegion //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); //} #endregion } this.timeValueSwiftPlotChartView1.SetAxisYTitle("流量"); this.timeValueSwiftPlotChartView1.AddSwiftPlotSeries("总压力", Color.DarkGray, "总压力", "压力", total_pressure_list); this.timeValueSwiftPlotChartView1.AddSwiftPlotSeries("总管流量", Color.Red, "总管流量", "流量", total_flow_list); this.timeValueSwiftPlotChartView1.AddSwiftPlotSeries("泵总流量", Color.Blue, "泵总流量", "流量", pump_total_flow_list); this.timeValueSwiftPlotChartView1.AddSwiftPlotSeries("偏差流量", Color.Black, "偏差流量", "流量", diff_flow_list); } 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); } #region 菜单 // 刷新数据 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 private void barBtnExportEta_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { if (_monitorDataSources == null || _station == null) { XtraMessageBox.Show("无数据!"); return; } EtaExportHelper.Export(_monitorDataSources.ID); } } }