using Admin.Core.Common; using Admin.Core.IService; using Admin.Core.Model; using Admin.Core.Service; using Aucma.Core.HwPLc; using Aucma.Core.SheetMetal.Business; using Aucma.Core.SheetMetal.Models; using CommunityToolkit.Mvvm.ComponentModel; using CommunityToolkit.Mvvm.Input; using CommunityToolkit.Mvvm.Messaging; using log4net; using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Logging; using System; using System.Collections.Generic; using System.Linq; using System.Reflection.Metadata; using System.Text; using System.Threading.Tasks; using System.Windows; namespace Aucma.Core.SheetMetal.ViewModels { public partial class QuantityIssuedViewModel : ObservableObject { private static readonly log4net.ILog logHelper = LogManager.GetLogger(typeof(QuantityIssuedViewModel)); private IBaseBomInfoServices _bomInfoServices; private IBaseSpaceDetailServices _spaceDetailServices; protected readonly IExecutePlanInfoServices? _executePlanInfoServices; #region 构造函数 public QuantityIssuedViewModel(ProductPlanInfoModel productPlanInfo) { _bomInfoServices = App.ServiceProvider.GetService(); _spaceDetailServices = App.ServiceProvider.GetService(); _executePlanInfoServices = App.ServiceProvider.GetService(); PlanInfo = productPlanInfo; } #endregion #region 属性 private ProductPlanInfoModel _PlanInfo = new ProductPlanInfoModel(); public ProductPlanInfoModel PlanInfo { get => _PlanInfo; set => SetProperty(ref _PlanInfo, value); } private string _TransmitAmount = string.Empty; public string TransmitAmount { get => _TransmitAmount; set => SetProperty(ref _TransmitAmount, value); } #endregion #region 下传计划 /// /// 下传计划,前后板联动计划创建两条分别为前后板计划 /// [RelayCommand] private async Task PlanInfoTransmit() { var productPlanInfo = _PlanInfo; if (productPlanInfo != null) { //下传到PLC string stationCode = "1001"; var list = await _executePlanInfoServices.QueryAsync(d => d.ProductLineCode.Equals(stationCode)); ExecutePlanInfo task = new ExecutePlanInfo(); task.ExecutePlanCode = Guid.NewGuid().ToString(); task.ProductPlanCode = PlanInfo.PlanCode; task.OrderCode = PlanInfo.OrderCode; task.ProductLineCode = stationCode;//计划工位 task.TaskCode = GetMaxCodeAsync(list); task.MaterialCode = PlanInfo.MaterialCode; task.MaterialName = PlanInfo.MaterialName; if (list.Count == 0) task.ExecuteOrder = 1; if (list.Count != 0) task.ExecuteOrder = list.Max(d => d.ExecuteOrder) + 1; task.ExecuteMethod = 2;//不做要求,系统自动确定 task.PlanAmount = Convert.ToInt32(TransmitAmount); task.CompleteAmount = 0; task.CreatedTime = DateTime.Now; task.BeginTime = DateTime.Now; task.ExecuteStatus = 1; task.PlanType = productPlanInfo.PlanType; var result = await _executePlanInfoServices.AddAsync(task); if (result > 0) { MessageBox.Show("计划拆分成功!", "系统提醒"); WeakReferenceMessenger.Default.Send("Refresh");//刷新窗口 } else { MessageBox.Show("计划拆分失败,请检查后重试!", "系统提醒"); } } else { MessageBox.Show("生产计划获取失败,加载为空", "提示", MessageBoxButton.OK, MessageBoxImage.Error, MessageBoxResult.OK, MessageBoxOptions.DefaultDesktopOnly); return; } } #endregion #region 清除 /// /// 清除 /// [RelayCommand] private void ClearTransmitAmount() { string amount = _TransmitAmount.ToString(); if (amount.Length > 0) { TransmitAmount = amount.Substring(0, amount.Length - 1); } } #endregion #region KeypadButton [RelayCommand] private void KeypadButton(object obj) { var info = obj as string; TransmitAmount += info; } #endregion #region 关闭 /// /// 关闭 /// /// [RelayCommand] private void CloseWindow(object parameter) { var window = parameter as Window; if (window != null) { window.Close(); } } #endregion public string GetMaxCodeAsync(List planInfos) { string taskCodeStr = string.Empty; if(planInfos != null) { if (planInfos.Count > 0) { ExecutePlanInfo planInfo = planInfos.Where(x => x.TaskCode.Contains(DateTime.Now.ToString("yyyy-MM-dd"))).OrderByDescending(x => x.TaskCode).First(); if (planInfo != null) { int taskCode = Convert.ToInt32(planInfo.TaskCode); taskCodeStr = (taskCode + 1).ToString(); return taskCodeStr; } } } taskCodeStr = DateTime.Now.ToString("yyyy-MM-dd") + "1".PadLeft(5, '0'); return taskCodeStr; //string stationCode = Appsettings.app("StoreInfo", "StationCode"); //string today = DateTime.Now.ToString("yyyyMMdd"); //var maxCode = _executePlanInfoServices.QueryAsync(d => d.ProductLineCode.Equals(stationCode)).Result.Max(d=>d.TaskCode); //if (maxCode.IsNotEmptyOrNull()) //{ // string date= maxCode.Substring(0, 8); // string max = maxCode.Substring(maxCode.Length-4, maxCode.Length); // if (today.Equals(date)) { // return date + (int.Parse(max) + 1); // } // else // { // return today + "00001"; // } //} //else //{ // return today + "00001"; //} } } }