XiangTan_JiaoJie_Bak/DM_Weight/ViewModels/EmergencyWindowViewModel.cs

100 lines
3.5 KiB
C#

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.Diagnostics;
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<string> UpdateDrawerNo
{
get => new DelegateCommand<string>((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<SnackbarEvent>().Publish(alertMsg);
return;
}
}
);
}
public DelegateCommand ReturnLoginDelegate
{
get => new DelegateCommand(() =>
{
_regionManager.RequestNavigate("MainRegion", "LoginWindow");
});
}
private DelegateCommand? _exitCommand;
public DelegateCommand ExitCommand => _exitCommand ??= new DelegateCommand(Exit);
void Exit()
{
//_chkFunction.HIKLoginOut();
_socketHelper.SocketDisConnect();
Process.GetCurrentProcess().Kill();
Environment.Exit(0);
}
//间隔1分钟查询数据库连接状态
private void CheckDBConnect()
{
new PromiseUtil<int>().taskAsyncLoop(60000, 0, async (options, next, stop) =>
{
try
{
var userList = SqlSugarHelper.Db.Queryable<UserList>()
.First(u => u.UserName == "admin");
App.DbConnectionFail = false;
DBConnectionStatus = true;
stop();
}
catch (Exception ex)
{
next();
}
});
}
}
}