using GalaSoft.MvvmLight.Command; using Microsoft.Extensions.DependencyInjection; using SlnMesnac.Business.business; using SlnMesnac.Model.domain; using SlnMesnac.Repository.service; using SlnMesnac.WPF.Views; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Input; namespace SlnMesnac.WPF.ViewModel { public class ProductionReportViewModel : INotifyPropertyChanged { private ProdPlanInfoService _prodPlanInfoService; private ProdPlanDetailService _prodPlanDetailService; private DatabaseHandleBusniess _databaseHandleBusniess; private ProdPLanInfo planInfo; private ProdPlanDetail planDetail; private double complateRate; private double currentAmountDouble; private double newAmountDouble; private double result; #region /// /// 按钮文字转换事件 /// public event PropertyChangedEventHandler PropertyChanged = delegate { }; //刷新委托 public delegate void RefreshDelegate(ProdPLanInfo pLanInfo); public static event RefreshDelegate RefreshDelegateEvent; #endregion public ProductionReportViewModel() { _prodPlanDetailService = App.ServiceProvider.GetService(); _prodPlanInfoService = App.ServiceProvider.GetService(); _databaseHandleBusniess = App.ServiceProvider.GetService(); ConfirmCommand = new RelayCommand(Confirm); EndPlanCommand = new RelayCommand(EndPlan); ContinueCommand = new RelayCommand(Continue); EndButtonColor = "Red"; Init(); } private void Init() { planInfo = _prodPlanInfoService.GetRecordStaffAttendancesByConditions("", "", "", RfidHandleBusniess.stationCode, "1").FirstOrDefault(); if (planInfo != null) { complateRate = GetComplateRate(Convert.ToDouble(planInfo.CompleteAmount), planInfo.PlanAmount); if (complateRate > 0.9) { EndButtonColor = "#FF11B514"; } } Refresh(); } private void Refresh() { if (planInfo != null) { planDetail = _prodPlanDetailService.GetPlanDetailsByPlanCode(planInfo.PlanCode).FirstOrDefault(); PlanAmountText = planInfo.PlanAmount.ToString(); CompleteAmountText = planInfo.CompleteAmount.ToString(); } else { HintText = "没有正在执行的工单,请执行工单!"; } } #region 定义属性 /// /// 计划数量Text /// private string planAmountText; public string PlanAmountText { get { return planAmountText; } set { planAmountText = value; OnPropertyChanged("PlanAmountText"); } } /// /// 完成数量Text /// private string completeAmountText; public string CompleteAmountText { get { return completeAmountText; } set { completeAmountText = value; OnPropertyChanged("CompleteAmountText"); } } /// /// 新增数量Text /// private string newAmountText; public string NewAmountText { get { return newAmountText; } set { newAmountText = value; OnPropertyChanged("NewAmountText"); } } /// /// 提示框 /// private string hintText; public string HintText { get { return hintText; } set { hintText = value; OnPropertyChanged("HintText"); } } /// /// 结束按钮颜色 /// private string endButtonColor; public string EndButtonColor { get { return endButtonColor;} set { endButtonColor = value; OnPropertyChanged("EndButtonColor"); } } #endregion /// /// 继续 /// public ICommand ContinueCommand { get; set; } /// /// 确认命令 /// public ICommand ConfirmCommand { get; private set; } /// /// 确认事件 /// private void Confirm() { if(EmployeeLoginViewModel.isOnDuty == true)//是否有班组当班,无当班时操作无效 { string newAmount = NewAmountText; if (newAmount != null) { bool isNum = true; foreach (char x in newAmount) { if (!char.IsNumber(x) && x != '.') { isNum = false; } } if (isNum) { //将新增产量加到实际产量中 currentAmountDouble = Convert.ToDouble(planInfo.CompleteAmount); newAmountDouble = Convert.ToDouble(newAmount); result = currentAmountDouble + newAmountDouble; //planDetail = new ProdPlanDetail(); planDetail.CompleteAmount = newAmountDouble.ToString(); planInfo.CompleteAmount = result.ToString(); planDetail.BeginTime = ExecuteViewModel.theStartTime; planDetail.EndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); ExecuteViewModel.theStartTime = planDetail.EndTime; planDetail.BatchNumber += 1; planInfo.PlanStatus = "4"; //保存工单的执行人员 List realTimes = _databaseHandleBusniess.GetRecordStaffRealTimes(); _prodPlanDetailService.Insert(planDetail); _prodPlanInfoService.Update(planInfo); _databaseHandleBusniess.InsertPlanExecuteUser(planInfo, planDetail, realTimes); Refresh(); NewAmountText = null; HintText = "已提交!"; RefreshDelegateEvent?.Invoke(planInfo); ExecuteViewModel.isComplete = true; complateRate = GetComplateRate(result, PlanAmountText); if (complateRate > 0.9) { EndButtonColor = "#FF11B514"; } } else { //提示框提示错误信息 HintText = "输入有误,请输入阿拉伯数字!"; } } else { HintText = "不能为空!"; } } else { HintText = "没有班组当班,无法执行此操作!"; } } /// /// 结束工单命令 /// public ICommand EndPlanCommand { get; private set; } private void EndPlan() { //判断工单实际产量与目标产量的差距,满足才能执行结束 if (complateRate > 0.9) { if (EmployeeLoginViewModel.isOnDuty == true)//是否有班组当班,无当班时操作无效 { if (planDetail != null && planInfo != null) { //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); if (planAmountDouble == completeAmountDouble) { planInfo.CompFlag = "0";//正常完成 } else if (planAmountDouble > completeAmountDouble) { planInfo.CompFlag = "1";//不足目标产量降级处理 } else { planInfo.CompFlag = "2";//超额完成 } _prodPlanInfoService.Update(planInfo); ExecuteViewModel.stations += 1; } //关闭窗口 Application.Current.Windows.OfType().First().Close(); } } else { MessageBox.Show("完成产量与计划数量差距过大!"); } } /// /// 继续执行 /// /// private void Continue() { //关闭窗口 Application.Current.Windows.OfType().First().Close(); } /// /// 获取完成率 /// /// /// /// private double GetComplateRate(double complateAmount, string planAmount) { double plan = Convert.ToDouble(planAmount); return complateAmount / plan; } public void OnPropertyChanged([CallerMemberName] string propertyName = "") { PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } }