change -工单执行页显示在岗员工名称,完善生产报工逻辑防止误报

main
frankiecao 1 year ago
commit 206f15aab0

@ -20,6 +20,9 @@ namespace SlnMesnac.Business.business
private IRecordStaffAttendanceService _recordStaffAttendanceService;
private IRecordStaffCommuteService _recordStaffCommuteService;
private string currentTime;
private string teamMembers = null;
private List<string> members = new List<string>();
public RfidHandleBusniess(IRecordStaffAttendanceService recordStaffAttendanceService, IRecordStaffCommuteService recordStaffCommuteService)
{
@ -79,5 +82,24 @@ namespace SlnMesnac.Business.business
_recordStaffCommuteService.Update(recordStaffCommute);
}
}
public string SpliceTeamMember(BaseStaffInfo baseStaffInfo)
{
RecordStaffAttendance recordStaffAttendance = _recordStaffAttendanceService.GetRecordStaffAttendanceByStaffId(baseStaffInfo.StaffId);
string type = recordStaffAttendance.AttendanceType;
if (type == "0")//上班,添加员工名字转成字符串
{
members.Add(baseStaffInfo.StaffName); // Add the staff member's name to the list
teamMembers = string.Join("| ", members); // Convert the list of names to a string separated by commas
}
else if (type == "1")//下班,删除下班员工的名字再转为字符串
{
members.Remove(baseStaffInfo.StaffName); // Remove the staff member's name from the list
teamMembers = string.Join("| ", members); // Convert the updated list of names to a string separated by commas
}
return teamMembers;
}
}
}

@ -10,6 +10,7 @@ namespace SlnMesnac.Model.domain
[DataContract(Name = "RecordStaffAttendance 记录员工打卡")]
public class RecordStaffAttendance
{
//public BaseStaffInfo baseStaffInfo { get; set; }
/// <summary>
///
/// </summary>

@ -21,5 +21,12 @@ namespace SlnMesnac.Repository.service
/// <param name="cardId"></param>
/// <returns></returns>
BaseStaffInfo GetStaffInfoByCardId(string cardId);
/// <summary>
/// 找出班组的班长
/// </summary>
/// <param name="teamCode"></param>
/// <returns></returns>
BaseStaffInfo GetMonitorByTeamCode(string teamCode);
}
}

@ -15,6 +15,20 @@ namespace SlnMesnac.Repository.service.Impl
_logger = logger;
}
public BaseStaffInfo GetMonitorByTeamCode(string teamCode)
{
BaseStaffInfo staffInfo = null;
try
{
staffInfo = base._rep.AsQueryable().Where(x => x.TeamCode == teamCode).Where(x => x.StaffType == "1").First();
}
catch (Exception ex)
{
_logger.LogError($"查找班组的班长信息异常:{ex.Message}");
}
return staffInfo;
}
/// <summary>
/// 通过卡号获取员工信息
/// </summary>
@ -51,5 +65,7 @@ namespace SlnMesnac.Repository.service.Impl
}
return staffInfos;
}
}
}

@ -64,7 +64,8 @@ namespace SlnMesnac.Repository.service.Impl
public RecordStaffAttendance GetLastestOnRecord()
{
RecordStaffAttendance recordStaffAttendances = _rep.AsQueryable().Where(x => x.AttendanceType == "0").OrderByDescending(x => x.CreateTime).First();
RecordStaffAttendance recordStaffAttendances = _rep.AsQueryable().Where(x => x.AttendanceType == "0")
.OrderByDescending(x => x.CreateTime).First();
return recordStaffAttendances;
}

@ -82,7 +82,14 @@
<RowDefinition Height="7.5*"/>
</Grid.RowDefinitions>
<Border Grid.Row="0">
<TextBlock Text="工单列表" FontSize="20" FontWeight="Bold" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Center"/>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="9*"/>
</Grid.ColumnDefinitions>
<TextBlock Grid.Column="0" Text="班组成员:" FontSize="15" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Right"/>
<TextBlock Grid.Column="1" Text="{Binding TeamMember}" FontSize="15" Foreground="White" VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
</Grid>
</Border>
<Border Grid.Row="1" Margin="5">
<Grid>

