change -修改打卡存表记录在班时长业务

main
frankiecao 1 year ago
commit a48d90e089

@ -17,17 +17,62 @@ namespace SlnMesnac.Business.business
/// </summary> /// </summary>
public class RfidHandleBusniess public class RfidHandleBusniess
{ {
private readonly HidUtils _utils; private IRecordStaffAttendanceService _recordStaffAttendanceService;
private IBaseStaffService _baseStaffService; private IRecordStaffCommuteService _recordStaffCommuteService;
public string _uidCode = "";
public RfidHandleBusniess(IRecordStaffAttendanceService recordStaffAttendanceService, IRecordStaffCommuteService recordStaffCommuteService)
public RfidHandleBusniess(HidUtils utils,IBaseStaffService baseStaffService)
{ {
this._utils = utils; this._recordStaffAttendanceService = recordStaffAttendanceService;
this._baseStaffService = baseStaffService; this._recordStaffCommuteService = recordStaffCommuteService;
} }
string staffInfo = "";
string tagInfoStr = ""; /// <summary>
/// 处理并插入打卡记录
/// </summary>
/// <param name="staff"></param>
/// <param name="isCheckOn"></param>
/// <returns></returns>
public List<RecordStaffAttendance> 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();
}
/// <summary>
/// 处理上下班记录
/// </summary>
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"));
//更新这个记录的下班打卡时间和在班时长率
}
}
} }
} }

@ -13,5 +13,13 @@ namespace SlnMesnac.Repository.service
/// </summary> /// </summary>
/// <returns></returns> /// <returns></returns>
List<RecordStaffCommute> GetRecordStaffCommutes(); List<RecordStaffCommute> GetRecordStaffCommutes();
/// <summary>
/// 根据员工id和时长查找对应记录
/// </summary>
/// <param name="id"></param>
/// <param name="currentTime"></param>
/// <returns></returns>
RecordStaffCommute GetStaffCommuteByIdAndDuration(string id,string currentTime);
} }
} }

@ -4,6 +4,7 @@ using SlnMesnac.Model.domain;
using SlnMesnac.Repository.service.@base; using SlnMesnac.Repository.service.@base;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization;
using System.Text; using System.Text;
namespace SlnMesnac.Repository.service.Impl namespace SlnMesnac.Repository.service.Impl
@ -21,5 +22,15 @@ namespace SlnMesnac.Repository.service.Impl
{ {
return null; 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;
}
} }
} }

