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;
|
|
|
// _line.LegendTextPattern = "";
|
}
|
|
//private void WebMessageReceived(object sender, CoreWebView2WebMessageReceivedEventArgs e)
|
//{
|
// var j = JsonHelper.Json2Object<FixationReceivedViewModel>(e.WebMessageAsJson);
|
// var oper = new
|
// {
|
// oper = "setToken",
|
// dataValue = ""
|
// };
|
// switch (j.Oper)
|
// {
|
// case "loadCompleted":
|
// break;
|
// }
|
//}
|
|
private void TestData()
|
{
|
#region 测试数据
|
|
this.pumpRunStatusModels = new List<PumpRunStatusViewModel>();
|
this.pumpRunStatusModels.Add(new PumpRunStatusViewModel()
|
{
|
ID = 1,
|
Name = "1#机组",
|
BootTimes = 50,
|
ContinutRunTime = 1000,
|
DateTime = DateTime.Now,
|
RunStatus = 1,
|
TotalRunTime = 1000,
|
});
|
this.pumpRunStatusModels.Add(new PumpRunStatusViewModel()
|
{
|
ID = 2,
|
Name = "2#机组",
|
BootTimes = 100,
|
ContinutRunTime = 1300,
|
DateTime = DateTime.Now,
|
RunStatus = 0,
|
TotalRunTime = 1800,
|
});
|
this.pumpRunStatusModels.Add(new PumpRunStatusViewModel()
|
{
|
ID = 3,
|
Name = "3#机组",
|
BootTimes = 400,
|
ContinutRunTime = 1500,
|
DateTime = DateTime.Now,
|
RunStatus = 1,
|
TotalRunTime = 2000,
|
});
|
this.pumpRunStatusModels.Add(new PumpRunStatusViewModel()
|
{
|
ID = 4,
|
Name = "4#机组",
|
BootTimes = 100,
|
ContinutRunTime = 800,
|
DateTime = DateTime.Now,
|
RunStatus = 0,
|
TotalRunTime = 1300,
|
});
|
this.Invoke(new Action(() =>
|
{
|
this.pumpRunStatusViewModelBindingSource.DataSource = this.pumpRunStatusModels;
|
}));
|
|
pumpEnergyViewModels = new List<PumpEnergyViewModel>();
|
pumpEnergyViewModels.Add(new PumpEnergyViewModel()
|
{
|
Day = "2024-4-14",
|
Electricity = 4172,
|
Supply = 50510,
|
EnergyOfWater = (decimal)82.04
|
});
|
|
pumpEnergyViewModels.Add(new PumpEnergyViewModel()
|
{
|
Day = "2024-4-15",
|
Electricity = 3308,
|
Supply = 32530,
|
EnergyOfWater = (decimal)80.14
|
});
|
|
pumpEnergyViewModels.Add(new PumpEnergyViewModel()
|
{
|
Day = "2024-4-16",
|
Electricity = 3378,
|
Supply = 42630,
|
EnergyOfWater = (decimal)73.34
|
});
|
|
pumpEnergyViewModels.Add(new PumpEnergyViewModel()
|
{
|
Day = "2024-4-17",
|
Electricity = 4178,
|
Supply = 51530,
|
EnergyOfWater = (decimal)81.34
|
});
|
|
this.Invoke(new Action(() =>
|
{
|
this.pumpEnergyViewModelBindingSource.DataSource = pumpEnergyViewModels;
|
}));
|
|
#endregion 测试数据
|
}
|
|
private void EboxForm_Load(object sender, EventArgs e)
|
{
|
//BluetoothHelper.GetInstance().SMR -= null;
|
//BluetoothHelper.GetInstance().SMR += new BluetoothHelper.ShowMessReturn(GetReceive);
|
//BluetoothHelper.GetInstance().ListenerData();
|
Thread.Sleep(500);
|
SendText(startCode + getbaseCode + paramCode + endCode);
|
_diagram.EnableAxisXScrolling = true;
|
_diagram.EnableAxisYScrolling = true;
|
_diagram.EnableAxisXZooming = true;
|
_diagram.EnableAxisYZooming = true;
|
//SetTimer();
|
|
}
|
|
public void GetReceive(string msg)
|
{
|
if (!this.IsHandleCreated || this.IsDisposed || string.IsNullOrEmpty(msg)) return;
|
if (msg.StartsWith("error:") && msg.Contains("目标主机坏了"))
|
{
|
MessageBoxHelper.ShowError("m 蓝牙设备连接失败,请重试!"); return;
|
}
|
if (!string.IsNullOrEmpty(msg) && msg.Contains(startCode))
|
{
|
var order = msg.Replace(endCode, "").Replace(startCode, "").Trim();
|
SetOrder(order);
|
}
|
else MessageBoxHelper.ShowError("m 蓝牙设备连接失败!");
|
}
|
|
private void SetOrder(string order)
|
{
|
var smsg = order.Split(new string[] { paramCode }, StringSplitOptions.RemoveEmptyEntries);
|
if (smsg.Length < 2)
|
{
|
_diagram.DefaultPane.Visibility = ChartElementVisibility.Hidden;
|
return;
|
}
|
_diagram.DefaultPane.Visibility = ChartElementVisibility.Visible;
|
|
switch (smsg[0].Trim())
|
{
|
case "getbase":
|
var getbaselist = JsonHelper.Json2Object<List<StationMonitorListGroupMobileDto>>(smsg[1].Trim());
|
BindGrid(getbaselist);
|
WaitFormHelper.HideWaitForm();
|
break;
|
|
case "gethistoryrecord":
|
var b = smsg[1].Trim();
|
var gethistoryrecordlist = new List<MonitorRecord>();
|
|
if (!string.IsNullOrEmpty(b))
|
{
|
var c = b.Split('|');
|
foreach (var item in c)
|
{
|
var m = new MonitorRecord().FromString(item);
|
gethistoryrecordlist.Add(m);
|
}
|
}
|
//SetChartData(gethistoryrecordlist);
|
break;
|
|
case "getalarmbyday":
|
//var getalarmbydaylist = JsonHelper.Json2Object<List<MonitorValueAlarmRecord>>(smsg[1].Trim());
|
//monitorValueAlarmRecords = getalarmbydaylist;
|
//this.bindingSource1.DataSource = dataGridMonitorViewModels;
|
var l = smsg[1].Trim();
|
SetAlarmByDay(l);
|
//this.gridView2.RefreshData();
|
break;
|
|
case "getbysignalidofdayrange":
|
var getbysignalidofdayrangelist = JsonHelper.Json2Object<List<MonitorValueAlarmRecord>>(smsg[1].Trim());
|
break;
|
|
case "getrealrecord":
|
var getrealrecordlist = JsonHelper.Json2Object<List<MonitorRealRecord>>(smsg[1].Trim());
|
SetRealRecord(getrealrecordlist);
|
break;
|
}
|
}
|
|
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;
|
|
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();
|
|
}
|
//var am = new GetAlarmByDayModel() { Day = DateTime.Now };
|
//SendText(startCode + getalarmbydayCode + paramCode + JsonHelper.Object2Json(am) + endCode);
|
//WaitFrmHelper.HideWaitForm();
|
}
|
|
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();
|
//WaitFrmHelper.ShowWaitForm();
|
}
|
|
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;
|
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)
|
{
|
//WaitFrmHelper.ShowWaitForm();
|
var r = this.gridView1.GetFocusedRow() as DataGridMonitorViewModel;
|
currModel = r;
|
//sw.Restart();
|
GetHistoryData();
|
}
|
|
private 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 GetAlarmRange()
|
{
|
var m = new GetBySignalIDOfDayRangeModel()
|
{
|
SignalID = currModel.SignalID,
|
StartDay = DateTime.Parse(dateEdit1.Text),
|
EndDay = DateTime.Parse(dateEdit1.Text),
|
};
|
|
SendText(startCode + getbysignalidofdayrangeCode + paramCode + JsonHelper.Object2Json(m) + endCode);
|
}
|
|
private void checkBox1_CheckedChanged(object sender, EventArgs e)
|
{
|
SetTimer();
|
}
|
|
private void SetTimer()
|
{
|
if (dataList == null)
|
{
|
return;
|
}
|
timer1.Interval = 5000;
|
timer1.Enabled = true;
|
timer1.Tick += new EventHandler(GetRealData);
|
}
|
|
private void GetRealData(object sender, EventArgs e)
|
{
|
SendText(startCode + getrealrecordCode + paramCode + endCode);
|
}
|
|
private void comboBox1_SelectedValueChanged(object sender, EventArgs e)
|
{
|
SetTimer();
|
}
|
|
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;
|
}
|
}
|
|
private void button2_Click(object sender, EventArgs e)
|
{
|
BluetoothHelper.GetInstance().Close();
|
}
|
|
private void tabbedControlGroup1_SelectedPageChanged(object sender, DevExpress.XtraLayout.LayoutTabPageChangedEventArgs e)
|
{
|
//MessageBox.Show(tabbedControlGroup1.SelectedTabPage.Tag.ToString());
|
}
|
|
private void gridControl2_Click(object sender, EventArgs e)
|
{
|
}
|
|
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();
|
}
|
|
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());
|
}
|
}
|
}
|
}
|