@ -41,6 +41,7 @@ namespace SlnMesnac.WPF.ViewModel
private bool isUse = false;
private int status = 0;//0是上班1是下班
public static HidUtils hidUtils;
public static bool isOnDuty = false;
private List<string> uniqueStrings = new List<string>();
private List<DateTime> timestamps = new List<DateTime>();
@ -62,6 +63,13 @@ namespace SlnMesnac.WPF.ViewModel
/// 结束命令
/// </summary>
public ICommand OverCommand { get; private set; }
/// <summary>
///
/// </summary>
/// <param name="staffInfo"></param>
public delegate void TransmitUser(BaseStaffInfo staffInfo);
public static event TransmitUser TransmitUserDelegateEvent;
#endregion
public EmployeeLoginViewModel()
@ -101,6 +109,8 @@ namespace SlnMesnac.WPF.ViewModel
if (user != null)
{
RecordStaffAttendance recordStaffAttendance = _recordStaffAttendanceService.GetRecordStaffAttendanceByStaffId(user.StaffId);
if (recordStaffAttendance != null)
{
var createTime = recordStaffAttendance.CreateTime;
var nowTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
TimeSpan timeDiff = DateTime.Parse(nowTime) - DateTime.Parse(createTime);
@ -149,13 +159,26 @@ namespace SlnMesnac.WPF.ViewModel
StatusText = "请勿重复打卡!";
}
}
}
else
{
StaffIdText = user.StaffId;
CheckStatus = "打卡成功!";
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
{
StaffIdText = "未配置";
CheckStatus = "没有匹配的员工,打卡失败!";
}
TransmitUserDelegateEvent?.Invoke(user);
}
}
else
@ -300,6 +323,7 @@ namespace SlnMesnac.WPF.ViewModel
/// </summary>
private void CheckIn()
{
isOnDuty = true;
if (CheckInButtonText == "上班打卡")
{
// 执行上班打卡逻辑
@ -328,6 +352,7 @@ namespace SlnMesnac.WPF.ViewModel
/// </summary>
private void CheckOut()
{
isOnDuty = false;
if (CheckOutButtonText == "下班打卡")
{
// 执行下班打卡逻辑

@ -31,10 +31,12 @@ namespace SlnMesnac.WPF.ViewModel
public ObservableCollection<string> OrderCodeComboBoxItems { get; set; }
public ObservableCollection<string> PlanCodeComboBoxItems { get; set; }
public ObservableCollection<string> MaterialNameComboBoxItems { get; set; }
private RfidHandleBusniess _RfidHandleBusniess;
private ProdPlanInfoService _prodPlanInfoService;
private List<ProdPLanInfo> prodPlanInfos;
private ProdPlanDetailService _prodPlanDetailService;
private IRecordStaffAttendanceService _recordStaffAttendanceService;
private IBaseStaffService _baseStaffService;
private string StationCode;
public static bool isComplete = true;
private ProdPLanInfo pLanInfo;
@ -64,7 +66,7 @@ namespace SlnMesnac.WPF.ViewModel
/// </summary>
public ICommand ExecuteCommand { get; private set; }
#region
#region 委托
public delegate void RefreshDelegate(ProdPLanInfo pLanInfo);
public static event RefreshDelegate? RefreshEvent;
#endregion
@ -74,6 +76,8 @@ namespace SlnMesnac.WPF.ViewModel
_prodPlanInfoService = App.ServiceProvider.GetService<ProdPlanInfoService>();
_prodPlanDetailService = App.ServiceProvider.GetService<ProdPlanDetailService>();
_recordStaffAttendanceService = App.ServiceProvider.GetService<IRecordStaffAttendanceService>();
_RfidHandleBusniess = App.ServiceProvider.GetService<RfidHandleBusniess>();
_baseStaffService = App.ServiceProvider.GetService<IBaseStaffService>();
IConfigurationBuilder configurationBuilder = new ConfigurationBuilder()
.SetBasePath(System.AppContext.BaseDirectory)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
@ -88,6 +92,7 @@ namespace SlnMesnac.WPF.ViewModel
SearchCommand = new RelayCommand(Search);
ExecuteCommand = new RelayCommand(Execute);
ProductionReportViewModel.RefreshDelegateEvent += Refresh;
EmployeeLoginViewModel.TransmitUserDelegateEvent += ShowTeamMember;
}
/// <summary>
@ -130,15 +135,20 @@ namespace SlnMesnac.WPF.ViewModel
}
// 新增的执行事件
private void Execute()
{
if (isComplete)
//判断是否有班组当班,查询打卡记录表4小时内最后一次打卡类型为上班的班组
if(EmployeeLoginViewModel.isOnDuty == true)
{
if (isComplete)//判断是否完成,未完成不能执行其他工单
{
// 将当前记录存为实体可以通过parameter获取当前记录的信息
string orderCode = _selectedRow.OrderCode.ToString();
string planCode = _selectedRow.PlanCode.ToString();
pLanInfo = _prodPlanInfoService.GetRecordStaffAttendancesByConditions(orderCode, planCode, "", "", "0").First();
RecordStaffAttendance currentRecord = _recordStaffAttendanceService.GetLastestOnRecord();
BaseStaffInfo staffInfo = _baseStaffService.GetMonitorByTeamCode(currentRecord.TeamCode);
RecordStaffAttendance nextRecord = _recordStaffAttendanceService.GetLastestOffRecord();
// 向detail表里插入一条数据
ProdPlanDetail prodPlanDetail = new ProdPlanDetail
@ -148,7 +158,7 @@ namespace SlnMesnac.WPF.ViewModel
PlanAmount = pLanInfo.PlanAmount,
CompleteAmount = pLanInfo.CompleteAmount,
BeginTime = DateTime.Now.ToString(),
CurrentStaffId = currentRecord.StaffId,
CurrentStaffId = staffInfo.StaffId
//NextStaffId = nextRecord.StaffId,
};
_prodPlanDetailService.Insert(prodPlanDetail);
@ -162,6 +172,7 @@ namespace SlnMesnac.WPF.ViewModel
isComplete = false;
}
}
}
//刷新明细
private void Refresh(ProdPLanInfo pLanInfo)
@ -181,7 +192,29 @@ namespace SlnMesnac.WPF.ViewModel
}
}
/// <summary>
/// 显示班组成员
/// </summary>
/// <param name="baseStaffInfo"></param>
private void ShowTeamMember(BaseStaffInfo baseStaffInfo)
{
if(baseStaffInfo != null)
{
TeamMember = _RfidHandleBusniess.SpliceTeamMember(baseStaffInfo);
}
}
#region
/// <summary>
/// 班组成员
/// </summary>
private string teamMember;
public string TeamMember
{
get { return teamMember; }
set { teamMember = value; OnPropertyChanged("TeamMember"); }
}
/// <summary>
/// 订单
/// </summary>

@ -112,6 +112,8 @@ namespace SlnMesnac.WPF.ViewModel
/// 确认事件
/// </summary>
private void Confirm()
{
if(EmployeeLoginViewModel.isOnDuty == true)
{
string newAmount = NewAmountText;
if (newAmount != null)
@ -151,12 +153,17 @@ namespace SlnMesnac.WPF.ViewModel
HintText = "不能为空!";
}
}
}
/// <summary>
/// 结束工单命令
/// </summary>
public ICommand EndPlanCommand { get; private set; }
private void EndPlan()
{
if(EmployeeLoginViewModel.isOnDuty == true)
{
if (planDetail != null && planInfo != null)
{
planDetail.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
_prodPlanDetailService.Update(planDetail);
@ -177,9 +184,11 @@ namespace SlnMesnac.WPF.ViewModel
planInfo.CompFlag = "2";//超额完成
}
_prodPlanInfoService.Update(planInfo);
}
//关闭窗口
Application.Current.Windows.OfType<ProductionReportWin>().First().Close();
}
}
public void OnPropertyChanged([CallerMemberName] string propertyName = "")
{

Loading…
Cancel
Save