using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Toolkit.Mvvm.ComponentModel; using System.Collections.ObjectModel; using BPASmartClient.JXJFoodSmallStation.Model; using BPASmartClient.Helper; using Microsoft.Toolkit.Mvvm.Input; using BPASmartClient.CustomResource.UserControls.MessageShow; using BPASmartClient.CustomResource.UserControls; using System.Diagnostics; using BPASmartClient.JXJFoodSmallStation.Model.Siemens; using Google.Protobuf.WellKnownTypes; using Newtonsoft.Json.Linq; using BPASmartClient.CustomResource.Pages.Model; namespace BPASmartClient.JXJFoodSmallStation.ViewModel { public class NewLocalRecipeViewModel : ObservableObject { public NewLocalRecipeViewModel() { //ActionManage.GetInstance.CancelRegister("LocalRecipeEdit"); ActionManage.GetInstance.Register(new Action((o) => { if (o != null && o is RemoteRecipeData rm) { RecipeName = rm.RecipeName; RecipeCode = rm.RecipeCode; TrayNum = rm.TrayCode; foreach (RemoteRecipeRawMaterial item in rm.RawMaterial) { var res = Json.Data.rawMaterialStockBin.FirstOrDefault(p => p.RawMaterialLocation == item.RawMaterialLocation); if (res != null && !string.IsNullOrEmpty(res.RawMaterialName)) { var temp = Json.Data.BomMaterial.FirstOrDefault(p => p.MaterialCode == res.RawMaterialName); if (temp != null && !string.IsNullOrEmpty(temp.MaterialName)) { item.RawMaterialName = temp.MaterialName; } } //AllRawMaterial.Add(item); AllRawMaterial.Add(new RemoteRecipeRawMaterial() { RawMaterialType = item.RawMaterialType, RawMaterialName = item.RawMaterialName, RawMaterialWeight = item.RawMaterialWeight, RawMaterialLocation = item.RawMaterialLocation, RawMaterialBarrelNum = item.RawMaterialBarrelNum, }); } foreach (var item1 in rm.WindSend) { var res = Json.Data.windSendRawMaterial.FirstOrDefault(p => p.Location == item1.Location); if (res != null) { item1.RawMaterialName = res.RawMaterialChineseName; } AllRawMaterial.Add(new RemoteRecipeRawMaterial() { RawMaterialType = item1.RawMaterialType, RawMaterialName = item1.RawMaterialName, RawMaterialWeight = item1.RawMaterialWeight, RawMaterialLocation = item1.Location, RawMaterialBarrelNum = item1.RawMaterialBarrelNum, }); } } }), "LocalRecipeEdit", true); RemoveCommand = new RelayCommand((o) => { var res = AllRawMaterial.FirstOrDefault(p => p.RawMaterialName == o.ToString()); if (res != null) AllRawMaterial.Remove(res); //NoticeDemoViewModel.OpenMsg(EnumPromptType.Success, App.MainWindow, "提示", $"{o.ToString()}:原料删除成功!"); }); AddCommand = new RelayCommand(() => { int MaxRawMaterial = 15; var res = AllRawMaterial.Where(p => p.RawMaterialType == "小料").ToList(); if (res.Count < MaxRawMaterial) { AllRawMaterial.Add(new RemoteRecipeRawMaterial() { RawMaterialType = "小料", RawMaterialName = "小料" + (res.Count + 1), RawMaterialLocation = res.Count + 1, RawMaterialBarrelNum = (short)new Random().Next(6, 9), RawMaterialWeight = (float)(new Random().Next(100, 300) * 0.001), }); } else { NoticeDemoViewModel.OpenMsg(EnumPromptType.Success, App.MainWindow, "提示", $"原料最多添加{MaxRawMaterial}种"); } }); AddFLCommand = new RelayCommand(() => { int MaxRawMaterial = 5; var res = AllRawMaterial.Where(p => p.RawMaterialType == "粉料").ToList(); if (res.Count < MaxRawMaterial) { AllRawMaterial.Add(new RemoteRecipeRawMaterial() { RawMaterialType = "粉料", RawMaterialName = "粉料" + (res.Count + 1), RawMaterialLocation = res.Count + 1, RawMaterialWeight = new Random().Next(1, 5), RawMaterialBarrelNum = 3, }); } else { NoticeDemoViewModel.OpenMsg(EnumPromptType.Success, App.MainWindow, "提示", $"粉料最多添加{MaxRawMaterial}种"); } }); SaveCommand = new RelayCommand(() => { if (!MessageNotify.GetInstance.ShowDialog("请确认,是否保存该配方配置?")) { return; } if (RecipeName.Length < 0 || RecipeName == null || RecipeName == String.Empty || RecipeName == "") { NoticeDemoViewModel.OpenMsg(EnumPromptType.Error, App.MainWindow, "错误", $"配方名称不能为空"); return; } if (RecipeCode.Length < 0 || RecipeCode == null || RecipeCode == String.Empty || RecipeCode == "") { NoticeDemoViewModel.OpenMsg(EnumPromptType.Error, App.MainWindow, "错误", $"配方编号不能为空"); return; } if (TrayNum != 1 && TrayNum != 2) { TrayNum = 1; } ObservableCollection RawMaterials = new ObservableCollection(); ObservableCollection WindSendRawMaterials = new ObservableCollection(); if (AllRawMaterial == null || AllRawMaterial.Count <= 0) { NoticeDemoViewModel.OpenMsg(EnumPromptType.Warn, App.MainWindow, "警告", $"没有可保存的参数!"); return; } var res = AllRawMaterial.Where(p => p.RawMaterialType == "小料").ToList(); for (int i = 0; i < res.Count; i++) { if (res.Where(p => p.RawMaterialLocation == res.ElementAt(i).RawMaterialLocation)?.ToList()?.Count >= 2) { NoticeDemoViewModel.OpenMsg(EnumPromptType.Error, App.MainWindow, "错误", $"原料位置冲突,请检查后重试!"); return; } } var res1 = AllRawMaterial.Where(p => p.RawMaterialType == "粉料").ToList(); for (int i = 0; i < res1.Count; i++) { if (res1.Where(p => p.RawMaterialLocation == res1.ElementAt(i).RawMaterialLocation)?.ToList()?.Count >= 2) { NoticeDemoViewModel.OpenMsg(EnumPromptType.Error, App.MainWindow, "错误", $"粉料位置冲突,请检查后重试!"); return; } } int index = Array.FindIndex(Json.Data.Recipes.ToArray(), p => p.RecipeCode == RecipeCode); if (index >= 0) { foreach (var item in AllRawMaterial) { if (item.RawMaterialType == "小料") { RawMaterials.Add(new RemoteRecipeRawMaterial() { RawMaterialName = item.RawMaterialName, RawMaterialType = item.RawMaterialType, RawMaterialLocation = item.RawMaterialLocation, RawMaterialBarrelNum = item.RawMaterialBarrelNum, RawMaterialWeight = item.RawMaterialWeight, }); } if (item.RawMaterialType == "粉料") { WindSendRawMaterials.Add(new WindSendRawMaterial() { RawMaterialName = item.RawMaterialName, RawMaterialWeight = item.RawMaterialWeight, Location = item.RawMaterialLocation, RawMaterialType = item.RawMaterialType, RawMaterialBarrelNum = item.RawMaterialBarrelNum, }); } } Json.Data.Recipes.ElementAt(index).RecipeName = RecipeName; Json.Data.Recipes.ElementAt(index).TrayCode = TrayNum; Json.Data.Recipes.ElementAt(index).RecipeCode = RecipeCode; Json.Data.Recipes.ElementAt(index).RawMaterial = RawMaterials; Json.Data.Recipes.ElementAt(index).WindSend = WindSendRawMaterials; NoticeDemoViewModel.OpenMsg(EnumPromptType.Success, App.MainWindow, "提示", $"修改配方完成!"); MessageNotify.GetInstance.ShowUserLog($"修改配方名称:【{RecipeName}】,配方编号:【{RecipeCode}】。"); } else { foreach (var item in AllRawMaterial) { if (item.RawMaterialType == "小料") { RawMaterials.Add(new RemoteRecipeRawMaterial() { RawMaterialName = item.RawMaterialName, RawMaterialType = item.RawMaterialType, RawMaterialLocation = item.RawMaterialLocation, RawMaterialBarrelNum = item.RawMaterialBarrelNum, RawMaterialWeight = item.RawMaterialWeight, }); } if (item.RawMaterialType == "粉料") { WindSendRawMaterials.Add(new WindSendRawMaterial() { RawMaterialName = item.RawMaterialName, RawMaterialWeight = item.RawMaterialWeight, Location = item.RawMaterialLocation, RawMaterialType = item.RawMaterialType, RawMaterialBarrelNum = item.RawMaterialBarrelNum, }); } } var newRemoteRecipeData = new RemoteRecipeData() { RecipeName = RecipeName, RecipeCode = RecipeCode, TrayCode = TrayNum, RawMaterial = RawMaterials, WindSend = WindSendRawMaterials, }; Json.Data.Recipes.Add(newRemoteRecipeData); //新增一条配方应该默认显示出来。 Json.Data.SelectedRecipes.Add(newRemoteRecipeData); NoticeDemoViewModel.OpenMsg(EnumPromptType.Success, App.MainWindow, "提示", $"自定义配方添加完成!"); MessageNotify.GetInstance.ShowUserLog($"添加一个自定义配方,配方名称:【{RecipeName}】,配方编号:【{RecipeCode}】。"); } ActionManage.GetInstance.Send("CloseNewRemoteRecipeView"); }); } public string RecipeCode { get { return _mRecipeCode; } set { _mRecipeCode = value; OnPropertyChanged(); } } private string _mRecipeCode = string.Empty; public string RecipeName { get { return _mRecipeName; } set { _mRecipeName = value; OnPropertyChanged(); } } private string _mRecipeName = string.Empty; public int TrayNum { get { return _mTrayNum; } set { _mTrayNum = value; OnPropertyChanged(); } } private int _mTrayNum = 1; public string ErrorInfo { get { return _mErrorInfo; } set { _mErrorInfo = value; OnPropertyChanged(); } } private string _mErrorInfo; public ObservableCollection AllRawMaterial { get; set; } = new ObservableCollection(); //public ObservableCollection AllRawMaterial { get; set; } = new ObservableCollection(); public RelayCommand RemoveCommand { get; set; } public RelayCommand AddCommand { get; set; } public RelayCommand AddFLCommand { get; set; } public RelayCommand SaveCommand { get; set; } } }