20240301_JSEQ_upperpc/JiangsuEarthquakeNowUI/JiangsuEarthquake/ViewModels/LogRecordViewModel.cs
2024-11-01 15:54:08 +08:00

371 lines
12 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 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;
using Brush = System.Windows.Media.Brush;
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 int logTotalPage;
public int LogTotalPage
{
get { return logTotalPage; }
set { logTotalPage = value; this.DoNotify(); }
}
private int logNowPage;
public int LogNowPage
{
get { return logNowPage; }
set { logNowPage = 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(); }
}
public static DialogViewModel vm;
#region CommandBase Define
public CommandBase ForwordLogCommand { get; set; } //读取日志信息
public CommandBase NextLogCommand { get; set; } //读取日志信息
public CommandBase RefreshDataCommand { get; set; }
public CommandBase DownloadDataCommand { get; set; }
public CommandBase SearchEnvironDataCommand { get; set; }
public CommandBase ResetSearchCommand { get; set; }
#endregion
int station_id = 1;
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);
this.SearchEnvironDataCommand = new CommandBase();
this.SearchEnvironDataCommand.DoExcute = new Action<object>(SearchEnvironData);
this.SearchEnvironDataCommand.DoCanExcute = new Func<object, bool>((o) => true);
this.ResetSearchCommand = new CommandBase();
this.ResetSearchCommand.DoExcute = new Action<object>(ResetSearch);
this.ResetSearchCommand.DoCanExcute = new Func<object, bool>((o) => true);
#endregion
}
#region RefreshData
public void RefreshData(object o)
{
//设置当前页为1
PageIndex = 1;
TotalLogRecordList.Clear();
LogRecordList.Clear();
string sql = String.Format("select * from log_record where StationID = {0} ORDER by id desc limit 100", station_id);
MySqlDataReader dataReader = DBHelper.ExecuteReader(sql, 1);
int index = 1;
while (dataReader.Read())
{
LogRecordModel logRecord = new LogRecordModel();
logRecord.Index = index++;
logRecord.RecordTime = Convert.ToDateTime(dataReader["RecordTime"]);
logRecord.Device_Name = dataReader["Device_Name"].ToString();
logRecord.Operation_Type = dataReader["Operation_Type"].ToString();
logRecord.Record = dataReader["Record"].ToString();
TotalLogRecordList.Add(logRecord);
}
dataReader.Dispose();
RecordCount = index - 1;
if (RecordCount <= 10)
{
TotalPage = 1;
LogRecordList = new ObservableCollection<LogRecordModel>();
LogRecordList = TotalLogRecordList;
}
else
{
TotalPage = (int)Math.Ceiling((double)RecordCount / 10);
LogRecordList = new ObservableCollection<LogRecordModel>();
for (int i = 0; i < 10; i++)
{
LogRecordList.Add(TotalLogRecordList[i]);
}
}
LogTotalPage = TotalPage;
LogNowPage = PageIndex;
sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('{station_id}','{DateTime.Now}','海底地震监测基站','数据刷新','刷新日志记录');";
DBHelper.ExecuteNonQuery(sql, 1);
}
#endregion
#region DownloadData
public void DownloadData(object o)
{
string baseStationFolder = Tools.GetAppSetting("LogRecordFolder");
string savePath = CSVDownload.CreateFile(baseStationFolder, "LogRecord_" + DateTime.Now.ToString("yyyyMMddhhMMss"), "csv");
string DownloadDataMsg = "";
bool result = CSVDownload.SaveLogRecordDataToCSVFile(TotalLogRecordList, savePath);
if (result)
{
DownloadDataMsg = "下载数据成功!";
}
else
{
DownloadDataMsg = "下载数据失败!";
}
string record = "下载日志记录," + DownloadDataMsg;
string sql = $"insert into 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 ForwordLog(object o)
{
if (PageIndex == 1)
return;
try
{
PageIndex -= 1;
LogRecordList.Clear();
for (int i = 0; i < 10; i++)
{
LogRecordList.Add(TotalLogRecordList[i + (PageIndex - 1) * 10]);
}
LogTotalPage = TotalPage;
LogNowPage = PageIndex;
}
catch
{
LogRecordList.Clear();
TotalLogRecordList.Clear();
}
}
public void NextLog(object o)
{
if (PageIndex == TotalPage)
return;
try
{
PageIndex += 1;
LogRecordList.Clear();
for (int i = 0; i < (PageIndex == TotalPage ? (RecordCount - (PageIndex - 1) * 10) : 10); i++)
{
LogRecordList.Add(TotalLogRecordList[i + (PageIndex - 1) * 10]);
}
LogTotalPage = TotalPage;
LogNowPage = PageIndex;
}
catch
{
LogRecordList.Clear();
TotalLogRecordList.Clear();
}
}
#endregion
#region SerachData
public void SearchEnvironData(object o)
{
if (string.IsNullOrEmpty(EndDateTime.ToString()) || string.IsNullOrEmpty(StartDateTime.ToString()))
{
HandyControl.Controls.Dialog.Show(new TextDialog("请选择起始时间和结束时间!"));
return;
}
if (EndDateTime < StartDateTime)
{
HandyControl.Controls.Dialog.Show(new TextDialog("起始时间大于结束时间,\n请重新输入"));
return;
}
string timeSearch = " and RecordTime BETWEEN '" + StartDateTime + "' and '" + EndDateTime + "' ";
//设置当前页为1
PageIndex = 1;
TotalLogRecordList.Clear();
LogRecordList.Clear();
string sql = String.Format("select * from log_record 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.RecordTime = Convert.ToDateTime(dataReader["RecordTime"]);
logRecord.Device_Name = dataReader["Device_Name"].ToString();
logRecord.Operation_Type = dataReader["Operation_Type"].ToString();
logRecord.Record = dataReader["Record"].ToString();
TotalLogRecordList.Add(logRecord);
}
dataReader.Dispose();
RecordCount = index - 1;
if (RecordCount <= 10)
{
TotalPage = 1;
LogRecordList = new ObservableCollection<LogRecordModel>();
LogRecordList = TotalLogRecordList;
}
else
{
TotalPage = (int)Math.Ceiling((double)RecordCount / 10);
LogRecordList = new ObservableCollection<LogRecordModel>();
for (int i = 0; i < 10; i++)
{
LogRecordList.Add(TotalLogRecordList[i]);
}
}
LogTotalPage = TotalPage;
LogNowPage = PageIndex;
string record = "查询日志记录历史记录,查询时间范围为:" + StartDateTime + "至" + EndDateTime + ",共查询到" + RecordCount + "条历史记录";
sql = $"insert into log_record(StationID,RecordTime,Device_Name,Operation_Type,Record) values('{station_id}','{DateTime.Now}','海底地震监测基站','日志查询','{record}');";
DBHelper.ExecuteNonQuery(sql, 1);
}
public void ResetSearch(object o)
{
RefreshData(null);
}
#endregion
}
}