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
|
{
|
|
private string startCode = "[&start&]";
|
private string endCode = "[&end&]";
|
private string paramCode = "[¶m&]";
|
private string getbaseCode = "getbase";
|
private string getrealrecordCode = "getrealrecord";
|
private string gethistoryrecordCode = "gethistoryrecord";
|
private string getalarmbydayCode = "getalarmbyday";
|
private string getbysignalidofdayrangeCode = "getbysignalidofdayrange";
|
|
//Stopwatch sw = new Stopwatch();
|
//string swstr=string.Empty;
|
private List<MonitorValueAlarmRecord> monitorValueAlarmRecords = new List<MonitorValueAlarmRecord>();
|
|
private List<DataGridMonitorViewModel> dataGridMonitorViewModels = new List<DataGridMonitorViewModel>();
|
private List<PumpRunStatusViewModel> pumpRunStatusModels = new List<PumpRunStatusViewModel>();
|
private List<PumpEnergyViewModel> pumpEnergyViewModels = new List<PumpEnergyViewModel>();
|
|
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(startCode + getbaseCode + paramCode + 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<MonitorValueAlarmRecord>();
|
|
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<MonitorRealRecord> 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<DataGridMonitorViewModel> dataList = null;
|
|
/// <summary>
|
/// 绑定数据
|
/// </summary>
|
/// <param name="list"></param>
|
/// <param name="isBlue"></param>
|
public void BindGrid(List<StationMonitorListGroupMobileDto> list, bool isBlue = true)
|
{
|
dataList = new List<DataGridMonitorViewModel>();
|
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)
|
{
|
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<MonitorRecord> _realList = null;
|
|
/// <summary>
|
/// 绑定实时数据
|
/// </summary>
|
/// <param name="list"></param>
|
/// <param name="isBlue"></param>
|
public void SetChartData(List<MonitorRecord> 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(startCode + gethistoryrecordCode + paramCode + JsonHelper.Object2Json(m) + endCode);
|
}
|
|
private void GetRealData(object sender, EventArgs e)
|
{
|
SendText(startCode + getrealrecordCode + paramCode + 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<string> SendData;
|
private void SendText(string content)
|
{
|
//BluetoothHelper.GetInstance().SendData(content);
|
SendData?.Invoke(null, content);
|
}
|
|
private void simpleButton5_Click(object sender, EventArgs e)
|
{
|
ExportXLS();
|
}
|
|
/// <summary>
|
/// 导出Excel
|
/// </summary>
|
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());
|
}
|
}
|
}
|
}
|