diff --git a/SlnMesnac.Business/business/RfidHandleBusniess.cs b/SlnMesnac.Business/business/RfidHandleBusniess.cs index 88f6540..e166b94 100644 --- a/SlnMesnac.Business/business/RfidHandleBusniess.cs +++ b/SlnMesnac.Business/business/RfidHandleBusniess.cs @@ -17,17 +17,62 @@ namespace SlnMesnac.Business.business /// public class RfidHandleBusniess { - private readonly HidUtils _utils; - private IBaseStaffService _baseStaffService; - public string _uidCode = ""; - - public RfidHandleBusniess(HidUtils utils,IBaseStaffService baseStaffService) + private IRecordStaffAttendanceService _recordStaffAttendanceService; + private IRecordStaffCommuteService _recordStaffCommuteService; + + public RfidHandleBusniess(IRecordStaffAttendanceService recordStaffAttendanceService, IRecordStaffCommuteService recordStaffCommuteService) { - this._utils = utils; - this._baseStaffService = baseStaffService; + this._recordStaffAttendanceService = recordStaffAttendanceService; + this._recordStaffCommuteService = recordStaffCommuteService; } - string staffInfo = ""; - string tagInfoStr = ""; + + /// + /// 处理并插入打卡记录 + /// + /// + /// + /// + public List HandleAndInsertStaffAttendance(BaseStaffInfo staff,int isCheckOn) + { + RecordStaffAttendance recordStaffAttendance = new RecordStaffAttendance + { + StaffId = staff.StaffId, + AttendanceType = isCheckOn.ToString(), + TeamCode = staff.TeamCode, + Remark = staff.Remark, + CreateBy = staff.StaffName, + CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + }; + _recordStaffAttendanceService.Insert(recordStaffAttendance); + return _recordStaffAttendanceService.GetRecordStaffAttendances(); + } + + /// + /// 处理上下班记录 + /// + public void HandleStaffCommute(BaseStaffInfo staff, int isCheckOn) + { + if(isCheckOn == 0) + { + RecordStaffCommute recordStaffCommute = new RecordStaffCommute + { + StaffId = staff.StaffId, + TeamCode = staff.TeamCode, + //Classes = + StartWorkTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), + Remark = staff.Remark, + CreateBy = staff.StaffName, + CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + }; + _recordStaffCommuteService.Insert(recordStaffCommute); + } + else + { + //根据id和上班时间不超过九小时的查找对应记录 + RecordStaffCommute recordStaffCommute = _recordStaffCommuteService.GetStaffCommuteByIdAndDuration(staff.StaffId, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); + //更新这个记录的下班打卡时间和在班时长率 + } + } } } diff --git a/SlnMesnac.Repository/service/IRecordStaffCommuteService.cs b/SlnMesnac.Repository/service/IRecordStaffCommuteService.cs index 2a0280c..d14a9ff 100644 --- a/SlnMesnac.Repository/service/IRecordStaffCommuteService.cs +++ b/SlnMesnac.Repository/service/IRecordStaffCommuteService.cs @@ -13,5 +13,13 @@ namespace SlnMesnac.Repository.service /// /// List GetRecordStaffCommutes(); + + /// + /// 根据员工id和时长查找对应记录 + /// + /// + /// + /// + RecordStaffCommute GetStaffCommuteByIdAndDuration(string id,string currentTime); } } diff --git a/SlnMesnac.Repository/service/Impl/RecordStaffCommuteServiceImpl.cs b/SlnMesnac.Repository/service/Impl/RecordStaffCommuteServiceImpl.cs index 2c30424..b8e7637 100644 --- a/SlnMesnac.Repository/service/Impl/RecordStaffCommuteServiceImpl.cs +++ b/SlnMesnac.Repository/service/Impl/RecordStaffCommuteServiceImpl.cs @@ -4,6 +4,7 @@ using SlnMesnac.Model.domain; using SlnMesnac.Repository.service.@base; using System; using System.Collections.Generic; +using System.Globalization; using System.Text; namespace SlnMesnac.Repository.service.Impl @@ -21,5 +22,15 @@ namespace SlnMesnac.Repository.service.Impl { return null; } + + public RecordStaffCommute GetStaffCommuteByIdAndDuration(string id, string currentTime) + { + DateTime currentDateTime = DateTime.ParseExact(currentTime, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture); + RecordStaffCommute recordStaffCommute = _rep.AsQueryable().Where(x => x.StaffId == id) + .Where(x => + (DateTime.ParseExact(x.StartWorkTime, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture) - currentDateTime).TotalHours > 10) + .First(); + return recordStaffCommute; + } } } diff --git a/SlnMesnac.WPF/ViewModel/EmployeeLoginViewModel.cs b/SlnMesnac.WPF/ViewModel/EmployeeLoginViewModel.cs index a30218b..4a78e59 100644 --- a/SlnMesnac.WPF/ViewModel/EmployeeLoginViewModel.cs +++ b/SlnMesnac.WPF/ViewModel/EmployeeLoginViewModel.cs @@ -30,6 +30,7 @@ namespace SlnMesnac.WPF.ViewModel private readonly RfidHandleBusniess _rfidHandleBusniess; private IBaseStaffService baseStaffService; private IRecordStaffAttendanceService _recordStaffAttendanceService; + private IRecordStaffCommuteService _recordStaffCommuteService; private string _checkInButtonText = "上班打卡"; private string _checkOutButtonText = "下班打卡"; public string _isCheckInButtonEnabled; @@ -39,13 +40,15 @@ namespace SlnMesnac.WPF.ViewModel 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 定义命令 /// /// 上班命令 /// @@ -58,6 +61,7 @@ namespace SlnMesnac.WPF.ViewModel /// 结束命令 /// public ICommand OverCommand { get; private set; } + #endregion public EmployeeLoginViewModel() { @@ -67,6 +71,7 @@ namespace SlnMesnac.WPF.ViewModel 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"; @@ -82,39 +87,39 @@ namespace SlnMesnac.WPF.ViewModel hidUtils.Initial(); hidUtils.pushReceiveDataEvent += (bytes, str) => { - str = str.ToString().Replace(" ", ""); - if (isUse) + string cleanStr = str.ToString().Replace(" ", ""); + if (!IsDuplicate(cleanStr))//过滤重复str { - BaseStaffInfo user = baseStaffService.GetStaffInfoByCardId(str); - if (user != null) + uniqueStrings.Add(cleanStr); + timestamps.Add(DateTime.Now); + // Additional logic for processing the unique string goes here + if (isUse) { - StaffIdText = user.StaffId; - CheckStatus = user.StaffName + " " + user.TeamCode + " 打卡成功!"; - RecordStaffAttendance recordStaffAttendance = new RecordStaffAttendance + BaseStaffInfo user = baseStaffService.GetStaffInfoByCardId(cleanStr); + if (user != null) { - StaffId = user.StaffId, - AttendanceType = isCheckOn.ToString(), - TeamCode = user.TeamCode, - Remark = user.Remark, - CreateBy = user.StaffName, - CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), - }; + 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); - _recordStaffAttendanceService.Insert(recordStaffAttendance); - var list = _recordStaffAttendanceService.GetRecordStaffAttendances(); - - System.Windows.Application.Current.Dispatcher.Invoke((Action)(async () => + } + else { - RecordStaffAttendanceDataGrid.Clear(); - list.ForEach(item => { RecordStaffAttendanceDataGrid.Add(item); }); - })); + StaffIdText = "未配置"; + CheckStatus = "没有匹配的员工,打卡失败!"; + } } - else - { - StaffIdText = "未配置"; - CheckStatus = "没有匹配的员工,打卡失败!"; - } - } + } + else + { + StaffIdText = "已打卡,请勿重复!"; + } }; } @@ -123,7 +128,7 @@ namespace SlnMesnac.WPF.ViewModel return hidUtils; } - #region + #region 绑定参数 /// /// 上班打卡文本 /// @@ -301,6 +306,22 @@ namespace SlnMesnac.WPF.ViewModel 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 = "") diff --git a/SlnMesnac.WPF/ViewModel/MainWindowViewModel.cs b/SlnMesnac.WPF/ViewModel/MainWindowViewModel.cs index 1188b12..925a892 100644 --- a/SlnMesnac.WPF/ViewModel/MainWindowViewModel.cs +++ b/SlnMesnac.WPF/ViewModel/MainWindowViewModel.cs @@ -19,7 +19,7 @@ using System.Windows.Threading; namespace SlnMesnac.WPF.ViewModel { - public class MainWindowViewModel: ViewModelBase, INotifyPropertyChanged + public class MainWindowViewModel: INotifyPropertyChanged { private readonly ILogger _logger; @@ -43,25 +43,25 @@ namespace SlnMesnac.WPF.ViewModel // set { _PlcStatus = value; RaisePropertyChanged(nameof(PlcStatus)); } //} - /// - /// 打卡机状态 - /// - private int _clockStatus = 0; - public int ClockStatus - { - get { return _clockStatus; } - set { _clockStatus = value; RaisePropertyChanged(nameof(ClockStatus)); } - } + ///// + ///// 打卡机状态 + ///// + //private int _clockStatus = 0; + //public int ClockStatus + //{ + // get { return _clockStatus; } + // set { _clockStatus = value; RaisePropertyChanged(nameof(ClockStatus)); } + //} - /// - /// 扫码枪状态 - /// - private int _codeGunStatus = 0; - public int CodeGunStatus - { - get { return _codeGunStatus; } - set { _codeGunStatus = value; RaisePropertyChanged(nameof(CodeGunStatus)); } - } + ///// + ///// 扫码枪状态 + ///// + //private int _codeGunStatus = 0; + //public int CodeGunStatus + //{ + // get { return _codeGunStatus; } + // set { _codeGunStatus = value; RaisePropertyChanged(nameof(CodeGunStatus)); } + //} public System.Windows.Controls.UserControl _content; @@ -72,7 +72,7 @@ namespace SlnMesnac.WPF.ViewModel set { _content = value; - RaisePropertyChanged(nameof(UserContent)); + OnPropertyChanged("UserContent"); } } #endregion