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; private int status = 0;//0是上班,1是下班 public static HidUtils hidUtils; public static bool isOnDuty = false;//是否有班组当班 private List uniqueStrings = new List(); private List timestamps = new List(); /// /// 按钮文字转换事件 /// public event PropertyChangedEventHandler PropertyChanged = delegate { }; #region 定义命令 /// /// 上班命令 /// public ICommand CheckInCommand { get; private set; } /// /// 下班命令 /// public ICommand CheckOutCommand { get; private set; } /// /// 结束命令 /// public ICommand OverCommand { get; private set; } /// /// /// /// public delegate void TransmitUser(BaseStaffInfo staffInfo); public static event TransmitUser TransmitUserDelegateEvent; #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(" ", ""); StatusText = StaffIdText = CheckStatus = null; 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) { RecordStaffAttendance recordStaffAttendance = _recordStaffAttendanceService.GetRecordStaffAttendanceByStaffId(user.StaffId); if (recordStaffAttendance != null) { var createTime = recordStaffAttendance.CreateTime; var nowTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); TimeSpan timeDiff = DateTime.Parse(nowTime) - DateTime.Parse(createTime); if (timeDiff.TotalHours >= 10)// { if (recordStaffAttendance.AttendanceType == "1") //下班卡 { if (recordStaffAttendance.AttendanceType == status.ToString()) { StatusText = "未打上班卡,请联系管理员!"; } } else if (recordStaffAttendance.AttendanceType == "0") { if (recordStaffAttendance.AttendanceType == status.ToString()) { StatusText = "未打下班卡,请联系管理员!"; } } 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 { if (recordStaffAttendance.AttendanceType != status.ToString()) { 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 { StatusText = "请勿重复打卡!"; } } } else { StaffIdText = user.StaffId; CheckStatus = "打卡成功!"; 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 = "没有匹配的员工,打卡失败!"; } TransmitUserDelegateEvent?.Invoke(user); } } 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"); } } //Status /// /// 状态 /// private string statusText; public string StatusText { get { return statusText; } set { statusText = value; OnPropertyChanged("StatusText"); } } 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() { isOnDuty = true; if (CheckInButtonText == "上班打卡") { // 执行上班打卡逻辑 isCheckOn = 0; status = 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() { isOnDuty = false; if (CheckOutButtonText == "下班打卡") { // 执行下班打卡逻辑 isCheckOn = 1; isUse = true; status = 1; 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]).TotalSeconds < 30) { return true; } } return false; } public void OnPropertyChanged([CallerMemberName] string propertyName = "") { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } }