using ConsoleApp; using GalaSoft.MvvmLight; using GalaSoft.MvvmLight.Command; using HslCommunication; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using SlnMesnac.Business.business; using SlnMesnac.Common; using SlnMesnac.Model.domain; using SlnMesnac.Model.dto; using SlnMesnac.Repository.service; using SlnMesnac.Repository.service.Impl; using SqlSugar; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; using System.Windows.Input; using static Microsoft.WindowsAPICodePack.Shell.PropertySystem.SystemProperties.System; namespace SlnMesnac.WPF.ViewModel { public class EmployeeLoginViewModel : INotifyPropertyChanged { private readonly ILogger _logger; private readonly RfidHandleBusniess _rfidHandleBusniess; private IBaseStaffService baseStaffService; private IRecordStaffAttendanceService _recordStaffAttendanceService; private IRecordStaffCommuteService _recordStaffCommuteService; private string _checkInButtonText = "上班打卡"; private string _checkOutButtonText = "下班打卡"; public string _isCheckInButtonEnabled; private string _isCheckOutButtonEnabled; private string _checkInButtonColor; private string _checkOutButtonColor = "#009999"; private int isCheckOn = 0; private bool isUse = false; public static HidUtils hidUtils; private List uniqueStrings = new List(); private List timestamps = new List(); /// /// 按钮文字转换事件 /// public event PropertyChangedEventHandler PropertyChanged; #region 定义命令 /// /// 上班命令 /// public ICommand CheckInCommand { get; private set; } /// /// 下班命令 /// public ICommand CheckOutCommand { get; private set; } /// /// 结束命令 /// public ICommand OverCommand { get; private set; } #endregion public EmployeeLoginViewModel() { hidUtils = new HidUtils(); CheckInCommand = new RelayCommand(CheckIn); CheckOutCommand = new RelayCommand(CheckOut); OverCommand = new RelayCommand(Over); baseStaffService = App.ServiceProvider.GetService(); _recordStaffAttendanceService = App.ServiceProvider.GetService(); _recordStaffCommuteService = App.ServiceProvider.GetService(); _rfidHandleBusniess = App.ServiceProvider.GetService(); //_rfidHandleBusniess.InstructionInfoDataGridEvent += RefreshRfidInfo; IsCheckInButtonEnabled = "True"; IsCheckOutButtonEnabled = "True"; CheckInButtonColor = "#009999"; CheckOutButtonColor = "#009999"; Init(); } private void Init() { hidUtils.Initial(); hidUtils.pushReceiveDataEvent += (bytes, str) => { string cleanStr = str.ToString().Replace(" ", ""); if (!IsDuplicate(cleanStr))//过滤重复str { uniqueStrings.Add(cleanStr); timestamps.Add(DateTime.Now); // Additional logic for processing the unique string goes here if (isUse) { BaseStaffInfo user = baseStaffService.GetStaffInfoByCardId(cleanStr); if (user != null) { StaffIdText = user.StaffId; CheckStatus = user.StaffName + " " + user.TeamCode + " 打卡成功!"; var list = _rfidHandleBusniess.HandleAndInsertStaffAttendance(user,isCheckOn); System.Windows.Application.Current.Dispatcher.Invoke((Action)(async () => { RecordStaffAttendanceDataGrid.Clear(); list.ForEach(item => { RecordStaffAttendanceDataGrid.Add(item); }); })); _rfidHandleBusniess.HandleStaffCommute(user, isCheckOn); } else { StaffIdText = "未配置"; CheckStatus = "没有匹配的员工,打卡失败!"; } } } else { StaffIdText = "已打卡,请勿重复!"; } }; } public HidUtils getHidUtil() { return hidUtils; } #region 绑定参数 /// /// 上班打卡文本 /// public string CheckInButtonText { get { return _checkInButtonText; } set { _checkInButtonText = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(CheckInButtonText))); } } /// /// 上班打卡 /// public string IsCheckInButtonEnabled { get { return _isCheckInButtonEnabled; } set { _isCheckInButtonEnabled = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IsCheckInButtonEnabled))); } } /// ///下班打卡文本 /// public string CheckOutButtonText { get { return _checkOutButtonText; } set { _checkOutButtonText = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(CheckOutButtonText))); } } /// /// 下班打卡 /// public string IsCheckOutButtonEnabled { get { return _isCheckOutButtonEnabled; } set { _isCheckOutButtonEnabled = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IsCheckOutButtonEnabled))); } } /// /// 上班打卡按钮颜色 /// public string CheckInButtonColor { get { return _checkInButtonColor; } set { _checkInButtonColor = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(CheckInButtonColor))); } } /// /// 下班打卡按钮颜色 /// public string CheckOutButtonColor { get { return _checkOutButtonColor; } set { _checkOutButtonColor = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(CheckOutButtonColor))); } } /// /// 员工id /// private string staffId; public string StaffIdText { get { return staffId; } set { staffId = value; OnPropertyChanged("StaffIdText"); } } /// /// 打卡状态 /// private string checkStatus; public string CheckStatus { get { return checkStatus; } set { checkStatus = value; OnPropertyChanged("CheckStatus"); } } private ObservableCollection item = new ObservableCollection(); /// /// DataGrid /// private ObservableCollection recordStaffAttendanceDataGrid = new ObservableCollection(); public ObservableCollection RecordStaffAttendanceDataGrid { get { return recordStaffAttendanceDataGrid; } set { recordStaffAttendanceDataGrid = value; OnPropertyChanged("RecordStaffAttendanceDataGrid"); } } #endregion /// /// 上班打卡事件 /// private void CheckIn() { if (CheckInButtonText == "上班打卡") { // 执行上班打卡逻辑 isCheckOn = 0; isUse = true; CheckInButtonText = "结束打卡"; IsCheckOutButtonEnabled = "False"; // Disable CheckOutButton CheckOutButtonColor = "Gray"; hidUtils.StartScan(); } else { // 执行结束打卡逻辑 CheckInButtonText = "上班打卡"; IsCheckOutButtonEnabled = "True"; // Enable CheckOutButton CheckOutButtonColor = "#009999"; hidUtils.StopScan(); isCheckOn = 1; isUse = false; } } /// /// 下班打卡事件 /// private void CheckOut() { if (CheckOutButtonText == "下班打卡") { // 执行下班打卡逻辑 isCheckOn = 1; isUse = true; CheckOutButtonText = "结束打卡"; IsCheckInButtonEnabled = "False"; // Disable CheckInButton CheckInButtonColor = "Gray"; hidUtils.StartScan(); } else { // 执行结束打卡逻辑 CheckOutButtonText = "下班打卡"; IsCheckInButtonEnabled = "True"; // Enable CheckInButton CheckInButtonColor = "#009999"; hidUtils.StopScan(); isCheckOn = 0; isUse = false; } } /// /// 结束打卡事件 /// private void Over() { // 执行结束打卡的逻辑 CheckInButtonText = "上班打卡"; CheckOutButtonText = "下班打卡"; } /// /// 30分钟内过滤重复str /// /// /// private bool IsDuplicate(string str) { for (int i = 0; i < uniqueStrings.Count; i++) { if (uniqueStrings[i] == str && (DateTime.Now - timestamps[i]).TotalMinutes < 30) { return true; } } return false; } //public event PropertyChangedEventHandler PropertyChanged; public void OnPropertyChanged([CallerMemberName] string propertyName = "") { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } }