diff --git a/DM_Weight/App.xaml.cs b/DM_Weight/App.xaml.cs index 55f32dd..9c81398 100644 --- a/DM_Weight/App.xaml.cs +++ b/DM_Weight/App.xaml.cs @@ -25,6 +25,7 @@ namespace DM_Weight /// public partial class App : PrismApplication { + public static bool DbConnectionFail { get; set; } = false; private readonly ILog logger = LogManager.GetLogger(typeof(App)); public App() { @@ -52,7 +53,11 @@ namespace DM_Weight void OnDispatcherUnhandledException(object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { logger.Error($"发生错误:{e.Exception.Message}"); - e.Handled = true; + e.Handled = true; if (e.Exception.Message.Contains("连接数据库过程中发生错误")) + { + DbConnectionFail = true; + Container.Resolve(); + } } void OnUnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e) @@ -294,6 +299,9 @@ namespace DM_Weight //空页面,用于跳出登录时跳转以避免不走OnNavigatedFrom情况 containerRegistry.RegisterForNavigation(); + //紧急开锁页面 + containerRegistry.RegisterForNavigation(); + logger.Info("结束APP-RegisterTypes"); } diff --git a/DM_Weight/ViewModels/EmergencyWindowViewModel.cs b/DM_Weight/ViewModels/EmergencyWindowViewModel.cs new file mode 100644 index 0000000..fda0380 --- /dev/null +++ b/DM_Weight/ViewModels/EmergencyWindowViewModel.cs @@ -0,0 +1,89 @@ +using DM_Weight.Models; +using DM_Weight.msg; +using DM_Weight.Port; +using DM_Weight.util; +using log4net; +using Prism.Commands; +using Prism.Events; +using Prism.Mvvm; +using Prism.Regions; +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DM_Weight.ViewModels +{ + public class EmergencyWindowViewModel : BindableBase + { + private readonly ILog logger = LogManager.GetLogger(typeof(HomeWindowViewModel)); + IEventAggregator _eventAggregator; + private PortUtil _portUtil; + IRegionManager _regionManager; + SocketHelper _socketHelper; + private bool _dbConnectionFail = !App.DbConnectionFail; + public bool DBConnectionStatus { get=>_dbConnectionFail; set => SetProperty(ref _dbConnectionFail, value); } + public EmergencyWindowViewModel(IRegionManager regionManager, PortUtil portUtil, IEventAggregator eventAggregator, SocketHelper socketHelper) + { + _portUtil = portUtil; + _eventAggregator = eventAggregator; + _regionManager = regionManager; + _socketHelper = socketHelper; + CheckDBConnect(); + } + public DelegateCommand UpdateDrawerNo + { + get => new DelegateCommand((DrawerNo) => + { + //应急开锁 + logger.Info($"应急开锁正在打开{DrawerNo}号药箱"); + try + { + logger.Info($"发送开{DrawerNo}号药箱指令"); + _socketHelper.SendMessage(new MyBaseMessage() { lockNo = (short)(Convert.ToInt32(DrawerNo) - 1) }); + _socketHelper.dateTime = DateTime.Now; + logger.Info($"发开{DrawerNo}号药箱指令完成"); + } + catch (Exception ex) + { + AlertMsg alertMsg = new AlertMsg + { + Message = $"网口连接异常,开药箱正在重试{ex.Message}", + Type = MsgType.ERROR, + }; + _eventAggregator.GetEvent().Publish(alertMsg); + return; + } + } + ); + } + public DelegateCommand ReturnLoginDelegate + { + get => new DelegateCommand(() => + { + _regionManager.RequestNavigate("MainRegion", "LoginWindow"); + }); + } + //间隔1分钟查询数据库连接状态 + private void CheckDBConnect() + { + new PromiseUtil().taskAsyncLoop(60000, 0, async (options, next, stop) => + { + try + { + var userList = SqlSugarHelper.Db.Queryable() + .First(u => u.UserName == "admin"); + App.DbConnectionFail = false; + DBConnectionStatus = true; + stop(); + } + catch (Exception ex) + { + next(); + } + }); + } + } +} diff --git a/DM_Weight/ViewModels/MainWindowViewModel.cs b/DM_Weight/ViewModels/MainWindowViewModel.cs index 6a23e1b..ae79b7b 100644 --- a/DM_Weight/ViewModels/MainWindowViewModel.cs +++ b/DM_Weight/ViewModels/MainWindowViewModel.cs @@ -84,10 +84,15 @@ namespace DM_Weight.ViewModels //System.Windows.Application.Current.Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new Action(() => //{ - - _container.RegisterType("LoginWindow"); - _regionManager.RegisterViewWithRegion("MainRegion", "LoginWindow"); - + if (App.DbConnectionFail) + { + _regionManager.RequestNavigate("MainRegion", "EmergencyWindow"); + } + else + { + _container.RegisterType("LoginWindow"); + _regionManager.RegisterViewWithRegion("MainRegion", "LoginWindow"); + } //})); _socketHelper = socketHelper; new PromiseUtil().taskAsyncLoop(1200000, 0, async (options, next, stop) => diff --git a/DM_Weight/Views/EmergencyWindow.xaml b/DM_Weight/Views/EmergencyWindow.xaml new file mode 100644 index 0000000..e4626f1 --- /dev/null +++ b/DM_Weight/Views/EmergencyWindow.xaml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +