using DevExpress.XtraCharts; using DevExpress.XtraEditors; using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using System.Data; using System.IO; using Yw; using Yw.WinFrmUI; namespace IBox.WinFrmUI { public partial class IBoxFormMonitor : DocumentPage { //Stopwatch sw = new Stopwatch(); //string swstr=string.Empty; private List monitorValueAlarmRecords = new List(); private List dataGridMonitorViewModels = new List(); private List pumpRunStatusModels = new List(); private List pumpEnergyViewModels = new List(); public void HideButton() { layoutControlItem10.Visibility = layoutControlItem3.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; } public IBoxFormMonitor() { this.PageTitle.Caption = "实时监测"; InitializeComponent(); this.gridView1.SetNormalView(); this.dateEdit1.Text = DateTime.Now.ToString("yyyy-MM-dd"); this.dateEdit2.Text = DateTime.Now.ToString("yyyy-MM-dd"); _points.View.Color = Color.Red; _points.CrosshairEnabled = DevExpress.Utils.DefaultBoolean.False; _points.ShowInLegend = false; _line.ShowInLegend = true; } private void EboxForm_Load(object sender, EventArgs e) { Thread.Sleep(500); SendText(IBoxHelper.startCode + IBoxHelper.getbaseCode + IBoxHelper.paramCode + IBoxHelper.endCode); _diagram.EnableAxisXScrolling = true; _diagram.EnableAxisYScrolling = true; _diagram.EnableAxisXZooming = true; _diagram.EnableAxisYZooming = true; //SetTimer(); } public void SetAlarmByDay(string l, bool isBlue = true) { var getalarmbydaylist = new List(); if (!string.IsNullOrEmpty(l)) { var c = l.Split('|'); foreach (var item in c) { var ml = new MonitorValueAlarmRecord().FromString(item); getalarmbydaylist.Add(ml); } monitorValueAlarmRecords = getalarmbydaylist; } if (isBlue) { this.Invoke(new Action(() => { this.monitorValueAlarmRecordBindingSource.DataSource = monitorValueAlarmRecords; })); } else { this.monitorValueAlarmRecordBindingSource.DataSource = monitorValueAlarmRecords; } } public void SetRealRecord(List getrealrecordlist, bool isBlue = true) { foreach (var item in dataGridMonitorViewModels) { var mf = getrealrecordlist.FirstOrDefault(bc => bc.SignalID == item.SignalID); if (mf != null) { item.DataValue = mf.DataValue; item.DataTime = mf.DataTime.ToString("yyyy-MM-dd HH:mm:ss"); //item.DataStatus =mf.DataStatus!=null && mf.DataStatus.Contains("2") ? eDataStatus.Warn : eDataStatus.Normal; } } if (isBlue) { this.Invoke(new Action(() => { this.bindingSource1.DataSource = dataGridMonitorViewModels; this.gridView1.RefreshData(); })); } else { this.bindingSource1.DataSource = dataGridMonitorViewModels; this.gridView1.RefreshData(); } } private List dataList = null; /// /// 绑定数据 /// /// /// public void BindGrid(List list, bool isBlue = true) { dataList = new List(); foreach (var item in list) { foreach (var ml in item.MonitorList) { dataList.Add(new DataGridMonitorViewModel() { DataTime = !ml.DataTime.HasValue ? "-" : ml.DataTime?.ToString("yyyy-MM-dd HH:mm:ss"), DataValue = string.IsNullOrEmpty(ml.DataValue) ? "-" : ml.DataValue, GroupID = item.ID, GroupName = item.Name, MonitorName = ml.Name, SignalID = ml.SignalID, UnitName = ml.UnitName, DataStatus = ml.DataStatus, }); } } if (isBlue) { this.Invoke(new Action(() => { dataGridMonitorViewModels = dataList; this.bindingSource1.DataSource = dataGridMonitorViewModels; })); } else { dataGridMonitorViewModels = dataList; this.bindingSource1.DataSource = dataGridMonitorViewModels; this.gridView1.RefreshData(); } } private void gridView1_RowCellClick(object sender, DevExpress.XtraGrid.Views.Grid.RowCellClickEventArgs e) { currModel = this.gridView1.GetFocusedRow() as DataGridMonitorViewModel; } private void simpleButton1_Click(object sender, EventArgs e) { Search(); } /// /// 查询 /// public void Search() { if (currModel == null) { MessageBoxHelper.ShowWarning("请先选中监测数据!"); return; } GetHistoryData(); } private void simpleButton2_Click(object sender, EventArgs e) { this.dateEdit1.Text = this.dateEdit2.Text = DateTime.Parse(this.dateEdit1.Text).AddDays(-1).ToString("yyyy-MM-dd"); GetHistoryData(); } private void simpleButton3_Click(object sender, EventArgs e) { this.dateEdit1.Text = this.dateEdit2.Text = DateTime.Parse(this.dateEdit1.Text).AddDays(1).ToString("yyyy-MM-dd"); GetHistoryData(); } private void simpleButton4_Click(object sender, EventArgs e) { this.dateEdit1.Text = DateTime.Now.AddDays(-3).ToString("yyyy-MM-dd"); this.dateEdit2.Text = DateTime.Now.ToString("yyyy-MM-dd"); GetHistoryData(); } private Series _line { get { var s = this.chartControl1.GetSeriesByName("SeriesDataValue"); return s; } } private Series _points { get { var s = this.chartControl1.GetSeriesByName("SeriesAlarm"); return s; } } private XYDiagram _diagram { get { return this.chartControl1.Diagram as XYDiagram; } } List _realList = null; /// /// 绑定实时数据 /// /// /// public void SetChartData(List list, bool isBlue) { _realList = list; if (isBlue) { this.Invoke(new Action(() => { this.chartControl1.BeginInit(); var maxY = list.Max(x => x.DataValue); var minY = list.Min(x => x.DataValue); _line.BindToData(list, "DataTime", "DataValue"); var alarmList = list.Where(d => d.DataStatus != null && d.DataStatus.Contains("2")).ToList(); _points.BindToData(alarmList, "DataTime", "DataValue"); _diagram.AxisY.VisualRange.SetMinMaxValues(minY, maxY); _diagram.AxisY.WholeRange.SetMinMaxValues(minY, maxY); this.chartControl1.EndInit(); })); } else { this.chartControl1.BeginInit(); var maxY = list.Max(x => string.IsNullOrEmpty(x.DataValue) ? 0 : double.Parse(x.DataValue)); var minY = list.Min(x => string.IsNullOrEmpty(x.DataValue) ? 0 : double.Parse(x.DataValue)); _line.BindToData(list, "DataTime", "DataValue"); var alarmList = list.Where(d => d.DataStatus != null && d.DataStatus.Contains("2")).ToList(); _points.BindToData(alarmList, "DataTime", "DataValue"); _diagram.AxisY.VisualRange.SetMinMaxValues(minY, maxY); _diagram.AxisY.WholeRange.SetMinMaxValues(minY, maxY); this.chartControl1.EndInit(); } } private void gridView1_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e) { currModel = this.gridView1.GetFocusedRow() as DataGridMonitorViewModel; } private DataGridMonitorViewModel currModel = null; private void gridView1_DoubleClick(object sender, EventArgs e) { var r = this.gridView1.GetFocusedRow() as DataGridMonitorViewModel; currModel = r; GetHistoryData(); } public void GetHistoryData() { var m = new MonitorHistoryQuery() { SignalID = currModel.SignalID, StartTime = dateEdit1.Text,//.Equals(DateTime.Now.ToString("yyyy-MM-dd")) ? DateTime.Now.AddMinutes(-20).ToString("yyyy-MM-dd HH:mm:ss") : dateEdit1.Text, EndTime = dateEdit2.Text//.Equals(DateTime.Now.ToString("yyyy-MM-dd")) ? DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") : dateEdit2.Text, }; SendText(IBoxHelper.startCode + IBoxHelper.gethistoryrecordCode + IBoxHelper.paramCode + JsonHelper.Object2Json(m) + IBoxHelper.endCode); } private void GetRealData(object sender, EventArgs e) { SendText(IBoxHelper.startCode + IBoxHelper.getrealrecordCode + IBoxHelper.paramCode + IBoxHelper.endCode); } private void gridView1_CustomDrawCell(object sender, DevExpress.XtraGrid.Views.Base.RowCellCustomDrawEventArgs e) { if (e.Column.FieldName.Equals("DataValue")) { var b = gridView1.GetRow(e.RowHandle) as DataGridMonitorViewModel; if (b.DataStatus == eDataStatus.Warn) e.Appearance.ForeColor = Color.Red; } } public event EventHandler SendData; private void SendText(string content) { if (SendData != null) { SendData?.Invoke(null, content); } else { if (IBoxHelper.Ping()) { var smsg = content.Split(new string[] { IBoxHelper.paramCode, IBoxHelper.startCode }, StringSplitOptions.RemoveEmptyEntries); if (smsg.Length < 2) { return; } var order = IBoxHelper.HttpGet(content); var result = IBoxHelper.GetContent(order); switch (smsg[0].Trim()) { case IBoxHelper.getbaseCode: { if (!string.IsNullOrEmpty(result)) { var model = JsonHelper.Json2Object>(result); BindGrid(model, false); } break; } case IBoxHelper.getrealrecordCode: { if (!string.IsNullOrEmpty(result)) { var getrealrecordlist = JsonHelper.Json2Object>(result); SetRealRecord(getrealrecordlist, false); } break; } case IBoxHelper.gethistoryrecordCode: { if (!string.IsNullOrEmpty(result)) { var b = result.Split('|')[1]; var gethistoryrecordlist = new List(); if (!string.IsNullOrEmpty(b)) { var c = b.Split('|'); foreach (var item in c) { var m = new MonitorRecord().FromString(item); gethistoryrecordlist.Add(m); } } SetChartData(gethistoryrecordlist, false); } break; } default: IBoxHelper.HttpGet(content); break; } } else { MessageBoxHelper.ShowWarning("网络连接失败,请检查网络"); } } } private void simpleButton5_Click(object sender, EventArgs e) { ExportXLS(); } /// /// 导出Excel /// public void ExportXLS() { try { if (_realList == null || _realList.Count == 0) { XtraMessageBox.Show("没有可导出的数据!"); return; } var dlg = new SaveFileDialog(); dlg.Filter = "EXCEL 文件(*.xls)|*.xls"; if (dlg.ShowDialog() != DialogResult.OK) return; HSSFWorkbook theBook = new HSSFWorkbook(); var theSheet1 = theBook.CreateSheet("Sheet1"); IRow rowTile = theSheet1.CreateRow(0); rowTile.CreateCell(0).SetCellValue("时间"); rowTile.CreateCell(1).SetCellValue(currModel.MonitorName + "(" + currModel.UnitName + ")"); for (int rowIndex = 1; rowIndex <= _realList.Count; rowIndex++) { int col = 0; IRow row = theSheet1.CreateRow(rowIndex); row.CreateCell(col).SetCellValue(_realList[rowIndex - 1].DataTime.ToString("yyyy/MM/dd HH:mm:00")); col++; row.CreateCell(col).SetCellValue(_realList[rowIndex - 1].DataValue); col++; } //强制Excel在打开时重新计算所有公式 theSheet1.ForceFormulaRecalculation = true; using (FileStream fs = File.OpenWrite(dlg.FileName)) { theBook.Write(fs); } XtraMessageBox.Show("导出成功"); } catch (Exception ex) { XtraMessageBox.Show(ex.ToString()); } } } }