diff --git a/SlnMesnac.Business/business/RfidHandleBusniess.cs b/SlnMesnac.Business/business/RfidHandleBusniess.cs index e166b94..a99600e 100644 --- a/SlnMesnac.Business/business/RfidHandleBusniess.cs +++ b/SlnMesnac.Business/business/RfidHandleBusniess.cs @@ -19,6 +19,7 @@ namespace SlnMesnac.Business.business { private IRecordStaffAttendanceService _recordStaffAttendanceService; private IRecordStaffCommuteService _recordStaffCommuteService; + private string currentTime; public RfidHandleBusniess(IRecordStaffAttendanceService recordStaffAttendanceService, IRecordStaffCommuteService recordStaffCommuteService) { @@ -69,9 +70,13 @@ namespace SlnMesnac.Business.business } else { + currentTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); //根据id和上班时间不超过九小时的查找对应记录 - RecordStaffCommute recordStaffCommute = _recordStaffCommuteService.GetStaffCommuteByIdAndDuration(staff.StaffId, DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); + RecordStaffCommute recordStaffCommute = _recordStaffCommuteService.GetStaffCommuteByIdAndDuration(staff.StaffId, currentTime); //更新这个记录的下班打卡时间和在班时长率 + recordStaffCommute.EndWorkTime = currentTime; + recordStaffCommute.ClockingRatio = Convert.ToDecimal((DateTime.Parse(recordStaffCommute.EndWorkTime) - DateTime.Parse(recordStaffCommute.StartWorkTime)).TotalHours); + _recordStaffCommuteService.Update(recordStaffCommute); } } } diff --git a/SlnMesnac.Model/domain/RecordStaffCommute.cs b/SlnMesnac.Model/domain/RecordStaffCommute.cs index 16d7d82..a8bd6d5 100644 --- a/SlnMesnac.Model/domain/RecordStaffCommute.cs +++ b/SlnMesnac.Model/domain/RecordStaffCommute.cs @@ -50,7 +50,7 @@ namespace SlnMesnac.Model.domain /// 在班时长率 /// [SugarColumn(ColumnName = "clocking_ratio")] - public string ClockingRatio { get; set; } + public decimal ClockingRatio { get; set; } /// /// 备注 diff --git a/SlnMesnac.Repository/service/IRecordStaffAttendanceService.cs b/SlnMesnac.Repository/service/IRecordStaffAttendanceService.cs index e7de803..06dde45 100644 --- a/SlnMesnac.Repository/service/IRecordStaffAttendanceService.cs +++ b/SlnMesnac.Repository/service/IRecordStaffAttendanceService.cs @@ -14,6 +14,13 @@ namespace SlnMesnac.Repository.service /// List GetRecordStaffAttendances(); + /// + /// 根据员工id查询 + /// + /// + /// + RecordStaffAttendance GetRecordStaffAttendanceByStaffId(string staffId); + /// /// 验证添加员工打卡记录 /// diff --git a/SlnMesnac.Repository/service/Impl/RecordStaffAttendanceServiceImpl.cs b/SlnMesnac.Repository/service/Impl/RecordStaffAttendanceServiceImpl.cs index 7a92748..5481414 100644 --- a/SlnMesnac.Repository/service/Impl/RecordStaffAttendanceServiceImpl.cs +++ b/SlnMesnac.Repository/service/Impl/RecordStaffAttendanceServiceImpl.cs @@ -32,6 +32,18 @@ namespace SlnMesnac.Repository.service.Impl return records; } + public RecordStaffAttendance GetRecordStaffAttendanceByStaffId(string staffId) + { + RecordStaffAttendance recordStaffAttendances = _rep.AsQueryable().Where(x => x.StaffId == staffId).OrderByDescending(x => x.CreateTime).First(); + if (recordStaffAttendances != null) + { + return recordStaffAttendances; + } + else + { + return null; + } + } public bool InsertRecordStaffAttendance(List records) { diff --git a/SlnMesnac.Repository/service/Impl/RecordStaffCommuteServiceImpl.cs b/SlnMesnac.Repository/service/Impl/RecordStaffCommuteServiceImpl.cs index b8e7637..138979b 100644 --- a/SlnMesnac.Repository/service/Impl/RecordStaffCommuteServiceImpl.cs +++ b/SlnMesnac.Repository/service/Impl/RecordStaffCommuteServiceImpl.cs @@ -25,11 +25,7 @@ namespace SlnMesnac.Repository.service.Impl 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(); + RecordStaffCommute recordStaffCommute = _rep.AsQueryable().Where(x => x.StaffId == id).Where(x => Convert.ToDateTime(x.StartWorkTime).AddHours(10) > Convert.ToDateTime(currentTime)).First(); return recordStaffCommute; } } diff --git a/SlnMesnac.WPF/UserControls/EmployeeLoginPage.xaml b/SlnMesnac.WPF/UserControls/EmployeeLoginPage.xaml index c8a7c80..abdebc4 100644 --- a/SlnMesnac.WPF/UserControls/EmployeeLoginPage.xaml +++ b/SlnMesnac.WPF/UserControls/EmployeeLoginPage.xaml @@ -83,6 +83,7 @@ + @@ -102,6 +103,9 @@ + + + diff --git a/SlnMesnac.WPF/ViewModel/EmployeeLoginViewModel.cs b/SlnMesnac.WPF/ViewModel/EmployeeLoginViewModel.cs index 4a78e59..c6c54b6 100644 --- a/SlnMesnac.WPF/ViewModel/EmployeeLoginViewModel.cs +++ b/SlnMesnac.WPF/ViewModel/EmployeeLoginViewModel.cs @@ -39,6 +39,7 @@ namespace SlnMesnac.WPF.ViewModel private string _checkOutButtonColor = "#009999"; private int isCheckOn = 0; private bool isUse = false; + private int status = 0;//0是上班,1是下班 public static HidUtils hidUtils; private List uniqueStrings = new List(); private List timestamps = new List(); @@ -88,8 +89,9 @@ namespace SlnMesnac.WPF.ViewModel 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 @@ -98,6 +100,21 @@ namespace SlnMesnac.WPF.ViewModel BaseStaffInfo user = baseStaffService.GetStaffInfoByCardId(cleanStr); if (user != null) { + string attendanceType = _recordStaffAttendanceService.GetRecordStaffAttendanceByStaffId(user.StaffId)?.AttendanceType; + if (attendanceType == "1") //下班卡 + { + if (attendanceType == status.ToString()) + { + StatusText = "未打上班卡,请联系管理员!"; + } + } + else if (attendanceType == "0") + { + if (attendanceType == status.ToString()) + { + StatusText = "未打下班卡,请联系管理员!"; + } + } StaffIdText = user.StaffId; CheckStatus = user.StaffName + " " + user.TeamCode + " 打卡成功!"; var list = _rfidHandleBusniess.HandleAndInsertStaffAttendance(user,isCheckOn); @@ -107,7 +124,6 @@ namespace SlnMesnac.WPF.ViewModel list.ForEach(item => { RecordStaffAttendanceDataGrid.Add(item); }); })); _rfidHandleBusniess.HandleStaffCommute(user, isCheckOn); - } else { @@ -227,6 +243,17 @@ namespace SlnMesnac.WPF.ViewModel 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(); /// @@ -251,6 +278,7 @@ namespace SlnMesnac.WPF.ViewModel { // 执行上班打卡逻辑 isCheckOn = 0; + status = 0; isUse = true; CheckInButtonText = "结束打卡"; IsCheckOutButtonEnabled = "False"; // Disable CheckOutButton @@ -279,6 +307,7 @@ namespace SlnMesnac.WPF.ViewModel // 执行下班打卡逻辑 isCheckOn = 1; isUse = true; + status = 1; CheckOutButtonText = "结束打卡"; IsCheckInButtonEnabled = "False"; // Disable CheckInButton CheckInButtonColor = "Gray"; @@ -315,7 +344,7 @@ namespace SlnMesnac.WPF.ViewModel { for (int i = 0; i < uniqueStrings.Count; i++) { - if (uniqueStrings[i] == str && (DateTime.Now - timestamps[i]).TotalMinutes < 30) + if (uniqueStrings[i] == str && (DateTime.Now - timestamps[i]).TotalMinutes < 1) { return true; }