AlarmtableParameterViewModel.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649
  1. using Aitex.Core.RT.Event;
  2. using Caliburn.Micro.Core;
  3. using MECF.Framework.Common.Alarms;
  4. using MECF.Framework.Common.OperationCenter;
  5. using MECF.Framework.UI.Client.CenterViews.Alarms;
  6. using MECF.Framework.UI.Client.CenterViews.Configs.SystemConfig;
  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. using FurnaceUI.Models;
  15. namespace FurnaceUI.Views.Parameter
  16. {
  17. public class AlarmtableParameterViewModel : FurnaceUIViewModelBase
  18. {
  19. public bool IsPermission { get => this.Permission == 3; }
  20. private AlarmProvider _alarmProvider = new AlarmProvider();
  21. public Dictionary<int, ObservableCollection<AlarmParameterOperation>> TableAlarmParameterOperations = new Dictionary<int, ObservableCollection<AlarmParameterOperation>>();
  22. public ObservableCollection<AlarmParameterOperation> AlarmParameterOperations { get; set; } = new ObservableCollection<AlarmParameterOperation>();
  23. public ObservableCollection<string> AlarmGroups { get; set; } = new ObservableCollection<string>();
  24. public ObservableCollection<string> TableList { get; set; } = new ObservableCollection<string>();
  25. private int _alarmGroupsWidth = 285;
  26. public string SelectedAlarmGroup { get; set; }
  27. public int AlarmGroupsWidth
  28. {
  29. get => _alarmGroupsWidth;
  30. set
  31. {
  32. _alarmGroupsWidth = value;
  33. NotifyOfPropertyChange("AlarmGroupsWidth");
  34. }
  35. }
  36. private List<string> _groupNames = new List<string>
  37. (new string[] {
  38. "None Specified",
  39. "ALG01",
  40. "ALG02",
  41. "ALG03",
  42. "ALG04",
  43. "ALG05",
  44. "ALG06",
  45. "ALG07",
  46. "ALG08",
  47. "ALG09",
  48. "ALG10"
  49. });
  50. public Dictionary<string, Dictionary<string, EventItem>> AllGroupAlarmList = new Dictionary<string, Dictionary<string, EventItem>>();
  51. public List<string> GroupNames
  52. {
  53. get => _groupNames;
  54. set
  55. {
  56. _groupNames = value;
  57. NotifyOfPropertyChange("GroupNames");
  58. }
  59. }
  60. public int SelectedAlarmTableIndex = 0;
  61. public string EntryValue;
  62. public Visibility _alarmTableVisibility = Visibility.Collapsed;
  63. public Visibility AlarmTableVisibility
  64. {
  65. get => _alarmTableVisibility;
  66. set
  67. {
  68. _alarmTableVisibility = value;
  69. NotifyOfPropertyChange("AlarmTableVisibility");
  70. }
  71. }
  72. public Visibility _alarmGroupsVisibility = Visibility.Collapsed;
  73. public Visibility AlarmGroupsVisibility
  74. {
  75. get => _alarmGroupsVisibility;
  76. set
  77. {
  78. _alarmGroupsVisibility = value;
  79. if (_alarmGroupsVisibility == Visibility.Visible)
  80. { AlarmGroupsWidth = 235; }
  81. else
  82. {
  83. AlarmGroupsWidth = 0;
  84. }
  85. NotifyOfPropertyChange("AlarmGroupsVisibility");
  86. }
  87. }
  88. protected override void OnViewLoaded(object view)
  89. {
  90. base.OnViewLoaded(view);
  91. var alarmDict = _alarmProvider.GetXmlAlarmList();
  92. AllGroupAlarmList = alarmDict;
  93. SetVisibility();
  94. // AlarmGroups.Clear();
  95. //alarmDict.Keys.ToList().ForEach(p => AlarmGroups.Add(new ShowAlarmGroup() { Name = p.Name, Display = p.Display }));
  96. //if (AlarmGroups.Where(x => x.AlarmBoolValue == true).Count() <= 0)
  97. //{
  98. // AlarmGroups[0].AlarmBoolValue = true;
  99. //}
  100. //for (int i = 0; i < 6; i++)
  101. //{
  102. // ObservableCollection<AlarmParameterOperation> tempAlarmParameterOperation = new ObservableCollection<AlarmParameterOperation>();
  103. // int index = 1;
  104. // foreach (var item in alarmDict.Keys)
  105. // {
  106. // foreach (var temp in alarmDict[item].Keys)
  107. // {
  108. // tempAlarmParameterOperation.Add(new AlarmParameterOperation()
  109. // {
  110. // No = index,
  111. // ID = temp,
  112. // IsSave = true,
  113. // IsEdit = true,
  114. // AlarmText = alarmDict[item][temp].Message,
  115. // Group = "None Specified"
  116. // });
  117. // index++;
  118. // }
  119. // }
  120. // if (!TableAlarmParameterOperations.ContainsKey(i))
  121. // {
  122. // TableAlarmParameterOperations.Add(i, tempAlarmParameterOperation);
  123. // }
  124. //}
  125. //AlarmParameterOperations.Clear();
  126. ////TableAlarmParameterOperations[0].ToList().ForEach(p => AlarmParameterOperations.Add(p));
  127. //var findGroupAlarm = AllGroupAlarmList.Keys.Where(x => x.Name == AlarmGroups[0].Name).FirstOrDefault();
  128. //var idItems = AllGroupAlarmList[findGroupAlarm].Keys.ToList();
  129. //TableAlarmParameterOperations[SelectedAlarmTableIndex].Where(x => idItems.Contains(x.ID)).ToList().ForEach(p => AlarmParameterOperations.Add(p));
  130. //GetAlarmParameterFormConfig();
  131. }
  132. private void SetVisibility()
  133. {
  134. if (AllGroupAlarmList != null)
  135. {
  136. if (AllGroupAlarmList.Count < 2)
  137. {
  138. AlarmTableVisibility = Visibility.Collapsed;
  139. if (AllGroupAlarmList.Count != 0)
  140. {
  141. AlarmParameterOperations.Clear();
  142. foreach (var subitem in AllGroupAlarmList[AllGroupAlarmList.Keys.FirstOrDefault()].Keys)
  143. {
  144. AlarmParameterOperations.Add(new AlarmParameterOperation(subitem, AllGroupAlarmList[AllGroupAlarmList.Keys.FirstOrDefault()][subitem]));
  145. }
  146. }
  147. }
  148. else
  149. {
  150. AlarmTableVisibility = Visibility.Visible;
  151. TableList.Clear();
  152. foreach (var item in AllGroupAlarmList.Keys)
  153. {
  154. TableList.Add(item);
  155. }
  156. AlarmParameterOperations.Clear();
  157. foreach (var subitem in AllGroupAlarmList[AllGroupAlarmList.Keys.FirstOrDefault()].Keys)
  158. {
  159. AlarmParameterOperations.Add(new AlarmParameterOperation(subitem, AllGroupAlarmList[AllGroupAlarmList.Keys.FirstOrDefault()][subitem]));
  160. }
  161. }
  162. SetAlarmGroup(AllGroupAlarmList.Keys.FirstOrDefault());
  163. }
  164. else
  165. {
  166. AlarmTableVisibility = Visibility.Hidden;
  167. }
  168. }
  169. public void AlarmTableSelected(string index)
  170. {
  171. int tempValue = int.Parse(index);
  172. SelectedAlarmTableIndex = tempValue;
  173. AlarmParameterOperations.Clear();
  174. SetAlarmGroup(index);
  175. //TableAlarmParameterOperations[tempValue].ToList().ForEach(p => AlarmParameterOperations.Add(p));
  176. }
  177. private void SetAlarmGroup(string index)
  178. {
  179. AlarmGroups.Clear();
  180. var categoryList = AllGroupAlarmList[index].Values.Select(x => x.Category);
  181. foreach (var item in categoryList)
  182. {
  183. if (!AlarmGroups.Contains(item))
  184. {
  185. AlarmGroups.Add(item);
  186. }
  187. }
  188. if (AlarmGroups.Count < 2)
  189. {
  190. AlarmGroupsVisibility = Visibility.Collapsed;
  191. AlarmParameterOperations.Clear();
  192. foreach (var subitem in AllGroupAlarmList[AllGroupAlarmList.Keys.FirstOrDefault()].Keys)
  193. {
  194. AlarmParameterOperations.Add(new AlarmParameterOperation(subitem, AllGroupAlarmList[AllGroupAlarmList.Keys.FirstOrDefault()][subitem]));
  195. }
  196. }
  197. else
  198. {
  199. AlarmGroupsVisibility = Visibility.Visible;
  200. AlarmParameterOperations.Clear();
  201. foreach (var subitem in AllGroupAlarmList[index].Keys)
  202. {
  203. AlarmParameterOperations.Add(new AlarmParameterOperation(subitem, AllGroupAlarmList[index][subitem]));
  204. }
  205. }
  206. }
  207. public void AlarmTableSave()
  208. {
  209. var saveStr = GetParameterStrToSave();
  210. InvokeClient.Instance.Service.DoOperation($"System.UpdateAlarmTable", saveStr);
  211. }
  212. /// <summary>
  213. /// 按照Id号或者Alarm文本查找
  214. /// </summary>
  215. /// <param name="alarmId"></param>
  216. /// <param name="alarmText"></param>
  217. public void AlarmValueFind(string alarmId, string alarmText)
  218. {
  219. if (alarmId != "" || alarmText != "")
  220. {
  221. bool bHaveValue = false;
  222. foreach (var alarmOperation in TableAlarmParameterOperations[SelectedAlarmTableIndex])
  223. {
  224. if (alarmOperation.ID.ToString() == alarmId || (alarmText != "" && alarmOperation.Description.ToLower().Contains(alarmText.ToLower())))
  225. {
  226. if (!bHaveValue)
  227. {
  228. bHaveValue = true;
  229. AlarmParameterOperations.Clear();
  230. AlarmParameterOperations.Add(alarmOperation);
  231. }
  232. else
  233. {
  234. AlarmParameterOperations.Add(alarmOperation);
  235. }
  236. }
  237. }
  238. }
  239. else
  240. {
  241. MessageBox.Show("Please input condition! ");
  242. }
  243. }
  244. private string GetParameterStrToSave()
  245. {
  246. List<string> tableParameters = new List<string>();
  247. foreach (var item in TableAlarmParameterOperations.Keys)
  248. {
  249. List<string> ParametersStr = new List<string>();
  250. foreach (var alarmOperation in TableAlarmParameterOperations[item])
  251. {
  252. ParametersStr.Add(alarmOperation.ToString());
  253. }
  254. if (ParametersStr != null && ParametersStr.Count > 0)
  255. {
  256. tableParameters.Add($"{item}:{String.Join(";", ParametersStr)}");
  257. }
  258. }
  259. return String.Join("|", tableParameters);
  260. }
  261. private string GetParameterStr()
  262. {
  263. List<string> tableParameters = new List<string>();
  264. foreach (var item in TableAlarmParameterOperations.Keys)
  265. {
  266. List<string> ParametersStr = new List<string>();
  267. foreach (var alarmOperation in AlarmParameterOperations)
  268. {
  269. if (EntryValue == "AllOn")
  270. alarmOperation.Bypass = true;
  271. else if (EntryValue == "AllOff")
  272. alarmOperation.Bypass = false;
  273. if (!alarmOperation.IsEdit || alarmOperation.Group != "None Specified" || alarmOperation.IsEdit)
  274. {
  275. ParametersStr.Add(alarmOperation.ToString());
  276. }
  277. }
  278. EntryValue = null;
  279. if (ParametersStr != null && ParametersStr.Count > 0)
  280. {
  281. tableParameters.Add($"{item}:{String.Join(";", ParametersStr)}");
  282. }
  283. }
  284. return String.Join("|", tableParameters);
  285. }
  286. private void GetAlarmParameterFormConfig()
  287. {
  288. string strHeader = "PM1.RecipeEditParameter.AlarmTables";
  289. var getConfigAlarm = SystemConfigProvider.Instance.GetValueByName($"{strHeader}.AlarmTable");
  290. if (getConfigAlarm != null && getConfigAlarm != "")
  291. {
  292. var dictTableAlarm = StrParameterToAlarmOperation(getConfigAlarm);
  293. foreach (var item in dictTableAlarm.Keys)
  294. {
  295. foreach (var itemOP in dictTableAlarm[item])
  296. {
  297. var alarmOP = TableAlarmParameterOperations[item].Where(x => x.ID == itemOP.ID).FirstOrDefault();
  298. alarmOP.IsEdit = itemOP.IsEdit;
  299. alarmOP.Group = itemOP.Group;
  300. alarmOP.SelectedIndex = GroupNames.FindIndex(x => x == itemOP.Group);
  301. // alarmOP.IsSave = itemOP.IsSave;
  302. }
  303. }
  304. }
  305. }
  306. private Dictionary<int, ObservableCollection<AlarmParameterOperation>> StrParameterToAlarmOperation(string parameterStr)
  307. {
  308. Dictionary<int, ObservableCollection<AlarmParameterOperation>> tempAlarmOperation = new Dictionary<int, ObservableCollection<AlarmParameterOperation>>();
  309. string[] tableParameters = parameterStr.Split('|');
  310. if (tableParameters.Length > 0)
  311. {
  312. foreach (var item in tableParameters)
  313. {
  314. ObservableCollection<AlarmParameterOperation> alarmParameterOperations = new ObservableCollection<AlarmParameterOperation>();
  315. var tabelPar = item.Split(':');
  316. var alarmstrs = tabelPar[1].Split(';');
  317. if (alarmstrs != null && alarmstrs.Length > 0)
  318. {
  319. foreach (var alarmitem in alarmstrs)
  320. {
  321. alarmParameterOperations.Add(new AlarmParameterOperation(alarmitem));
  322. }
  323. }
  324. if (alarmParameterOperations.Count > 0)
  325. {
  326. tempAlarmOperation.Add(int.Parse(tabelPar[0]), alarmParameterOperations);
  327. }
  328. }
  329. }
  330. return tempAlarmOperation;
  331. }
  332. public void AlarmTableAllOn()
  333. {
  334. EntryValue = "AllOn";
  335. GetAlarmParameterOperations();
  336. //var alarmDict = _alarmProvider.GetXmlAlarmList();
  337. //AllGroupAlarmList = alarmDict;
  338. //SetVisibility();
  339. }
  340. public void AlarmTableAllOff()
  341. {
  342. EntryValue = "AllOff";
  343. GetAlarmParameterOperations();
  344. }
  345. public void AlarmTableCancel()
  346. {
  347. }
  348. public void GetAlarmParameterOperations()
  349. {
  350. //if (AllGroupAlarmList[SelectedAlarmTableIndex.ToString()].AlarmBoolValue == true)
  351. //{
  352. // AlarmParameterOperations.Clear();
  353. // //var findGroupAlarm = AllGroupAlarmList.Keys.Where(x => x.Name == AlarmGroups[0].Name).FirstOrDefault();
  354. // //var idItems = AllGroupAlarmList[findGroupAlarm].Keys.ToList();
  355. // //TableAlarmParameterOperations[SelectedAlarmTableIndex].Where(x => idItems.Contains(x.ID)).ToList().ForEach(p => AlarmParameterOperations.Add(p));
  356. //}
  357. if (AllGroupAlarmList == null || AllGroupAlarmList.Count == 0) return;
  358. foreach (var item in AllGroupAlarmList[SelectedAlarmTableIndex.ToString()])
  359. {
  360. if (AlarmGroups.Count < 2)
  361. {
  362. if (EntryValue == "AllOn")
  363. item.Value.Bypass = true;
  364. else if (EntryValue == "AllOff")
  365. item.Value.Bypass = false;
  366. }
  367. else
  368. {
  369. if (SelectedAlarmGroup != null)
  370. {
  371. if (item.Value.Category == SelectedAlarmGroup)
  372. {
  373. if (EntryValue == "AllOn")
  374. item.Value.Bypass = true;
  375. else if (EntryValue == "AllOff")
  376. item.Value.Bypass = false;
  377. }
  378. }
  379. }
  380. }
  381. AlarmParameterOperations.Clear();
  382. IEnumerable<KeyValuePair<string, EventItem>> findGroupAlarm;
  383. if (SelectedAlarmGroup != null)
  384. {
  385. findGroupAlarm = AllGroupAlarmList[SelectedAlarmTableIndex.ToString()].Where(x => x.Value.Category == SelectedAlarmGroup);
  386. }
  387. else
  388. {
  389. findGroupAlarm = AllGroupAlarmList[SelectedAlarmTableIndex.ToString()];
  390. }
  391. foreach (var item in findGroupAlarm)
  392. {
  393. AlarmParameterOperations.Add(new AlarmParameterOperation(item.Key, item.Value));
  394. }
  395. // GetParameterStr();
  396. }
  397. public void AlarmTypeSelected(object obj)
  398. {
  399. var tempobj = obj;
  400. var selectedAlarmGroup = (string)tempobj;
  401. SelectedAlarmGroup = selectedAlarmGroup;
  402. AlarmParameterOperations.Clear();
  403. var findGroupAlarm = AllGroupAlarmList[SelectedAlarmTableIndex.ToString()].Where(x => x.Value.Category == selectedAlarmGroup);
  404. foreach (var item in findGroupAlarm)
  405. {
  406. AlarmParameterOperations.Add(new AlarmParameterOperation(item.Key, item.Value));
  407. }
  408. }
  409. public class AlarmParameterOperation : PropertyChangedBase
  410. {
  411. public AlarmParameterOperation()
  412. { }
  413. private string _alarmName;
  414. public string AlarmName
  415. {
  416. get => _alarmName;
  417. set
  418. {
  419. _alarmName = value;
  420. NotifyOfPropertyChange("AlarmName");
  421. }
  422. }
  423. private string _source;
  424. public string Source
  425. {
  426. get => _source;
  427. set
  428. {
  429. _source = value;
  430. NotifyOfPropertyChange("Source");
  431. }
  432. }
  433. private long _id;
  434. public long ID
  435. {
  436. get => _id;
  437. set
  438. {
  439. _id = value;
  440. NotifyOfPropertyChange("ID");
  441. }
  442. }
  443. private string _description;
  444. public string Description
  445. {
  446. get => _description;
  447. set
  448. {
  449. _description = value;
  450. NotifyOfPropertyChange("Description");
  451. }
  452. }
  453. private string _solution;
  454. public string Solution
  455. {
  456. get => _solution;
  457. set
  458. {
  459. _solution = value;
  460. NotifyOfPropertyChange("Solution");
  461. }
  462. }
  463. private string _explaination;
  464. public string Explaination
  465. {
  466. get => _explaination;
  467. set
  468. {
  469. _explaination = value;
  470. NotifyOfPropertyChange("Explaination");
  471. }
  472. }
  473. private bool _bypass;
  474. public bool Bypass
  475. {
  476. get => _bypass;
  477. set
  478. {
  479. _bypass = value;
  480. NotifyOfPropertyChange("Bypass");
  481. }
  482. }
  483. private string _group;
  484. public string Group
  485. {
  486. get => _group;
  487. set
  488. {
  489. _group = value;
  490. NotifyOfPropertyChange("Group");
  491. }
  492. }
  493. private bool _isEdit;
  494. public bool IsEdit
  495. {
  496. get => _isEdit;
  497. set
  498. {
  499. _isEdit = value;
  500. NotifyOfPropertyChange("IsEdit");
  501. }
  502. }
  503. private int _selectedIndex;
  504. public int SelectedIndex
  505. {
  506. get => _selectedIndex;
  507. set
  508. {
  509. _selectedIndex = value;
  510. NotifyOfPropertyChange("SelectedIndex");
  511. }
  512. }
  513. public AlarmParameterOperation(string key, EventItem eventItem)
  514. {
  515. AlarmName = key;
  516. if (eventItem != null)
  517. {
  518. ID = eventItem.Id;
  519. Source = eventItem.Source;
  520. Description = eventItem.Description;
  521. Solution = eventItem.Solution;
  522. Explaination = eventItem.Explaination;
  523. Bypass = eventItem.Bypass;
  524. Group = eventItem.Group.ToString();
  525. IsEdit = eventItem.Editable;
  526. }
  527. }
  528. public AlarmParameterOperation(string alarmParameterStr)
  529. {
  530. if (alarmParameterStr != null)
  531. {
  532. var alarmPar = alarmParameterStr.Split(',');
  533. if (alarmPar != null && alarmPar.Length > 0)
  534. {
  535. _id = int.Parse(alarmPar[0]);
  536. //_isSave = bool.Parse(alarmPar[1]);
  537. _group = alarmPar[2];
  538. _isEdit = bool.Parse(alarmPar[3]);
  539. }
  540. }
  541. }
  542. public override string ToString()
  543. {
  544. string rtnString = $"{_id},{_group},{_isEdit}";
  545. return rtnString;
  546. }
  547. }
  548. public class ShowAlarmGroup : PropertyChangedBase
  549. {
  550. private string _name;
  551. public string Name
  552. {
  553. get => _name; set
  554. {
  555. _name = value;
  556. NotifyOfPropertyChange("Name");
  557. }
  558. }
  559. private string _display;
  560. public string Display
  561. {
  562. get => _display; set
  563. {
  564. _display = value;
  565. NotifyOfPropertyChange("Display");
  566. }
  567. }
  568. private bool _bvalue = false;
  569. public bool AlarmBoolValue
  570. {
  571. get { return _bvalue; }
  572. set { _bvalue = value; NotifyOfPropertyChange("AlarmBoolValue"); }
  573. }
  574. }
  575. }
  576. }