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