using BPASmartClient.CustomResource.Pages.Model; using BPASmartClient.CustomResource.UserControls; using BPASmartClient.CustomResource.UserControls.MessageShow; using BPASmartClient.FoodStationTest.Model; using BPASmartClient.Helper; using Microsoft.Toolkit.Mvvm.ComponentModel; using Microsoft.Toolkit.Mvvm.Input; using System; using System.Collections.ObjectModel; using System.Linq; namespace BPASmartClient.FoodStationTest.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, }); } } }), "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(); 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, }); } } 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; NoticeDemoViewModel.OpenMsg(EnumPromptType.Success, App.MainWindow, "提示", $"修改配方完成!"); } 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, }); } } Json.Data.Recipes.Add(new RemoteRecipeData() { RecipeName = RecipeName, RecipeCode = RecipeCode, TrayCode = TrayNum, RawMaterial = RawMaterials }); NoticeDemoViewModel.OpenMsg(EnumPromptType.Success, App.MainWindow, "提示", $"自定义配方添加完成!"); } 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; } } }