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);
}
}
}