|
|
@@ -1,5 +1,6 @@
|
|
|
using Newtonsoft.Json;
|
|
|
using Newtonsoft.Json.Linq;
|
|
|
+using OpenCvSharp;
|
|
|
using Prism.Commands;
|
|
|
using Prism.Events;
|
|
|
using Prism.Ioc;
|
|
|
@@ -8,13 +9,20 @@ using Prism.Regions;
|
|
|
using Prism.Services.Dialogs;
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
+using System.Collections.ObjectModel;
|
|
|
using System.Linq;
|
|
|
using System.Net.Http;
|
|
|
using System.Text;
|
|
|
+using System.Threading.Tasks;
|
|
|
using System.Windows;
|
|
|
using TeamAAS_VP.Core;
|
|
|
using TeamAAS_VP.Core.Lights;
|
|
|
+using TeamAAS_VP.Data;
|
|
|
+using TeamAAS_VP.Enums;
|
|
|
+using TeamAAS_VP.Events;
|
|
|
using TeamAAS_VP.Interfaces;
|
|
|
+using TeamAAS_VP.Models;
|
|
|
+using TeamAAS_VP.Resources.Languages;
|
|
|
using TeamAAS_VP.Views;
|
|
|
using TeamAAS_VP.Views.User;
|
|
|
|
|
|
@@ -23,22 +31,29 @@ namespace TeamAAS_VP.ViewModels.User
|
|
|
public class CardLoginWindowViewModel : BindableBase
|
|
|
{
|
|
|
#region 字段
|
|
|
- IRegionManager _regionManager;
|
|
|
- IRegionNavigationService _regionNavigationService;
|
|
|
- IContainerProvider _container;
|
|
|
- IDialogService _dialogService;
|
|
|
- IEventAggregator _eventAggregator;
|
|
|
IConfigService _configService;
|
|
|
- System.Net.Http.HttpClient httpClient;
|
|
|
+ private readonly ISystemDatabaseService _systemDatabaseService;
|
|
|
+ private List<TeamAAS_VP.Models.User> Users;
|
|
|
#endregion
|
|
|
|
|
|
#region 属性
|
|
|
|
|
|
- private string _Name;
|
|
|
- public string Name
|
|
|
+ private ObservableCollection<string> _UserNameList = new ObservableCollection<string>();
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 用户列表
|
|
|
+ /// </summary>
|
|
|
+ public ObservableCollection<string> UserNameList
|
|
|
+ {
|
|
|
+ get { return _UserNameList; }
|
|
|
+ set { _UserNameList = value; }
|
|
|
+ }
|
|
|
+
|
|
|
+ private string _SelectedUserName;
|
|
|
+ public string SelectedUserName
|
|
|
{
|
|
|
- get { return _Name; }
|
|
|
- set { SetProperty(ref _Name, value); }
|
|
|
+ get { return _SelectedUserName; }
|
|
|
+ set { SetProperty(ref _SelectedUserName, value); }
|
|
|
}
|
|
|
|
|
|
private string _Password;
|
|
|
@@ -48,6 +63,8 @@ namespace TeamAAS_VP.ViewModels.User
|
|
|
set { SetProperty(ref _Password, value); }
|
|
|
}
|
|
|
|
|
|
+ public bool IsRemember { get; set; }
|
|
|
+
|
|
|
public bool IsLocal { get; private set; }
|
|
|
public CardLoginWindow View { get; set; }
|
|
|
|
|
|
@@ -79,7 +96,7 @@ namespace TeamAAS_VP.ViewModels.User
|
|
|
#region 命令
|
|
|
private DelegateCommand _LoginCommand;
|
|
|
public DelegateCommand LoginCommand =>
|
|
|
- _LoginCommand ?? (_LoginCommand = new DelegateCommand(ExecuteLoginCommand, CanExecuteLoginCommand).ObservesProperty(() => Name).ObservesProperty(() => Password).ObservesProperty(() => IsLogining));
|
|
|
+ _LoginCommand ?? (_LoginCommand = new DelegateCommand(ExecuteLoginCommand, CanExecuteLoginCommand).ObservesProperty(() => SelectedUserName).ObservesProperty(() => Password).ObservesProperty(() => IsLogining));
|
|
|
|
|
|
private DelegateCommand _CloseCommand;
|
|
|
public DelegateCommand CloseCommand =>
|
|
|
@@ -98,18 +115,10 @@ namespace TeamAAS_VP.ViewModels.User
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
- public CardLoginWindowViewModel(IRegionManager regionManager, IEventAggregator ea, IRegionNavigationService regionNavigationService, IContainerProvider container, IDialogService dialogService, IConfigService configService)
|
|
|
+ public CardLoginWindowViewModel(IConfigService configService, ISystemDatabaseService systemDatabaseService)
|
|
|
{
|
|
|
- _regionManager = regionManager;
|
|
|
- _regionNavigationService = regionNavigationService;
|
|
|
- _container = container;
|
|
|
- _dialogService = dialogService;
|
|
|
_configService = configService;
|
|
|
- _eventAggregator = ea;
|
|
|
- if (httpClient == null)
|
|
|
- {
|
|
|
- httpClient = new System.Net.Http.HttpClient();
|
|
|
- }
|
|
|
+ _systemDatabaseService = systemDatabaseService;
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -121,10 +130,44 @@ namespace TeamAAS_VP.ViewModels.User
|
|
|
{
|
|
|
//获取刷卡器配置
|
|
|
var cardConfig = _configService.GetCardReaderConfig();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ Users = _systemDatabaseService.GetAllUsersAsync().GetAwaiter().GetResult()?.ToList();
|
|
|
+ }
|
|
|
+ catch
|
|
|
+ {
|
|
|
+ Users = new List<TeamAAS_VP.Models.User>();
|
|
|
+ }
|
|
|
+ TeamAAS_VP.Models.User rememberUser = null;
|
|
|
+ if (Users != null)
|
|
|
+ {
|
|
|
+ UserNameList.Clear();
|
|
|
+ foreach (var user in Users)
|
|
|
+ {
|
|
|
+ UserNameList.Add(user.UserName);
|
|
|
+ if (user.IsRemember)
|
|
|
+ {
|
|
|
+ rememberUser = user;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //对记住的用户界面绑定
|
|
|
+ if (rememberUser != null)
|
|
|
+ {
|
|
|
+ SelectedUserName = UserNameList.FirstOrDefault(p => p == rememberUser.UserName);
|
|
|
+ Password = rememberUser.UserPassword;
|
|
|
+ IsRemember = true;
|
|
|
+ }
|
|
|
+
|
|
|
//创建刷卡器通讯
|
|
|
serialPortProtocol = new SerialPortProtocol(cardConfig);
|
|
|
serialPortProtocol.DataReceived += CardSerial_DataReceived;
|
|
|
- await serialPortProtocol.ConnectAsync();
|
|
|
+ bool isConnected = await serialPortProtocol.ConnectAsync();
|
|
|
+ if (!isConnected)
|
|
|
+ {
|
|
|
+ MessageBox.Show("刷卡器连接失败,请检查连接!");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private async void CardSerial_DataReceived(object sender, string code)
|
|
|
@@ -135,21 +178,71 @@ namespace TeamAAS_VP.ViewModels.User
|
|
|
{
|
|
|
return;
|
|
|
}
|
|
|
-
|
|
|
+ Models.User user = new Models.User();
|
|
|
+ user.UserName = code;
|
|
|
+ user.userPart = UserPart.Engineer;
|
|
|
+ user.UserPassword = code; //刷卡密码默认为卡号
|
|
|
+ user.CreateTime = DateTime.Now;
|
|
|
+ user.Id = -1;
|
|
|
+
|
|
|
+ await _systemDatabaseService.SetCurrentUserAsync(user);
|
|
|
+
|
|
|
+ View.DialogResult = true;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
|
|
+ public async void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
|
|
|
{
|
|
|
+ if (serialPortProtocol!=null)
|
|
|
+ {
|
|
|
+ serialPortProtocol.DataReceived -= CardSerial_DataReceived;
|
|
|
+ }
|
|
|
+ await serialPortProtocol?.DisconnectAsync();
|
|
|
+
|
|
|
serialPortProtocol?.Dispose();
|
|
|
+ serialPortProtocol = null;
|
|
|
}
|
|
|
|
|
|
async void ExecuteLoginCommand()
|
|
|
{
|
|
|
+ if (Users == null || string.IsNullOrEmpty(SelectedUserName))
|
|
|
+ return;
|
|
|
+
|
|
|
IsLogining = true;
|
|
|
try
|
|
|
{
|
|
|
-
|
|
|
+ if (_systemDatabaseService.GetCurrentUser() != null)
|
|
|
+ {
|
|
|
+ if (_systemDatabaseService.GetCurrentUser().UserName == SelectedUserName)
|
|
|
+ {
|
|
|
+ View.DialogResult = true;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // authenticate via system database service
|
|
|
+ var user = await _systemDatabaseService.AuthenticateUserAsync(SelectedUserName, Password);
|
|
|
+ if (user != null)
|
|
|
+ {
|
|
|
+ // set remember flag via system database service
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (IsRemember)
|
|
|
+ await _systemDatabaseService.SetRememberUserAsync(SelectedUserName);
|
|
|
+ else
|
|
|
+ await _systemDatabaseService.ClearRememberUserAsync();
|
|
|
+ }
|
|
|
+ catch
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // mark current user in system DB and record login
|
|
|
+ await _systemDatabaseService.SetCurrentUserAsync(user.Id);
|
|
|
+ await _systemDatabaseService.RecordUserLoginAsync(new UserLoginRecord { UserId = user.Id, Success = true, Time = DateTime.UtcNow, Message = "Login success" });
|
|
|
+ View.DialogResult = true;
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
@@ -163,7 +256,7 @@ namespace TeamAAS_VP.ViewModels.User
|
|
|
|
|
|
bool CanExecuteLoginCommand()
|
|
|
{
|
|
|
- return !string.IsNullOrEmpty(Name) && !string.IsNullOrEmpty(Password) && !IsLogining;
|
|
|
+ return !string.IsNullOrEmpty(SelectedUserName) && !IsLogining;
|
|
|
}
|
|
|
|
|
|
void ExecuteCloseCommand()
|