20240301_JSEQ_upperpc/JiangsuEarthquakeJM/JiangsuEarthquake/ViewModels/LogRecordViewModel.cs
春风过客 d7f51483a7 新增功能:
1 将地震仪数据读取功能单独成一个页面;
2024-05-13 18:51:05 +08:00

381 lines
12 KiB
C#
Raw 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 GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using HandyControl.Data;
using JiangsuEarthquake.Common;
using JiangsuEarthquake.DataAccess;
using JiangsuEarthquake.Models;
using JiangsuEarthquake.Views;
using JiangsuEarthquake.Views.UserControls;
using LiveCharts.Defaults;
using LiveCharts.Wpf;
using LiveCharts;
using MySql.Data.MySqlClient;
using Org.BouncyCastle.Utilities;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
using System.Windows.Threading;
namespace JiangsuEarthquake.ViewModels
{
public class LogRecordViewModel : 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 logMsg;
public string LogMsg
{
get { return logMsg; }
set { logMsg = value; this.DoNotify(); }
}
#endregion
private ObservableCollection<LogRecordModel> logRecordList = new ObservableCollection<LogRecordModel>();
public ObservableCollection<LogRecordModel> LogRecordList
{
get { return logRecordList; }
set { logRecordList = value; this.DoNotify(); }
}
private ObservableCollection<LogRecordModel> totalLogRecordList = new ObservableCollection<LogRecordModel>();
public ObservableCollection<LogRecordModel> TotalLogRecordList
{
get { return totalLogRecordList; }
set { totalLogRecordList = 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;
//this.EndDateTime = DateTime.Now;
//this.StartDateTime = DateTime.Now.AddDays(-1);
return;
}
timeSearch = " and DataTime BETWEEN '" + StartDateTime + "' and '" + EndDateTime + "' ";
}
else
{
timeSearch = "";
}
//设置当前页为1
PageIndex = 1;
TotalLogRecordList.Clear();
LogRecordList.Clear();
string sql = String.Format("select * from logrecordhis 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())
{
LogRecordModel logRecord = new LogRecordModel();
logRecord.Index = index++;
logRecord.DataTime = Convert.ToDateTime(dataReader["DataTime"]);
logRecord.Remark = dataReader["Record"].ToString();
TotalLogRecordList.Add(logRecord);
}
dataReader.Dispose();
RecordCount = index - 1;
if (RecordCount <= 10)
{
TotalPage = 1;
LogRecordList = TotalLogRecordList;
}
else
{
TotalPage = (int)Math.Ceiling((double)RecordCount / 10);
for (int i = 0; i < 10; i++)
{
LogRecordList.Add(TotalLogRecordList[i]);
}
}
LogMsg = string.Format("共计{0}页,当前第{1}页", TotalPage, PageIndex);
}
}
#endregion
#region CommandBase Define
public CommandBase ForwordLogCommand { get; set; } //读取日志信息
public CommandBase NextLogCommand { 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 LogRecordViewModel(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.ForwordLogCommand = new CommandBase();
this.ForwordLogCommand.DoExcute = new Action<object>(ForwordLog);
this.ForwordLogCommand.DoCanExcute = new Func<object, bool>((o) => true);
this.NextLogCommand = new CommandBase();
this.NextLogCommand.DoExcute = new Action<object>(NextLog);
this.NextLogCommand.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;
TotalLogRecordList.Clear();
LogRecordList.Clear();
string sql = String.Format("select * from logrecordhis 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())
{
LogRecordModel logRecord = new LogRecordModel();
logRecord.Index = index++;
logRecord.DataTime = Convert.ToDateTime(dataReader["DataTime"]);
logRecord.Remark = dataReader["Record"].ToString();
TotalLogRecordList.Add(logRecord);
}
dataReader.Dispose();
RecordCount = index - 1;
if (RecordCount <= 10)
{
TotalPage = 1;
LogRecordList = TotalLogRecordList;
}
else
{
TotalPage = (int)Math.Ceiling((double)RecordCount / 10);
for (int i = 0; i < 10; i++)
{
LogRecordList.Add(TotalLogRecordList[i]);
}
}
LogMsg = string.Format("共计{0}页,当前第{1}页", TotalPage, PageIndex);
}
#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;
DownloadDataMsgVisibility = Visibility.Visible;
string baseStationFolder = Tools.GetAppSetting("LogRecordFolder");
string savePath = CSVDownload.CreateFile(baseStationFolder, "LogRecord_" + DateTime.Now.ToString("yyyyMMddhhMMss"), "csv");
bool result = CSVDownload.SaveLogRecordDataToCSVFile(TotalLogRecordList, savePath);
if (result)
{
DownloadDataMsg = "下载数据成功!";
DownloadDataMsgForeground = new SolidColorBrush(Colors.Green);
}
else
{
DownloadDataMsg = "下载数据失败!";
DownloadDataMsgForeground = new SolidColorBrush(Colors.Red);
}
timerDownloadDataMsgHidden.Start();
DownloadDataBtnIsEnabled = true;
}
#endregion
#region Page Switching
public void ForwordLog(object o)
{
if (PageIndex == 1)
return;
PageIndex -= 1;
LogRecordList.Clear();
for (int i = 0; i < 10; i++)
{
LogRecordList.Add(TotalLogRecordList[i + (PageIndex - 1) * 10]);
}
LogMsg = string.Format("共计{0}页,当前第{1}页", TotalPage, PageIndex);
}
public void NextLog(object o)
{
if (PageIndex == TotalPage)
return;
PageIndex += 1;
LogRecordList.Clear();
for (int i = 0; i < (PageIndex == TotalPage ? (RecordCount - (PageIndex - 1) * 10) : 10); i++)
{
LogRecordList.Add(TotalLogRecordList[i + (PageIndex - 1) * 10]);
}
LogMsg = string.Format("共计{0}页,当前第{1}页", TotalPage, PageIndex);
}
#endregion
}
}