20240801_FJEQ_upperpc/FujianEarthquake_seabed/FujianEarthquake/ViewModels/JunctionBoxStatusDataViewModel.cs
XuMin 2f88b96460 1 完成接驳盒环境数据展示页面的编写;
2 完成接驳盒状态数据展示页面的编写;
2024-08-27 17:39:30 +08:00

412 lines
16 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using FujianEarthquake.Common;
using FujianEarthquake.DataAccess;
using FujianEarthquake.Models;
using FujianEarthquake.Views.UserControls;
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
using System.Windows;
using System.Windows.Threading;
namespace FujianEarthquake.ViewModels
{
public class JunctionBoxStatusDataViewModel : NotifyBase
{
#region Search Data
private DateTime _startDateTime;
public DateTime StartDateTime
{
get { return _startDateTime; }
set { Set(ref _startDateTime, value); }
}
private DateTime _endDateTime;
public DateTime EndDateTime
{
get { return _endDateTime; }
set { Set(ref _endDateTime, value); }
}
int PageIndex = 0;
private int recordCount;
public int RecordCount
{
get { return recordCount; }
set { recordCount = value; this.DoNotify(); }
}
private int totalPage;
public int TotalPage
{
get { return totalPage; }
set { totalPage = value; this.DoNotify(); }
}
private string junctionBoxStatusDataMsg;
public string JunctionBoxStatusDataMsg
{
get { return junctionBoxStatusDataMsg; }
set { junctionBoxStatusDataMsg = value; this.DoNotify(); }
}
#endregion
private ObservableCollection<JunctionBoxMonitorModel> junctionBoxStatusDataList = new ObservableCollection<JunctionBoxMonitorModel>();
public ObservableCollection<JunctionBoxMonitorModel> JunctionBoxStatusDataList
{
get { return junctionBoxStatusDataList; }
set { junctionBoxStatusDataList = value; this.DoNotify(); }
}
private ObservableCollection<JunctionBoxMonitorModel> totalJunctionBoxStatusDataList = new ObservableCollection<JunctionBoxMonitorModel>();
public ObservableCollection<JunctionBoxMonitorModel> TotalJunctionBoxStatusDataList
{
get { return totalJunctionBoxStatusDataList; }
set { totalJunctionBoxStatusDataList = value; this.DoNotify(); }
}
#region Data Filtering
public static DialogViewModel vm;
private bool _isChecked;
public bool IsChecked
{
get { return _isChecked; }
set
{
_isChecked = value;
this.DoNotify();
if (IsChecked)
{
if (string.IsNullOrEmpty(EndDateTime.ToString()) || string.IsNullOrEmpty(StartDateTime.ToString()))
{
IsChecked = false;
return;
}
if (EndDateTime < StartDateTime)
{
HandyControl.Controls.Dialog.Show(new TextDialog("起始时间大于结束时间,\n请重新输入"));
IsChecked = false;
return;
}
timeSearch = " and DataTime BETWEEN '" + StartDateTime + "' and '" + EndDateTime + "' ";
}
else
{
timeSearch = "";
}
//设置当前页为1
PageIndex = 1;
TotalJunctionBoxStatusDataList.Clear();
JunctionBoxStatusDataList.Clear();
string sql = String.Format("select * from underjuncbox_monitor where StationID = {0} {1} ORDER by id desc limit 100", station_id, timeSearch);
MySqlDataReader dataReader = DBHelper.ExecuteReader(sql, 1);
int index = 1;
while (dataReader.Read())
{
JunctionBoxMonitorModel junctionBoxMonitorModel = new JunctionBoxMonitorModel();
junctionBoxMonitorModel.Index = index++;
junctionBoxMonitorModel.RecordTime = Convert.ToDateTime(dataReader["RecordTime"]);
junctionBoxMonitorModel.Seis1_Voltage = Convert.ToSingle(string.IsNullOrEmpty(dataReader["Seis1_Voltage"].ToString()) ? "0" : dataReader["Seis1_Voltage"]);
junctionBoxMonitorModel.Seis1_Current = Convert.ToSingle(string.IsNullOrEmpty(dataReader["Seis1_Current"].ToString()) ? "0" : dataReader["Seis1_Current"]);
junctionBoxMonitorModel.Seis2_Voltage = Convert.ToSingle(string.IsNullOrEmpty(dataReader["Seis2_Voltage"].ToString()) ? "0" : dataReader["Seis2_Voltage"]);
junctionBoxMonitorModel.Seis2_Current = Convert.ToSingle(string.IsNullOrEmpty(dataReader["Seis2_Current"].ToString()) ? "0" : dataReader["Seis2_Current"]);
junctionBoxMonitorModel.Video_Voltage = Convert.ToSingle(string.IsNullOrEmpty(dataReader["Video_Voltage"].ToString()) ? "0" : dataReader["Video_Voltage"]);
junctionBoxMonitorModel.Video_Current = Convert.ToSingle(string.IsNullOrEmpty(dataReader["Video_Current"].ToString()) ? "0" : dataReader["Video_Current"]);
junctionBoxMonitorModel.Out_Voltage12_Reserved2 = Convert.ToSingle(string.IsNullOrEmpty(dataReader["Out_Voltage12_Reserved2"].ToString()) ? "0" : dataReader["Out_Voltage12_Reserved2"]);
TotalJunctionBoxStatusDataList.Add(junctionBoxMonitorModel);
}
dataReader.Dispose();
RecordCount = index - 1;
if (RecordCount <= 10)
{
TotalPage = 1;
JunctionBoxStatusDataList = TotalJunctionBoxStatusDataList;
}
else
{
TotalPage = (int)Math.Ceiling((double)RecordCount / 10);
for (int i = 0; i < 10; i++)
{
JunctionBoxStatusDataList.Add(TotalJunctionBoxStatusDataList[i]);
}
}
JunctionBoxStatusDataMsg = string.Format("共计{0}页,当前第{1}页", TotalPage, PageIndex);
string record = "查询接驳盒监测数据历史数据,查询时间范围为:" + StartDateTime + "至" + EndDateTime + ",共查询到" + RecordCount + "条历史数据";
sql = $"insert into underjuncbox_log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('{station_id}','{DateTime.Now}','海底地震监测基站-接驳盒','数据查询','{record}');";
DBHelper.ExecuteNonQuery(sql, 1);
}
}
#endregion
#region CommandBase Define
public CommandBase ForwordJunctionBoxStatusDataCommand { get; set; } //读取日志信息
public CommandBase NextJunctionBoxStatusDataCommand { get; set; } //读取日志信息
public CommandBase RefreshDataCommand { get; set; }
public CommandBase DownloadDataCommand { get; set; }
#endregion
int station_id = 1;
string timeSearch = "";
public DispatcherTimer timerDownloadDataMsgHidden = new DispatcherTimer();
public JunctionBoxStatusDataViewModel(int id)
{
// 默认查询1天内的日志
this.EndDateTime = DateTime.Now;
this.StartDateTime = DateTime.Now.AddDays(-1);
PageIndex = 1;
station_id = id;
vm = new DialogViewModel
{
Content = ""
};
#region Command Set
this.ForwordJunctionBoxStatusDataCommand = new CommandBase();
this.ForwordJunctionBoxStatusDataCommand.DoExcute = new Action<object>(ForwordJunctionBoxStatusData);
this.ForwordJunctionBoxStatusDataCommand.DoCanExcute = new Func<object, bool>((o) => true);
this.NextJunctionBoxStatusDataCommand = new CommandBase();
this.NextJunctionBoxStatusDataCommand.DoExcute = new Action<object>(NextJunctionBoxStatusData);
this.NextJunctionBoxStatusDataCommand.DoCanExcute = new Func<object, bool>((o) => true);
this.RefreshDataCommand = new CommandBase();
this.RefreshDataCommand.DoExcute = new Action<object>(RefreshData);
this.RefreshDataCommand.DoCanExcute = new Func<object, bool>((o) => true);
this.DownloadDataCommand = new CommandBase();
this.DownloadDataCommand.DoExcute = new Action<object>(DownloadData);
this.DownloadDataCommand.DoCanExcute = new Func<object, bool>((o) => true);
#endregion
timerDownloadDataMsgHidden.Interval = TimeSpan.FromSeconds(2);
timerDownloadDataMsgHidden.Tick += TimerDownloadDataMsgHidden_Tick;
}
#region RefreshData
public void RefreshData(object o)
{
if (IsChecked)
{
timeSearch = " and DataTime BETWEEN '" + StartDateTime + "' and '" + EndDateTime + "' ";
}
else
{
timeSearch = "";
}
//设置当前页为1
PageIndex = 1;
TotalJunctionBoxStatusDataList.Clear();
JunctionBoxStatusDataList.Clear();
string sql = String.Format("select * from underjuncbox_monitor where StationID = {0} {1} ORDER by id desc limit 100", station_id, timeSearch);
MySqlDataReader dataReader = DBHelper.ExecuteReader(sql, 1);
int index = 1;
while (dataReader.Read())
{
JunctionBoxMonitorModel junctionBoxMonitorModel = new JunctionBoxMonitorModel();
junctionBoxMonitorModel.Index = index++;
junctionBoxMonitorModel.RecordTime = Convert.ToDateTime(dataReader["RecordTime"]);
junctionBoxMonitorModel.Seis1_Voltage = Convert.ToSingle(string.IsNullOrEmpty(dataReader["Seis1_Voltage"].ToString()) ? "0" : dataReader["Seis1_Voltage"]);
junctionBoxMonitorModel.Seis1_Current = Convert.ToSingle(string.IsNullOrEmpty(dataReader["Seis1_Current"].ToString()) ? "0" : dataReader["Seis1_Current"]);
junctionBoxMonitorModel.Seis2_Voltage = Convert.ToSingle(string.IsNullOrEmpty(dataReader["Seis2_Voltage"].ToString()) ? "0" : dataReader["Seis2_Voltage"]);
junctionBoxMonitorModel.Seis2_Current = Convert.ToSingle(string.IsNullOrEmpty(dataReader["Seis2_Current"].ToString()) ? "0" : dataReader["Seis2_Current"]);
junctionBoxMonitorModel.Video_Voltage = Convert.ToSingle(string.IsNullOrEmpty(dataReader["Video_Voltage"].ToString()) ? "0" : dataReader["Video_Voltage"]);
junctionBoxMonitorModel.Video_Current = Convert.ToSingle(string.IsNullOrEmpty(dataReader["Video_Current"].ToString()) ? "0" : dataReader["Video_Current"]);
junctionBoxMonitorModel.Out_Voltage12_Reserved2 = Convert.ToSingle(string.IsNullOrEmpty(dataReader["Out_Voltage12_Reserved2"].ToString()) ? "0" : dataReader["Out_Voltage12_Reserved2"]);
TotalJunctionBoxStatusDataList.Add(junctionBoxMonitorModel);
}
dataReader.Dispose();
RecordCount = index - 1;
if (RecordCount <= 10)
{
TotalPage = 1;
JunctionBoxStatusDataList = TotalJunctionBoxStatusDataList;
}
else
{
TotalPage = (int)Math.Ceiling((double)RecordCount / 10);
for (int i = 0; i < 10; i++)
{
JunctionBoxStatusDataList.Add(TotalJunctionBoxStatusDataList[i]);
}
}
JunctionBoxStatusDataMsg = string.Format("共计{0}页,当前第{1}页", TotalPage, PageIndex);
sql = $"insert into underjuncbox_log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('{station_id}','{DateTime.Now}','海底地震监测基站-接驳盒','数据刷新','刷新接驳盒监测数据');";
DBHelper.ExecuteNonQuery(sql, 1);
}
#endregion
#region DownloadData
private void TimerDownloadDataMsgHidden_Tick(object sender, EventArgs e)
{
DownloadDataMsgVisibility = Visibility.Hidden;
// 停止定时器
(sender as DispatcherTimer).Stop();
}
private string downloadDataMsg;
public string DownloadDataMsg
{
get { return downloadDataMsg; }
set { downloadDataMsg = value; this.DoNotify(); }
}
private Brush downloadDataMsgForeground;
public Brush DownloadDataMsgForeground
{
get { return downloadDataMsgForeground; }
set { downloadDataMsgForeground = value; this.DoNotify(); }
}
private bool downloadDataBtnIsEnabled = true;
public bool DownloadDataBtnIsEnabled
{
get { return downloadDataBtnIsEnabled; }
set { downloadDataBtnIsEnabled = value; this.DoNotify(); }
}
private Visibility downloadDataMsgVisibility = Visibility.Visible;
public Visibility DownloadDataMsgVisibility
{
get { return downloadDataMsgVisibility; }
set { downloadDataMsgVisibility = value; this.DoNotify(); }
}
public void DownloadData(object o)
{
DownloadDataBtnIsEnabled = false;
string baseStationMonitorFolder = Tools.GetAppSetting("JunctionBoxStatusDataFolder");
string savePath = CSVDownload.CreateFile(baseStationMonitorFolder, "JunctionBoxStatusData_" + DateTime.Now.ToString("yyyyMMddhhMMss"), "csv");
bool result = CSVDownload.SaveJunctionBoxStatusDataToCSVFile(TotalJunctionBoxStatusDataList, savePath);
if (result)
{
DownloadDataMsg = "下载数据成功!";
DownloadDataMsgVisibility = Visibility.Visible;
DownloadDataMsgForeground = new SolidColorBrush(Colors.Green);
}
else
{
DownloadDataMsg = "下载数据失败!";
DownloadDataMsgVisibility = Visibility.Visible;
DownloadDataMsgForeground = new SolidColorBrush(Colors.Red);
}
timerDownloadDataMsgHidden.Start();
DownloadDataBtnIsEnabled = true;
string record = "下载接驳盒监测数据," + DownloadDataMsg;
string sql = $"insert into underjuncbox_log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('{station_id}','{DateTime.Now}','海底地震监测基站-地震仪','数据下载','{record}');";
DBHelper.ExecuteNonQuery(sql, 1);
}
#endregion
#region Page Switching
public void ForwordJunctionBoxStatusData(object o)
{
if (PageIndex == 1)
return;
try
{
PageIndex -= 1;
JunctionBoxStatusDataList.Clear();
for (int i = 0; i < 10; i++)
{
JunctionBoxStatusDataList.Add(TotalJunctionBoxStatusDataList[i + (PageIndex - 1) * 10]);
}
JunctionBoxStatusDataMsg = string.Format("共计{0}页,当前第{1}页", TotalPage, PageIndex);
}
catch
{
TotalJunctionBoxStatusDataList.Clear();
JunctionBoxStatusDataList.Clear();
}
}
public void NextJunctionBoxStatusData(object o)
{
if (PageIndex == TotalPage)
return;
try
{
PageIndex += 1;
JunctionBoxStatusDataList.Clear();
for (int i = 0; i < (PageIndex == TotalPage ? (RecordCount - (PageIndex - 1) * 10) : 10); i++)
{
JunctionBoxStatusDataList.Add(TotalJunctionBoxStatusDataList[i + (PageIndex - 1) * 10]);
}
JunctionBoxStatusDataMsg = string.Format("共计{0}页,当前第{1}页", TotalPage, PageIndex);
}
catch
{
TotalJunctionBoxStatusDataList.Clear();
JunctionBoxStatusDataList.Clear();
}
}
#endregion
}
}