|
|
|
@ -29,6 +29,7 @@ namespace SlnMesnac.WPF.ViewModel
|
|
|
|
|
private double newAmountDouble;
|
|
|
|
|
private double result;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#region
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 按钮文字转换事件
|
|
|
|
@ -38,6 +39,8 @@ namespace SlnMesnac.WPF.ViewModel
|
|
|
|
|
//刷新委托
|
|
|
|
|
public delegate void RefreshDelegate(ProdPLanInfo pLanInfo);
|
|
|
|
|
public static event RefreshDelegate RefreshDelegateEvent;
|
|
|
|
|
|
|
|
|
|
public static Action<int>? RefrashClearAction;
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
public ProductionReportViewModel()
|
|
|
|
@ -60,7 +63,7 @@ namespace SlnMesnac.WPF.ViewModel
|
|
|
|
|
|
|
|
|
|
private void Init()
|
|
|
|
|
{
|
|
|
|
|
planInfo = _prodPlanInfoService.GetRecordStaffAttendancesByConditions("", "", "", RfidHandleBusniess.stationCode, "1").FirstOrDefault();
|
|
|
|
|
planInfo = _prodPlanInfoService.GetPlanInfoByConditions("", "", "", RfidHandleBusniess.stationCode, "1").FirstOrDefault();
|
|
|
|
|
if (planInfo != null)
|
|
|
|
|
{
|
|
|
|
|
complateRate = GetComplateRate(Convert.ToDouble(planInfo.CompleteAmount), planInfo.PlanAmount);
|
|
|
|
@ -158,90 +161,88 @@ namespace SlnMesnac.WPF.ViewModel
|
|
|
|
|
/// </summary>
|
|
|
|
|
private void Confirm()
|
|
|
|
|
{
|
|
|
|
|
DateTime startTime = DateTime.Parse(ExecuteViewModel.intervalvalTime);
|
|
|
|
|
if ((DateTime.Now - startTime).TotalMinutes > 15)
|
|
|
|
|
// 获取最新工单明细的结束时间
|
|
|
|
|
var detail = _databaseHandleBusniess.GetLastDetailEndTime(planInfo.PlanCode);
|
|
|
|
|
|
|
|
|
|
// 如果最新工单明细没有结束时间,跳过时间判断
|
|
|
|
|
if (!string.IsNullOrEmpty(detail.EndTime))
|
|
|
|
|
{
|
|
|
|
|
if (EmployeeLoginViewModel.isOnDuty == true)//是否有班组当班,无当班时操作无效
|
|
|
|
|
DateTime startTime = DateTime.Parse(detail.EndTime);
|
|
|
|
|
if ((DateTime.Now - startTime).TotalMinutes <= 15)
|
|
|
|
|
{
|
|
|
|
|
var monitor = _databaseHandleBusniess.GetMonitor(RfidHandleBusniess.stationCode);
|
|
|
|
|
if (monitor != null)
|
|
|
|
|
{
|
|
|
|
|
string newAmount = NewAmountText;
|
|
|
|
|
RfidHandleBusniess.theNewAmount = NewAmountText;
|
|
|
|
|
if (newAmount != "")
|
|
|
|
|
{
|
|
|
|
|
bool isNum = true;
|
|
|
|
|
foreach (char x in newAmount)
|
|
|
|
|
{
|
|
|
|
|
if (!char.IsNumber(x) && x != '.')
|
|
|
|
|
{
|
|
|
|
|
isNum = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (isNum)
|
|
|
|
|
{
|
|
|
|
|
HintText = "请撤回最新工单明细!";
|
|
|
|
|
//将新增产量加到实际产量中
|
|
|
|
|
currentAmountDouble = Convert.ToDouble(planInfo.CompleteAmount);
|
|
|
|
|
newAmountDouble = Convert.ToDouble(newAmount);
|
|
|
|
|
result = currentAmountDouble + newAmountDouble;
|
|
|
|
|
//planDetail = new ProdPlanDetail();
|
|
|
|
|
planDetail.CurrentStaffId = monitor.staffId;//取班长ID
|
|
|
|
|
planDetail.CreatedBy = monitor.staffName;//存班长名
|
|
|
|
|
planDetail.CompleteAmount = newAmountDouble.ToString();
|
|
|
|
|
planInfo.CompleteAmount = result.ToString();
|
|
|
|
|
if (planDetail.EndTime == null)//第一条明细
|
|
|
|
|
{
|
|
|
|
|
planDetail.BeginTime = ExecuteViewModel.theStartTime;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
planDetail.BeginTime = planDetail.EndTime;
|
|
|
|
|
}
|
|
|
|
|
planDetail.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
ExecuteViewModel.intervalvalTime = planDetail.EndTime;
|
|
|
|
|
planDetail.BatchNumber += 1;
|
|
|
|
|
//ExecuteViewModel.batchNums = planDetail.BatchNumber.ToString();
|
|
|
|
|
//保存工单的执行人员
|
|
|
|
|
List<RecordStaffRealTime> realTimes = _databaseHandleBusniess.GetRecordStaffRealTimes();
|
|
|
|
|
_prodPlanDetailService.Insert(planDetail);
|
|
|
|
|
_prodPlanInfoService.Update(planInfo);
|
|
|
|
|
_databaseHandleBusniess.InsertPlanExecuteUser(planInfo, planDetail, realTimes);
|
|
|
|
|
Refresh();
|
|
|
|
|
HintText = "已提交!";
|
|
|
|
|
RefreshDelegateEvent?.Invoke(planInfo);
|
|
|
|
|
//ExecuteViewModel.isComplete = true;
|
|
|
|
|
complateRate = GetComplateRate(result, PlanAmountText);
|
|
|
|
|
if (complateRate > 0.9)
|
|
|
|
|
{
|
|
|
|
|
EndButtonColor = "#FF11B514";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
//提示框提示错误信息
|
|
|
|
|
HintText = "输入有误,请输入阿拉伯数字!";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
HintText = "不能为空!";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
HintText = "班长未打卡,无法执行此操作!";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
HintText = "没有班组当班,无法执行此操作!";
|
|
|
|
|
HintText = "当前工单距离上次提交不足15分钟!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
|
|
|
|
|
// 如果没有班组当班,直接返回
|
|
|
|
|
if (!EmployeeLoginViewModel.isOnDuty)
|
|
|
|
|
{
|
|
|
|
|
HintText = "当前工单距离上次提交不足15分钟!";
|
|
|
|
|
HintText = "没有班组当班,无法执行此操作!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取班组长信息
|
|
|
|
|
var monitor = _databaseHandleBusniess.GetMonitor(RfidHandleBusniess.stationCode);
|
|
|
|
|
if (monitor == null)
|
|
|
|
|
{
|
|
|
|
|
HintText = "班长未打卡,无法执行此操作!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 获取新输入的产量
|
|
|
|
|
string newAmount = NewAmountText?.Trim();
|
|
|
|
|
if (string.IsNullOrEmpty(newAmount))
|
|
|
|
|
{
|
|
|
|
|
HintText = "不能为空!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 验证输入的产量是否为数字
|
|
|
|
|
if (!IsNumeric(newAmount))
|
|
|
|
|
{
|
|
|
|
|
HintText = "输入有误,请输入阿拉伯数字!";
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 更新计划信息
|
|
|
|
|
RfidHandleBusniess.theNewAmount = newAmount;
|
|
|
|
|
double currentAmountDouble = Convert.ToDouble(planInfo.CompleteAmount);
|
|
|
|
|
double newAmountDouble = Convert.ToDouble(newAmount);
|
|
|
|
|
double result = currentAmountDouble + newAmountDouble;
|
|
|
|
|
|
|
|
|
|
// 设置工单明细
|
|
|
|
|
planDetail.CurrentStaffId = monitor.staffId; // 班长ID
|
|
|
|
|
planDetail.CreatedBy = monitor.staffName; // 班长名称
|
|
|
|
|
planDetail.CompleteAmount = newAmountDouble.ToString();
|
|
|
|
|
planInfo.CompleteAmount = result.ToString();
|
|
|
|
|
planDetail.BeginTime = planDetail.EndTime ?? ExecuteViewModel.theStartTime;
|
|
|
|
|
planDetail.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
planDetail.BatchNumber += 1;
|
|
|
|
|
|
|
|
|
|
// 保存数据
|
|
|
|
|
var realTimes = _databaseHandleBusniess.GetRecordStaffRealTimes();
|
|
|
|
|
_prodPlanDetailService.Insert(planDetail);
|
|
|
|
|
_prodPlanInfoService.Update(planInfo);
|
|
|
|
|
_databaseHandleBusniess.InsertPlanExecuteUser(planInfo, planDetail, realTimes);
|
|
|
|
|
|
|
|
|
|
// 刷新并更新UI
|
|
|
|
|
Refresh();
|
|
|
|
|
HintText = "已提交!";
|
|
|
|
|
RefreshDelegateEvent?.Invoke(planInfo);
|
|
|
|
|
|
|
|
|
|
// 更新完成率
|
|
|
|
|
complateRate = GetComplateRate(result, PlanAmountText);
|
|
|
|
|
if (complateRate > 0.9)
|
|
|
|
|
{
|
|
|
|
|
EndButtonColor = "#FF11B514";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 检查字符串是否为有效数字
|
|
|
|
|
private bool IsNumeric(string value)
|
|
|
|
|
{
|
|
|
|
|
return value.All(c => char.IsDigit(c) || c == '.');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
@ -250,45 +251,53 @@ namespace SlnMesnac.WPF.ViewModel
|
|
|
|
|
public ICommand EndPlanCommand { get; private set; }
|
|
|
|
|
private void EndPlan()
|
|
|
|
|
{
|
|
|
|
|
//判断工单实际产量与目标产量的差距,满足才能执行结束
|
|
|
|
|
// 判断工单实际产量与目标产量的差距,满足才能执行结束
|
|
|
|
|
if (complateRate > 0.9)
|
|
|
|
|
{
|
|
|
|
|
if (EmployeeLoginViewModel.isOnDuty == true)//是否有班组当班,无当班时操作无效
|
|
|
|
|
if (EmployeeLoginViewModel.isOnDuty == true) // 是否有班组当班,无当班时操作无效
|
|
|
|
|
{
|
|
|
|
|
if (planDetail != null && planInfo != null)
|
|
|
|
|
{
|
|
|
|
|
//planDetail.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
// planDetail.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
//_prodPlanDetailService.Insert(planDetail);
|
|
|
|
|
planInfo.PlanStatus = "2";
|
|
|
|
|
planInfo.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
|
|
|
|
|
|
|
|
|
double planAmountDouble = Convert.ToDouble(planInfo.PlanAmount);
|
|
|
|
|
double completeAmountDouble = Convert.ToDouble(planInfo.CompleteAmount);
|
|
|
|
|
|
|
|
|
|
ExecuteViewModel.isComplete = true;
|
|
|
|
|
if (planAmountDouble == completeAmountDouble)
|
|
|
|
|
|
|
|
|
|
// 使用 switch-case 来处理完成情况
|
|
|
|
|
switch (planAmountDouble.CompareTo(completeAmountDouble))
|
|
|
|
|
{
|
|
|
|
|
planInfo.CompFlag = "0";//正常完成
|
|
|
|
|
}
|
|
|
|
|
else if (planAmountDouble > completeAmountDouble)
|
|
|
|
|
{
|
|
|
|
|
planInfo.CompFlag = "1";//不足目标产量降级处理
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
planInfo.CompFlag = "2";//超额完成
|
|
|
|
|
case 0: // 完成量等于计划量
|
|
|
|
|
planInfo.CompFlag = "0"; // 正常完成
|
|
|
|
|
break;
|
|
|
|
|
case int n when (n > 0): // 完成量小于计划量
|
|
|
|
|
planInfo.CompFlag = "1"; // 不足目标产量降级处理
|
|
|
|
|
break;
|
|
|
|
|
case int n when (n < 0): // 完成量大于计划量
|
|
|
|
|
planInfo.CompFlag = "2"; // 超额完成
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
_prodPlanInfoService.Update(planInfo);
|
|
|
|
|
ExecuteViewModel.stations += 1;
|
|
|
|
|
}
|
|
|
|
|
//关闭窗口
|
|
|
|
|
|
|
|
|
|
// 关闭窗口
|
|
|
|
|
Application.Current.Windows.OfType<ProductionReportWin>().First().Close();
|
|
|
|
|
RefrashClearAction?.Invoke(0);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
MessageBox.Show("完成产量与计划数量差距过大!");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 继续执行
|
|
|
|
|
/// </summary>
|
|
|
|
@ -310,6 +319,7 @@ namespace SlnMesnac.WPF.ViewModel
|
|
|
|
|
ExecuteViewModel.isComplete = true;
|
|
|
|
|
//关闭窗口
|
|
|
|
|
Application.Current.Windows.OfType<ProductionReportWin>().First().Close();
|
|
|
|
|
RefrashClearAction?.Invoke(0);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|