终端一体化运控平台
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 

249 行
11 KiB

  1. using BPASmartClient.CustomResource.Pages.Model;
  2. using BPASmartClient.CustomResource.UserControls;
  3. using BPASmartClient.CustomResource.UserControls.MessageShow;
  4. using BPA.Helper;
  5. using FryPot_DosingSystem.Model;
  6. using BPA.Helper;
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Collections.ObjectModel;
  10. using System.Linq;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using System.Windows;
  14. namespace FryPot_DosingSystem.ViewModel
  15. {
  16. internal class FlowProcessSetViewModel:NotifyBase
  17. {
  18. public int Id { get; set; } = 0;
  19. public static int materialNum { get; set; }
  20. public ObservableCollection<FlowProcessModel> flowProcessModels { get; set; } = new ObservableCollection<FlowProcessModel>();
  21. /// <summary>
  22. /// 目标重量偏差
  23. /// </summary>
  24. public string targetWeightOffset { get { return _targetWeightOffset; } set { _targetWeightOffset = value;OnPropertyChanged(); } }
  25. private string _targetWeightOffset="0";
  26. private string _stirTime="0";
  27. /// <summary>
  28. /// 秘制配方搅拌时间
  29. /// </summary>
  30. public string StirTime
  31. {
  32. get { return _stirTime; }
  33. set { _stirTime = value; OnPropertyChanged(); }
  34. }
  35. public string currentRecipeName { get; set; }
  36. public static int currentItemId { get; set; }
  37. public BPARelayCommand CloseWindowCommand { get; set; }
  38. public ObservableCollection<string> FlowItems { get; set; } = new ObservableCollection<string>();
  39. public BPARelayCommand ConfirmCommand { get; set; }
  40. public BPARelayCommand AddLastFlowItemCommand { get; set; }
  41. public BPARelayCommand AddFrontFlowItemCommand { get; set; }
  42. public BPARelayCommand DeleteFlowItemCommand { get; set; }
  43. public FlowProcessSetViewModel()
  44. {
  45. Json<FlowProcessNames>.Read();
  46. // FlowProcessNames.GetInstance.Names = Json<FlowProcessNames>.Data.Names;
  47. // FlowItems = Json<FlowProcessNames>.Data.NameId;
  48. foreach (KeyValuePair<string, int> item in Json<FlowProcessNames>.Data.NameId)
  49. {
  50. FlowItems.Add(item.Key);
  51. }
  52. ActionManage.GetInstance.Register(new Action<object>((obj) =>
  53. {
  54. if (obj != null)
  55. try
  56. {
  57. currentItemId = Convert.ToInt32(obj);
  58. }
  59. catch (Exception)
  60. {
  61. }
  62. }), "CurrentItemId");
  63. //ActionManage.GetInstance.Register(new Action<object>(obj =>
  64. //{
  65. // if (obj != null)
  66. // materialNum = Convert.ToInt32(obj);
  67. //}), "MaterialNum");
  68. ActionManage.GetInstance.Register(new Action<object>(recipeName =>
  69. {
  70. if (recipeName != null)
  71. {
  72. currentRecipeName = recipeName.ToString();
  73. var res = Json<RecipeManage>.Data.Recipes.FirstOrDefault(p => p.FlowProcess?.RecipeName == recipeName?.ToString());
  74. if (res != null && res is NewRecipeModel recipe) //编辑已有工艺
  75. {
  76. targetWeightOffset = recipe.FlowProcess.targetWeightOffset.ToString();
  77. StirTime=recipe.FlowProcess.StirTime.ToString();
  78. foreach (var item in recipe.materialCollection)
  79. {
  80. if (!FlowItems.Contains(item.MaterialLoc.ToString()))
  81. FlowItems.Add(item.MaterialLoc.ToString());//下拉框
  82. }
  83. foreach (var item in recipe.FlowProcess.fpModels)
  84. {
  85. flowProcessModels.Add(new FlowProcessModel { FryMaterialNum = item.FryMaterialNum, FrySpeed = item.FrySpeed, FryWeight = item.FryWeight, TargeWeight=item.TargeWeight, FryTemperature = item.FryTemperature, FryPeriodTime = item.FryPeriodTime, SmallFirePercent = item.SmallFirePercent, MidFirePercent = item.MidFirePercent, BigFirePercent = item.BigFirePercent, StrongFirePercent = item.StrongFirePercent });
  86. }
  87. // ActionManage.GetInstance.Send("MaterialNum", recipe.materialCollection.Count);
  88. }
  89. else//创建新工艺
  90. {
  91. var name = Json<RecipeManage>.Data.Recipes.FirstOrDefault(p => p.RecipeName == recipeName.ToString());
  92. if (name != null)
  93. {
  94. name.FlowProcess.RecipeName = recipeName.ToString();
  95. foreach (var item in name.materialCollection)
  96. {
  97. if (!FlowItems.Contains(item.MaterialLoc.ToString()))
  98. FlowItems.Add(item.MaterialLoc.ToString());//下拉框
  99. }
  100. ActionManage.GetInstance.Send("MaterialNum", name.materialCollection.Count);
  101. //name.FlowProcess.fpModels = flowProcessModels;
  102. }
  103. }
  104. }
  105. }), "EditFlowProcess");
  106. CloseWindowCommand = new BPARelayCommand(() =>
  107. {
  108. ActionManage.GetInstance.Send("CloseFlowProcessView");
  109. });
  110. ConfirmCommand = new BPARelayCommand(() =>
  111. {
  112. var name = Json<RecipeManage>.Data.Recipes.FirstOrDefault(p => p.RecipeName == currentRecipeName.ToString());
  113. if (name != null)
  114. {
  115. name.FlowProcess.RecipeName = currentRecipeName.ToString();
  116. if (float.TryParse(targetWeightOffset.Trim(), out float offset))
  117. {
  118. name.FlowProcess.targetWeightOffset = offset;//目标重量偏差
  119. }
  120. else
  121. {
  122. MessageBox.Show("非法目标重量偏差设置", "提示", MessageBoxButton.OK, MessageBoxImage.Error);
  123. name.FlowProcess.targetWeightOffset = 0.0F;
  124. return;
  125. }
  126. if (ushort.TryParse(StirTime.Trim(), out ushort time))
  127. {
  128. name.FlowProcess.StirTime = time;//秘制配方搅拌时间
  129. }
  130. else
  131. {
  132. MessageBox.Show("非法秘制配方搅拌时间设置", "提示", MessageBoxButton.OK, MessageBoxImage.Error);
  133. name.FlowProcess.StirTime = 0;
  134. return;
  135. }
  136. //工艺桶号重复性检测
  137. foreach (var item in name.materialCollection)
  138. {
  139. var res = flowProcessModels.Where(p => p.FryMaterialNum == item.MaterialLoc.ToString());
  140. if (res.Count() > 1)
  141. {
  142. // NoticeDemoViewModel.OpenMsg(EnumPromptType.Error, App.MainWindow, "提示", $"保存失败,桶号重复!");
  143. MessageNotify.GetInstance.ShowUserLog("保存失败,桶号重复");
  144. MessageBox.Show("保存失败,桶号重复", "提示", MessageBoxButton.OK, MessageBoxImage.Error);
  145. return;
  146. }
  147. }
  148. //工艺步骤中清洗工艺重复性检测
  149. if (flowProcessModels.FirstOrDefault(p=>p.FryMaterialNum=="清洗")!=null)
  150. {
  151. if (flowProcessModels.Where(p => p.FryMaterialNum == "清洗").Count() > 1||flowProcessModels.IndexOf(flowProcessModels.FirstOrDefault(p => p.FryMaterialNum == "清洗"))<flowProcessModels.Count-1)
  152. {
  153. MessageNotify.GetInstance.ShowUserLog("保存失败,清洗工艺重复或非法配置");
  154. MessageBox.Show("保存失败,清洗工艺重复或非法配置", "提示", MessageBoxButton.OK, MessageBoxImage.Error);
  155. return;
  156. }
  157. }
  158. // name.FlowProcess.fpModels = flowProcessModels;
  159. name.FlowProcess.fpModels.Clear();
  160. foreach (var item in flowProcessModels)
  161. {
  162. name.FlowProcess.fpModels.Add(new FlowProcessModel { FryMaterialNum = item.FryMaterialNum, FrySpeed = item.FrySpeed, FryWeight = item.FryWeight,TargeWeight=item.TargeWeight, FryTemperature = item.FryTemperature, FryPeriodTime = item.FryPeriodTime, SmallFirePercent = item.SmallFirePercent, MidFirePercent = item.MidFirePercent, BigFirePercent = item.BigFirePercent, StrongFirePercent = item.StrongFirePercent });
  163. }
  164. //foreach (var item in name.materialCollection)
  165. //{
  166. // string s= Json<FlowProcessNames>.Data.Names.FirstOrDefault(p=>p == item.MaterialLoc.ToString());
  167. // Json<FlowProcessNames>.Data.Names.Remove(s);
  168. //}
  169. }
  170. Json<RecipeManage>.Save();
  171. Json<FlowProcessNames>.Save();
  172. ActionManage.GetInstance.Send("CloseFlowProcessView");
  173. });
  174. AddFrontFlowItemCommand = new BPARelayCommand(() =>
  175. {
  176. try
  177. {
  178. if (currentItemId == 0)
  179. {
  180. flowProcessModels.Insert(0, new FlowProcessModel());
  181. }
  182. else
  183. {
  184. flowProcessModels.Insert(currentItemId, new FlowProcessModel());
  185. currentItemId = currentItemId + 1;
  186. }
  187. }
  188. catch (Exception)
  189. {
  190. //throw;
  191. }
  192. });
  193. AddLastFlowItemCommand = new BPARelayCommand(() =>
  194. {
  195. try
  196. {
  197. if (flowProcessModels.Count <= 0)
  198. {
  199. flowProcessModels.Insert(0, new FlowProcessModel());
  200. }
  201. else if (currentItemId != 0)
  202. {
  203. flowProcessModels.Insert(currentItemId + 1, new FlowProcessModel());
  204. }
  205. else
  206. {
  207. flowProcessModels.Add(new FlowProcessModel());
  208. }
  209. }
  210. catch (Exception)
  211. {
  212. // throw;
  213. }
  214. });
  215. DeleteFlowItemCommand = new BPARelayCommand(() =>
  216. {
  217. if (flowProcessModels.Count > 0)
  218. flowProcessModels.RemoveAt(currentItemId);
  219. currentItemId = 0;
  220. });
  221. }
  222. }
  223. }