@ -30,6 +30,7 @@ namespace SlnMesnac.WPF.ViewModel
private readonly RfidHandleBusniess _rfidHandleBusniess; private readonly RfidHandleBusniess _rfidHandleBusniess;
private IBaseStaffService baseStaffService; private IBaseStaffService baseStaffService;
private IRecordStaffAttendanceService _recordStaffAttendanceService; private IRecordStaffAttendanceService _recordStaffAttendanceService;
private IRecordStaffCommuteService _recordStaffCommuteService;
private string _checkInButtonText = "上班打卡"; private string _checkInButtonText = "上班打卡";
private string _checkOutButtonText = "下班打卡"; private string _checkOutButtonText = "下班打卡";
public string _isCheckInButtonEnabled; public string _isCheckInButtonEnabled;
@ -39,13 +40,15 @@ namespace SlnMesnac.WPF.ViewModel
private int isCheckOn = 0; private int isCheckOn = 0;
private bool isUse = false; private bool isUse = false;
public static HidUtils hidUtils; public static HidUtils hidUtils;
private List<string> uniqueStrings = new List<string>();
private List<DateTime> timestamps = new List<DateTime>();
/// <summary> /// <summary>
/// 按钮文字转换事件 /// 按钮文字转换事件
/// </summary> /// </summary>
public event PropertyChangedEventHandler PropertyChanged; public event PropertyChangedEventHandler PropertyChanged;
#region 定义命令
/// <summary> /// <summary>
/// 上班命令 /// 上班命令
/// </summary> /// </summary>
@ -58,6 +61,7 @@ namespace SlnMesnac.WPF.ViewModel
/// 结束命令 /// 结束命令
/// </summary> /// </summary>
public ICommand OverCommand { get; private set; } public ICommand OverCommand { get; private set; }
#endregion
public EmployeeLoginViewModel() public EmployeeLoginViewModel()
{ {
@ -67,6 +71,7 @@ namespace SlnMesnac.WPF.ViewModel
OverCommand = new RelayCommand(Over); OverCommand = new RelayCommand(Over);
baseStaffService = App.ServiceProvider.GetService<IBaseStaffService>(); baseStaffService = App.ServiceProvider.GetService<IBaseStaffService>();
_recordStaffAttendanceService = App.ServiceProvider.GetService<IRecordStaffAttendanceService>(); _recordStaffAttendanceService = App.ServiceProvider.GetService<IRecordStaffAttendanceService>();
_recordStaffCommuteService = App.ServiceProvider.GetService<IRecordStaffCommuteService>();
_rfidHandleBusniess = App.ServiceProvider.GetService<RfidHandleBusniess>(); _rfidHandleBusniess = App.ServiceProvider.GetService<RfidHandleBusniess>();
//_rfidHandleBusniess.InstructionInfoDataGridEvent += RefreshRfidInfo; //_rfidHandleBusniess.InstructionInfoDataGridEvent += RefreshRfidInfo;
IsCheckInButtonEnabled = "True"; IsCheckInButtonEnabled = "True";
@ -82,39 +87,39 @@ namespace SlnMesnac.WPF.ViewModel
hidUtils.Initial(); hidUtils.Initial();
hidUtils.pushReceiveDataEvent += (bytes, str) => hidUtils.pushReceiveDataEvent += (bytes, str) =>
{ {
str = str.ToString().Replace(" ", ""); string cleanStr = str.ToString().Replace(" ", "");
if (isUse) if (!IsDuplicate(cleanStr))//过滤重复str
{ {
BaseStaffInfo user = baseStaffService.GetStaffInfoByCardId(str); uniqueStrings.Add(cleanStr);
if (user != null) timestamps.Add(DateTime.Now);
// Additional logic for processing the unique string goes here
if (isUse)
{ {
StaffIdText = user.StaffId; BaseStaffInfo user = baseStaffService.GetStaffInfoByCardId(cleanStr);
CheckStatus = user.StaffName + " " + user.TeamCode + " 打卡成功!"; if (user != null)
RecordStaffAttendance recordStaffAttendance = new RecordStaffAttendance
{ {
StaffId = user.StaffId, StaffIdText = user.StaffId;
AttendanceType = isCheckOn.ToString(), CheckStatus = user.StaffName + " " + user.TeamCode + " 打卡成功!";
TeamCode = user.TeamCode, var list = _rfidHandleBusniess.HandleAndInsertStaffAttendance(user,isCheckOn);
Remark = user.Remark, System.Windows.Application.Current.Dispatcher.Invoke((Action)(async () =>
CreateBy = user.StaffName, {
CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), RecordStaffAttendanceDataGrid.Clear();
}; list.ForEach(item => { RecordStaffAttendanceDataGrid.Add(item); });
}));
_rfidHandleBusniess.HandleStaffCommute(user, isCheckOn);
_recordStaffAttendanceService.Insert(recordStaffAttendance); }
var list = _recordStaffAttendanceService.GetRecordStaffAttendances(); else
System.Windows.Application.Current.Dispatcher.Invoke((Action)(async () =>
{ {
RecordStaffAttendanceDataGrid.Clear(); StaffIdText = "未配置";
list.ForEach(item => { RecordStaffAttendanceDataGrid.Add(item); }); CheckStatus = "没有匹配的员工,打卡失败!";
})); }
} }
else }
{ else
StaffIdText = "未配置"; {
CheckStatus = "没有匹配的员工,打卡失败!"; StaffIdText = "已打卡,请勿重复!";
} }
}
}; };
} }
@ -123,7 +128,7 @@ namespace SlnMesnac.WPF.ViewModel
return hidUtils; return hidUtils;
} }
#region #region 绑定参数
/// <summary> /// <summary>
/// 上班打卡文本 /// 上班打卡文本
/// </summary> /// </summary>
@ -301,6 +306,22 @@ namespace SlnMesnac.WPF.ViewModel
CheckOutButtonText = "下班打卡"; CheckOutButtonText = "下班打卡";
} }
/// <summary>
/// 30分钟内过滤重复str
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
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 event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName] string propertyName = "") public void OnPropertyChanged([CallerMemberName] string propertyName = "")

@ -19,7 +19,7 @@ using System.Windows.Threading;
namespace SlnMesnac.WPF.ViewModel namespace SlnMesnac.WPF.ViewModel
{ {
public class MainWindowViewModel: ViewModelBase, INotifyPropertyChanged public class MainWindowViewModel: INotifyPropertyChanged
{ {
private readonly ILogger<MainWindowViewModel> _logger; private readonly ILogger<MainWindowViewModel> _logger;
@ -43,25 +43,25 @@ namespace SlnMesnac.WPF.ViewModel
// set { _PlcStatus = value; RaisePropertyChanged(nameof(PlcStatus)); } // set { _PlcStatus = value; RaisePropertyChanged(nameof(PlcStatus)); }
//} //}
/// <summary> ///// <summary>
/// 打卡机状态 ///// 打卡机状态
/// </summary> ///// </summary>
private int _clockStatus = 0; //private int _clockStatus = 0;
public int ClockStatus //public int ClockStatus
{ //{
get { return _clockStatus; } // get { return _clockStatus; }
set { _clockStatus = value; RaisePropertyChanged(nameof(ClockStatus)); } // set { _clockStatus = value; RaisePropertyChanged(nameof(ClockStatus)); }
} //}
/// <summary> ///// <summary>
/// 扫码枪状态 ///// 扫码枪状态
/// </summary> ///// </summary>
private int _codeGunStatus = 0; //private int _codeGunStatus = 0;
public int CodeGunStatus //public int CodeGunStatus
{ //{
get { return _codeGunStatus; } // get { return _codeGunStatus; }
set { _codeGunStatus = value; RaisePropertyChanged(nameof(CodeGunStatus)); } // set { _codeGunStatus = value; RaisePropertyChanged(nameof(CodeGunStatus)); }
} //}
public System.Windows.Controls.UserControl _content; public System.Windows.Controls.UserControl _content;
@ -72,7 +72,7 @@ namespace SlnMesnac.WPF.ViewModel
set set
{ {
_content = value; _content = value;
RaisePropertyChanged(nameof(UserContent)); OnPropertyChanged("UserContent");
} }
} }
#endregion #endregion

Loading…
Cancel
Save