using BPASmartClient.CustomResource.Pages.Model; using BPASmartClient.Helper; using FryPot_DosingSystem.Model; using Microsoft.Toolkit.Mvvm.ComponentModel; using Microsoft.Toolkit.Mvvm.Input; using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace FryPot_DosingSystem.ViewModel { internal class NewRecipeViewModel : ObservableObject { /// /// 配方唯一编码,用于编辑配方 /// public string recipeId { get; set; } /// /// 配方名称 /// private string _recipeName; public string RecipeName { get { return _recipeName; } set { _recipeName = value; OnPropertyChanged(); } } private int _recipeRollerNum; /// /// 配方中桶数 /// public int RecipeRollerNum { get { return _recipeRollerNum; } set { _recipeRollerNum = value; OnPropertyChanged(); } } public ObservableCollection materials { get; set; } = new ObservableCollection(); public ObservableCollection materialNames { get; set; } = new ObservableCollection(); public RelayCommand AddRecipe { get; set; } public RelayCommand RemoveRecipe { get; set; } public RelayCommand Comfirm { get; set; } public RelayCommand SaveAs { get; set; } public NewRecipeViewModel() { Json.Read(); MaterialNames.GetInstance.Names = Json.Data.Names; materialNames = Json.Data.Names; ActionManage.GetInstance.Register(new Action(Id => { if (Id != null && Id is string strId) { var res = Json.Data.Recipes.FirstOrDefault(p => p.RecipeId == strId); if (res != null && res is NewRecipeModel rom) { RecipeName = rom.RecipeName; RecipeRollerNum = rom.materialCollection.Count; foreach (var item in rom.materialCollection) { materials.Add(item); } recipeId = strId; } } }), "EditRecipe"); AddRecipe = new RelayCommand(() => { for (int i = 0; i < RecipeRollerNum; i++) { pr1: string materialCode = Guid.NewGuid().ToString();//原料唯一ID ,后期需要根据实际要求更改 var res = materials.FirstOrDefault(p => p.MaterialCode == materialCode); if (res == null) { materials.Add(new MaterialType() { MaterialCode = materialCode }); } else { goto pr1; } } }); RemoveRecipe = new RelayCommand(code => { var res = materials.FirstOrDefault(m => m.MaterialCode == code); if (res != null) materials.Remove(res); }); Comfirm = new RelayCommand(() => { var bom = Json.Data.Recipes.FirstOrDefault(p => p.RecipeId == recipeId); if (bom == null)//新配方 { var name = Json.Data.Recipes.FirstOrDefault(p => p.RecipeName == RecipeName); if (name == null) { if (RecipeRollerNum != 0) { prop: string recipeID = Guid.NewGuid().ToString();//配方唯一ID,后期根据实际要求更改 var res = Json.Data.Recipes.FirstOrDefault(p => p.RecipeId == recipeID); if (res == null) { Json.Data.Recipes.Add(new NewRecipeModel { RecipeId = recipeID, RecipeName = RecipeName, FlowProcess=new FlowProcessManage(), materialCollection = materials,DataTime=DateTime.Now.ToShortDateString()});//配方添加 } else { goto prop; } MessageLog.GetInstance.ShowUserLog($"配方【{RecipeName}】新建成功"); } else { MessageLog.GetInstance.ShowUserLog($"新建配方【{RecipeName}】无效【配方中没有添加原料】"); } ActionManage.GetInstance.Send("CloseNewRecipeView"); } else { MessageBox.Show("配方名称重复或为空,请重命名!!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } } else //已有配方,用于编辑 { bom.materialCollection = materials; bom.RecipeName = RecipeName; bom.UpdateTime = DateTime.Now.ToShortDateString(); Json.Save(); ActionManage.GetInstance.Send("CloseNewRecipeView"); } }); SaveAs = new RelayCommand(() => { var bom = Json.Data.Recipes.FirstOrDefault(p => p.RecipeName == RecipeName); var rec = Json.Data.Recipes.FirstOrDefault(p => p.RecipeId == recipeId); if (bom == null && rec != null)//配方名称更改 { if (RecipeRollerNum != 0) { prop: string recipeID = Guid.NewGuid().ToString();//配方唯一ID,后期根据实际要求更改 var res = Json.Data.Recipes.FirstOrDefault(p => p.RecipeId == recipeID); if (res == null) { Json.Data.Recipes.Add(new NewRecipeModel { RecipeId = recipeID, RecipeName = RecipeName, materialCollection = materials });//配方添加 } else { goto prop; } MessageLog.GetInstance.ShowUserLog("新建配方成功"); } else { MessageLog.GetInstance.ShowUserLog("新建配方无效【配方中没有添加原料】"); } ActionManage.GetInstance.Send("CloseNewRecipeView"); } else { MessageBox.Show("另存配方失败","提示",MessageBoxButtons.OK,MessageBoxIcon.Information); } ActionManage.GetInstance.Send("CloseNewRecipeView"); }); } } }