using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows.Media; using System.Windows; using FujianEarthquake.Common; using FujianEarthquake.DataAccess; using FujianEarthquake.Models; using MySql.Data.MySqlClient; namespace FujianEarthquake.ViewModels { public class MainViewModel : NotifyBase { #region ViewModel Define public static RealTimeDataViewModel realTimeDataViewModel1 = new RealTimeDataViewModel(1); public static RealTimeDataViewModel realTimeDataViewModel2 = new RealTimeDataViewModel(2); public static RealTimeDataViewModel realTimeDataViewModel3 = new RealTimeDataViewModel(3); public static AlarmRecordViewModel alarmRecordViewModel1 = new AlarmRecordViewModel(1); public static AlarmRecordViewModel alarmRecordViewModel2 = new AlarmRecordViewModel(2); public static AlarmRecordViewModel alarmRecordViewModel3 = new AlarmRecordViewModel(3); public static LogRecordViewModel logRecordViewModel1 = new LogRecordViewModel(1); public static LogRecordViewModel logRecordViewModel2 = new LogRecordViewModel(2); public static LogRecordViewModel logRecordViewModel3 = new LogRecordViewModel(3); #endregion #region Something Define public int station_id { get; set; } = 1; string Title_Name = ""; //设置当前显示的标题 private FrameworkElement _pageContent; public FrameworkElement PageContent { get { return _pageContent; } set { _pageContent = value; this.DoNotify(); } } #endregion #region CommandBase Define public CommandBase NavChangedCommand { get; set; } public CommandBase Switch { set; get; } #endregion public static DialogViewModel vm; public MainViewModel() { vm = new DialogViewModel { Content = "" }; #region Command Define this.NavChangedCommand = new CommandBase(); this.NavChangedCommand.DoExcute = new Action(DoNavChanged); this.NavChangedCommand.DoCanExcute = new Func((o) => true); //this.Switch = new CommandBase(); //this.Switch.DoExcute = new Action(Btn_Switch); //this.Switch.DoCanExcute = new Func((o) => true); #endregion #region 日志页面初始化 string sql = String.Format("select * from underjuncbox_log_record where StationID = {0} ORDER by id desc limit 100", 1); 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(); logRecordViewModel1.TotalLogRecordList.Add(logRecord); } dataReader.Dispose(); logRecordViewModel1.RecordCount = index - 1; logRecordViewModel1.TotalPage = index <= 10 ? 1 : (int)Math.Ceiling((double)index / 10); for (int i = 0; i < (logRecordViewModel1.RecordCount < 10 ? logRecordViewModel1.RecordCount : 10); i++) { logRecordViewModel1.LogRecordList.Add(logRecordViewModel1.TotalLogRecordList[i]); } logRecordViewModel1.LogMsg = string.Format("共计{0}页,当前第{1}页", logRecordViewModel1.TotalPage, 1); sql = String.Format("select * from underjuncbox_log_record where StationID = {0} ORDER by id desc limit 100", 2); dataReader = DBHelper.ExecuteReader(sql, 1); 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(); logRecordViewModel2.TotalLogRecordList.Add(logRecord); } dataReader.Dispose(); logRecordViewModel2.RecordCount = index - 1; logRecordViewModel2.TotalPage = index <= 10 ? 1 : (int)Math.Ceiling((double)index / 10); for (int i = 0; i < (logRecordViewModel2.RecordCount < 10 ? logRecordViewModel2.RecordCount : 10); i++) { logRecordViewModel2.LogRecordList.Add(logRecordViewModel2.TotalLogRecordList[i]); } logRecordViewModel2.LogMsg = string.Format("共计{0}页,当前第{1}页", logRecordViewModel2.TotalPage, 1); sql = String.Format("select * from underjuncbox_log_record where StationID = {0} ORDER by id desc limit 100", 3); dataReader = DBHelper.ExecuteReader(sql, 1); 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(); logRecordViewModel3.TotalLogRecordList.Add(logRecord); } dataReader.Dispose(); logRecordViewModel3.RecordCount = index - 1; logRecordViewModel3.TotalPage = index <= 10 ? 1 : (int)Math.Ceiling((double)index / 10); for (int i = 0; i < (logRecordViewModel3.RecordCount < 10 ? logRecordViewModel3.RecordCount : 10); i++) { logRecordViewModel3.LogRecordList.Add(logRecordViewModel3.TotalLogRecordList[i]); } logRecordViewModel3.LogMsg = string.Format("共计{0}页,当前第{1}页", logRecordViewModel3.TotalPage, 1); #endregion #region 告警页面初始化 sql = String.Format("select * from underjuncbox_alarm_info where StationID = {0} ORDER by id desc limit 100", 1); dataReader = DBHelper.ExecuteReader(sql, 1); index = 1; while (dataReader.Read()) { AlarmRecordModel alarmRecordModel = new AlarmRecordModel(); alarmRecordModel.Index = index++; alarmRecordModel.RecordTime = Convert.ToDateTime(dataReader["RecordTime"]); alarmRecordModel.ParaName = dataReader["ParaName"].ToString(); alarmRecordModel.ParaNum = Convert.ToInt32(string.IsNullOrEmpty(dataReader["ParaNum"].ToString()) ? 0 : dataReader["ParaNum"]); alarmRecordModel.ParaContent = dataReader["ParaContent"].ToString(); alarmRecordModel.ProcessingMethod = dataReader["ProcessingMethod"].ToString(); if (dataReader["UrgencyLevel"].ToString() == "1") { alarmRecordModel.UrgencyLevel = (ImageSource)Application.Current.FindResource("CycleRed"); } else if (dataReader["UrgencyLevel"].ToString() == "2") { alarmRecordModel.UrgencyLevel = (ImageSource)Application.Current.FindResource("CycleOrange"); } else { alarmRecordModel.UrgencyLevel = (ImageSource)Application.Current.FindResource("CycleYellow"); } if (dataReader["IsHandled"].ToString() == "0") { alarmRecordModel.IsHandled = "未处理"; } else if (dataReader["IsHandled"].ToString() == "1") { alarmRecordModel.IsHandled = "已处理"; } else { alarmRecordModel.IsHandled = "处理中"; } alarmRecordViewModel1.TotalAlarmRecordList.Add(alarmRecordModel); } dataReader.Dispose(); alarmRecordViewModel1.RecordCount = index - 1; alarmRecordViewModel1.TotalPage = (index - 1) <= 10 ? 1 : (int)Math.Ceiling((double)(index - 1) / 10); for (int i = 0; i < (alarmRecordViewModel1.RecordCount < 10 ? alarmRecordViewModel1.RecordCount : 10); i++) { alarmRecordViewModel1.AlarmRecordList.Add(alarmRecordViewModel1.TotalAlarmRecordList[i]); } alarmRecordViewModel1.AlarmMsg = string.Format("共计{0}页,当前第{1}页", alarmRecordViewModel1.TotalPage, 1); sql = String.Format("select * from underjuncbox_alarm_info where StationID = {0} ORDER by id desc limit 100", 2); dataReader = DBHelper.ExecuteReader(sql, 1); index = 1; while (dataReader.Read()) { AlarmRecordModel alarmRecordModel = new AlarmRecordModel(); alarmRecordModel.Index = index++; alarmRecordModel.RecordTime = Convert.ToDateTime(dataReader["RecordTime"]); alarmRecordModel.ParaName = dataReader["ParaName"].ToString(); alarmRecordModel.ParaNum = Convert.ToInt32(string.IsNullOrEmpty(dataReader["ParaNum"].ToString()) ? 0 : dataReader["ParaNum"]); alarmRecordModel.ParaContent = dataReader["ParaContent"].ToString(); alarmRecordModel.ProcessingMethod = dataReader["ProcessingMethod"].ToString(); if (dataReader["UrgencyLevel"].ToString() == "1") { alarmRecordModel.UrgencyLevel = (ImageSource)Application.Current.FindResource("CycleRed"); } else if (dataReader["UrgencyLevel"].ToString() == "2") { alarmRecordModel.UrgencyLevel = (ImageSource)Application.Current.FindResource("CycleOrange"); } else { alarmRecordModel.UrgencyLevel = (ImageSource)Application.Current.FindResource("CycleYellow"); } if (dataReader["IsHandled"].ToString() == "0") { alarmRecordModel.IsHandled = "未处理"; } else if (dataReader["IsHandled"].ToString() == "1") { alarmRecordModel.IsHandled = "已处理"; } else { alarmRecordModel.IsHandled = "处理中"; } alarmRecordViewModel2.TotalAlarmRecordList.Add(alarmRecordModel); } dataReader.Dispose(); alarmRecordViewModel2.RecordCount = index - 1; alarmRecordViewModel2.TotalPage = (index - 1) <= 10 ? 1 : (int)Math.Ceiling((double)(index - 1) / 10); for (int i = 0; i < (alarmRecordViewModel2.RecordCount < 10 ? alarmRecordViewModel2.RecordCount : 10); i++) { alarmRecordViewModel2.AlarmRecordList.Add(alarmRecordViewModel2.TotalAlarmRecordList[i]); } alarmRecordViewModel2.AlarmMsg = string.Format("共计{0}页,当前第{1}页", alarmRecordViewModel2.TotalPage, 1); sql = String.Format("select * from underjuncbox_alarm_info where StationID = {0} ORDER by id desc limit 100", 3); dataReader = DBHelper.ExecuteReader(sql, 1); index = 1; while (dataReader.Read()) { AlarmRecordModel alarmRecordModel = new AlarmRecordModel(); alarmRecordModel.Index = index++; alarmRecordModel.RecordTime = Convert.ToDateTime(dataReader["RecordTime"]); alarmRecordModel.ParaName = dataReader["ParaName"].ToString(); alarmRecordModel.ParaNum = Convert.ToInt32(string.IsNullOrEmpty(dataReader["ParaNum"].ToString()) ? 0 : dataReader["ParaNum"]); alarmRecordModel.ParaContent = dataReader["ParaContent"].ToString(); alarmRecordModel.ProcessingMethod = dataReader["ProcessingMethod"].ToString(); if (dataReader["UrgencyLevel"].ToString() == "1") { alarmRecordModel.UrgencyLevel = (ImageSource)Application.Current.FindResource("CycleRed"); } else if (dataReader["UrgencyLevel"].ToString() == "2") { alarmRecordModel.UrgencyLevel = (ImageSource)Application.Current.FindResource("CycleOrange"); } else { alarmRecordModel.UrgencyLevel = (ImageSource)Application.Current.FindResource("CycleYellow"); } if (dataReader["IsHandled"].ToString() == "0") { alarmRecordModel.IsHandled = "未处理"; } else if (dataReader["IsHandled"].ToString() == "1") { alarmRecordModel.IsHandled = "已处理"; } else { alarmRecordModel.IsHandled = "处理中"; } alarmRecordViewModel3.TotalAlarmRecordList.Add(alarmRecordModel); } dataReader.Dispose(); alarmRecordViewModel3.RecordCount = index - 1; alarmRecordViewModel3.TotalPage = (index - 1) <= 10 ? 1 : (int)Math.Ceiling((double)(index - 1) / 10); for (int i = 0; i < (alarmRecordViewModel3.RecordCount < 10 ? alarmRecordViewModel3.RecordCount : 10); i++) { alarmRecordViewModel3.AlarmRecordList.Add(alarmRecordViewModel3.TotalAlarmRecordList[i]); } alarmRecordViewModel3.AlarmMsg = string.Format("共计{0}页,当前第{1}页", alarmRecordViewModel3.TotalPage, 1); #endregion //默认打开第一个界面 DoNavChanged("RealTimeDataView"); } #region Page Switching public void DoNavChanged(object obj) { if (obj.ToString() == "1" || obj.ToString() == "2" || obj.ToString() == "3" || obj.ToString() == "4" || obj.ToString() == "5") //说明是站点切换按钮 { if (station_id == Convert.ToInt32(obj)) //如果切换的界面和之前一样 那就不切换 return; station_id = Convert.ToInt32(obj); } else if (obj.ToString() == "") { } else { if (Title_Name == obj.ToString()) return; Title_Name = obj.ToString(); } //切换页面之前清理一下内存 Tools.ClearMemory(this); Type type = Type.GetType("FujianEarthquake.Views." + Title_Name); ConstructorInfo cti = type.GetConstructor(System.Type.EmptyTypes); FrameworkElement page = (FrameworkElement)cti.Invoke(null); if (station_id == 1) { switch (Title_Name) { case "RealTimeDataView": page.DataContext = realTimeDataViewModel1; break; //case "SystemEnvironDataView": // systemEnvironDataViewModel1.RefreshFile(obj); // page.DataContext = systemEnvironDataViewModel1; // break; //case "SystemMonitorDataView": // page.DataContext = systemMonitorDataViewModel1; // break; //case "BoosterStationStateDataView": // page.DataContext = boosterStationStateDataViewModel1; // break; //case "SeismometerStateDataView": // MainViewModel.seismometerStateDataViewModel1.MainSeisIsChecked = true; // page.DataContext = seismometerStateDataViewModel1; // break; //case "SeismometerParameterView": // MainViewModel.seismometerParameterViewModel1.BackupSeisIsChecked = false; // page.DataContext = seismometerParameterViewModel1; // break; //case "SystemControlView": // MainSeisIsChecked = true; // baseStationStateModel1.JunBox_Elect = (ImageSource)Application.Current.FindResource("NoDevice"); // ElectPowerOpenBtnIsEnabled = false; // ElectPowerCloseBtnIsEnabled = false; // BSSM = baseStationStateModel1; // break; case "LogRecordView": page.DataContext = logRecordViewModel1; break; case "AlarmRecordView": page.DataContext = alarmRecordViewModel1; break; default: break; } } else if (station_id == 2) { switch (Title_Name) { case "RealTimeDataView": page.DataContext = realTimeDataViewModel2; break; //case "SystemEnvironDataView": // page.DataContext = systemEnvironDataViewModel2; // break; //case "SystemMonitorDataView": // page.DataContext = systemMonitorDataViewModel2; // break; //case "BoosterStationStateDataView": // page.DataContext = boosterStationStateDataViewModel2; // break; //case "SeismometerStateDataView": // MainViewModel.seismometerStateDataViewModel2.MainSeisIsChecked = true; // page.DataContext = seismometerStateDataViewModel2; // break; //case "SeismometerParameterView": // MainViewModel.seismometerParameterViewModel1.BackupSeisIsChecked = false; // page.DataContext = seismometerParameterViewModel2; // break; //case "SystemControlView": // MainSeisIsChecked = true; // ElectPowerOpenBtnIsEnabled = true; // ElectPowerCloseBtnIsEnabled = true; // BSSM = baseStationStateModel2; // break; case "LogRecordView": page.DataContext = logRecordViewModel2; break; case "AlarmRecordView": page.DataContext = alarmRecordViewModel2; break; default: break; } } else if (station_id == 3) { switch (Title_Name) { case "RealTimeDataView": page.DataContext = realTimeDataViewModel3; break; case "LogRecordView": page.DataContext = logRecordViewModel3; break; case "AlarmRecordView": page.DataContext = alarmRecordViewModel3; break; default: break; } } //else if (station_id == 4) //{ // switch (Title_Name) // { // case "RealTimeDataView": // page.DataContext = realTimeDataViewModel4; // break; // case "LogRecordView": // page.DataContext = logRecordViewModel4; // break; // case "AlarmRecordView": // page.DataContext = alarmRecordViewModel4; // break; // default: // break; // } //} //else if (station_id == 5) //{ // switch (Title_Name) // { // case "RealTimeDataView": // page.DataContext = realTimeDataViewModel5; // break; // case "LogRecordView": // page.DataContext = logRecordViewModel5; // break; // case "AlarmRecordView": // page.DataContext = alarmRecordViewModel5; // break; // default: // break; // } //} this.PageContent = page; } #endregion } }