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 Microsoft.Toolkit.Mvvm.Input; using BPASmartClient.Helper; using BPASmartClient.CustomResource.Pages.Model; using BPASmartClient.Model; using BPASmartClient.CustomResource.UserControls.MessageShow; using BPASmartClient.CustomResource.UserControls; namespace BPASmartClient.DosingSystem.ViewModel { public class NewRecipeViewModel : ViewModelBase { public NewRecipeViewModel() { ActionManage.GetInstance.Register(new Action((o) => { if (o != null && o is RecipeModel rm) { RecipeName = rm.RecipeName; foreach (var item in rm.RawMaterials) { item.SelectIndex = Array.FindIndex(RawMaterialNames.ToArray(), p => p == item.RawMaterialName); RawMaterials.Add(item); } RecipCode = rm.RecipCode; Index = Array.FindIndex(Json.Data.Recipes.ToArray(), p => p.RecipeName == RecipeName); } }), "Details", true); AddCommand = new RelayCommand(() => { p: string guid = Guid.NewGuid().ToString(); if (RawMaterials.FirstOrDefault(p => p.RawMaterialId == guid) == null) { RawMaterials.Add(new RawMaterialModel() { RawMaterialId = guid }); } else goto p; }); RemoveCommand = new RelayCommand((obj) => { if (obj is string rm) { var res = RawMaterials.FirstOrDefault(p => p.RawMaterialId == rm); if (res != null) Global.DeviceRawMaterials.Remove(res); } }); SaveCommand = new RelayCommand(() => { if (string.IsNullOrEmpty(RecipeName)) { ErrorInfo = "请输入配方名称"; return; } //编辑配方 if (Index >= 0 && Index < Json.Data.Recipes.Count) { var res = Array.FindIndex(Json.Data.Recipes.ToArray(), p => p.RecipeName == RecipeName); if (res >= 0 && res != Index) { ErrorInfo = "配方名称已经存在!"; return; } Json.Data.Recipes.ElementAt(Index).RecipeName = RecipeName; Json.Data.Recipes.ElementAt(Index).RawMaterials.Clear(); RawMaterials.ToList()?.ForEach(item => { Json.Data.Recipes.ElementAt(Index).RawMaterials.Add(item); }); Json.Save(); NoticeDemoViewModel.OpenMsg(EnumPromptType.Success, App.MainWindow, "提示", $"{RecipeName} 配方编辑完成"); } else //新建配方 { if (Json.Data.Recipes.FirstOrDefault(p => p.RecipeName == RecipeName) != null) { ErrorInfo = "配方名称已存在!"; return; } Json.Data.Recipes.Add(new RecipeModel() { RecipeName = RecipeName, RawMaterials = RawMaterials, }); Json.Save(); NoticeDemoViewModel.OpenMsg(EnumPromptType.Success, App.MainWindow, "提示", $"新建配方成功!"); } //for (int i = 0; i < RawMaterials.Count; i++) //{ // var res = DeviceInquire.GetInstance.devices.FirstOrDefault(p => p.DeviceName == RawMaterials.ElementAt(i).RawMaterialName); // if (res != null) // { // RawMaterials.ElementAt(i).DeviceIp = res.IpAddress;//根据设备名称和原料名称的唯一匹配关系,给原料配置IP // RawMaterials.ElementAt(i).RawMaterialSource = 1; // } // var su = Global.DeviceRawMaterials.FirstOrDefault(p => p.RawMaterialName == RawMaterials.ElementAt(i).RawMaterialName); // if (su != null) // { // RawMaterials.ElementAt(i).RawMaterialSource = su.RawMaterialSource; // } //} //if (RecipCode.Length <= 0)//新建配方 //{ // var res = Array.FindIndex(Json.Data.Recipes.ToArray(), p => p.RecipeName == RecipeName); // if (res >= 0 && res < Json.Data.Recipes.Count) // { // ErrorInfo = "该配方已存在,请重新输入"; // } // else // { // AddRecipes(); // } //} //else//修改配方 //{ // var res = Array.FindIndex(Json.Data.Recipes.ToArray(), p => p.RecipCode == RecipCode); // if (res >= 0 && res < Json.Data.Recipes.Count) // { // Json.Data.Recipes.ElementAt(res).RecipeName = RecipeName; // Json.Data.Recipes.ElementAt(res).RawMaterials.Clear(); // foreach (var item in RawMaterials) // { // Json.Data.Recipes.ElementAt(res).RawMaterials.Add(item); // } // } //} ActionManage.GetInstance.Send("CloseNewRecipeView"); }); if (Global.userInfo.permission == CustomResource.Pages.Enums.Permission.管理员) { foreach (var item in Global.DeviceRawMaterials) { RawMaterialNames.Add(item.RawMaterialName); } foreach (var item in Json.Data.LocalMaterails) { RawMaterialNames.Add(item.RawMaterialName); } } else { foreach (var item in Global.DeviceRawMaterials) { if (Global.userInfo.devRawMaterials.FirstOrDefault(p => p.RawMaterialName == item.RawMaterialName) != null) RawMaterialNames.Add(item.RawMaterialName); } foreach (var item in Json.Data.LocalMaterails) { if (Global.userInfo.locaRawMaterials.FirstOrDefault(p => p.RawMaterialName == item.RawMaterialName) != null) RawMaterialNames.Add(item.RawMaterialName); } } } private void AddRecipes() { string date = DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss"); var dates = date.Split("-").ToList(); StringBuilder sb = new StringBuilder(); dates?.ForEach((item) => { sb.Append(item); }); Json.Data.Recipes.Add(new RecipeModel() { SerialNum = Json.Data.Recipes.Count + 1, RawMaterials = RawMaterials, RecipCode = sb.ToString(), RecipeName = RecipeName, }); } private string RecipCode = string.Empty; public string RecipeName { get { return _mRecipeName; } set { _mRecipeName = value; OnPropertyChanged(); } } private string _mRecipeName = string.Empty; //public string ErrorInfo { get { return _mErrorInfo; } set { _mErrorInfo = value; OnPropertyChanged(); } } //private string _mErrorInfo; //public RelayCommand AddCommand { get; set; } //public RelayCommand RemoveCommand { get; set; } //public RelayCommand SaveCommand { get; set; } public ObservableCollection RawMaterials { get; set; } = new ObservableCollection(); public ObservableCollection RawMaterialNames { get; set; } = new ObservableCollection(); } }