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

main
frankiecao 1 year ago
commit a48d90e089

@ -17,17 +17,62 @@ namespace SlnMesnac.Business.business
/// </summary>
public class RfidHandleBusniess
{
private readonly HidUtils _utils;
private IBaseStaffService _baseStaffService;
public string _uidCode = "";
private IRecordStaffAttendanceService _recordStaffAttendanceService;
private IRecordStaffCommuteService _recordStaffCommuteService;
public RfidHandleBusniess(HidUtils utils,IBaseStaffService baseStaffService)
public RfidHandleBusniess(IRecordStaffAttendanceService recordStaffAttendanceService, IRecordStaffCommuteService recordStaffCommuteService)
{
this._utils = utils;
this._baseStaffService = baseStaffService;
this._recordStaffAttendanceService = recordStaffAttendanceService;
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>
/// <returns></returns>
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 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;
}
}
}

@ -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<string> uniqueStrings = new List<string>();
private List<DateTime> timestamps = new List<DateTime>();
/// <summary>
/// 按钮文字转换事件
/// </summary>
public event PropertyChangedEventHandler PropertyChanged;
#region 定义命令
/// <summary>
/// 上班命令
/// </summary>
@ -58,6 +61,7 @@ namespace SlnMesnac.WPF.ViewModel
/// 结束命令
/// </summary>
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<IBaseStaffService>();
_recordStaffAttendanceService = App.ServiceProvider.GetService<IRecordStaffAttendanceService>();
_recordStaffCommuteService = App.ServiceProvider.GetService<IRecordStaffCommuteService>();
_rfidHandleBusniess = App.ServiceProvider.GetService<RfidHandleBusniess>();
//_rfidHandleBusniess.InstructionInfoDataGridEvent += RefreshRfidInfo;
IsCheckInButtonEnabled = "True";
@ -82,32 +87,27 @@ namespace SlnMesnac.WPF.ViewModel
hidUtils.Initial();
hidUtils.pushReceiveDataEvent += (bytes, str) =>
{
str = str.ToString().Replace(" ", "");
string cleanStr = str.ToString().Replace(" ", "");
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(str);
BaseStaffInfo user = baseStaffService.GetStaffInfoByCardId(cleanStr);
if (user != null)
{
StaffIdText = user.StaffId;
CheckStatus = user.StaffName + " " + user.TeamCode + " 打卡成功!";
RecordStaffAttendance recordStaffAttendance = new RecordStaffAttendance
{
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"),
};
_recordStaffAttendanceService.Insert(recordStaffAttendance);
var list = _recordStaffAttendanceService.GetRecordStaffAttendances();
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
{
@ -115,6 +115,11 @@ namespace SlnMesnac.WPF.ViewModel
CheckStatus = "没有匹配的员工,打卡失败!";
}
}
}
else
{
StaffIdText = "已打卡,请勿重复!";
}
};
}
@ -123,7 +128,7 @@ namespace SlnMesnac.WPF.ViewModel
return hidUtils;
}
#region
#region 绑定参数
/// <summary>
/// 上班打卡文本
/// </summary>
@ -301,6 +306,22 @@ namespace SlnMesnac.WPF.ViewModel
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 void OnPropertyChanged([CallerMemberName] string propertyName = "")

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

Loading…
Cancel
Save