ManualViewModel.cs 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659
  1. using System;
  2. using CustomUI;
  3. using Prism.Mvvm;
  4. using System.Linq;
  5. using Prism.Commands;
  6. using System.Windows;
  7. using System.Globalization;
  8. using SHJX.Service.Model.Dao;
  9. using System.Windows.Controls;
  10. using SHJX.Service.Common.Utils;
  11. using SHJX.Service.Model.Control;
  12. using System.Collections.Generic;
  13. using SHJX.Service.Common.ReadXML;
  14. using System.Collections.ObjectModel;
  15. using SHJX.Service.Common.UserDelegate;
  16. using SHJX.Service.Common.ExtendElement;
  17. using SHJX.Service.Control.ServiceController;
  18. using SHJX.Service.Common.Logging;
  19. using Microsoft.Extensions.Logging;
  20. namespace SHJX.Service.ModelView
  21. {
  22. public class ManualViewModel : BindableBase
  23. {
  24. private static readonly ILogger logger = LogFactory.BuildLogger(typeof(ManualViewModel));
  25. private readonly ManualController _controller;
  26. public ManualViewModel(ReadConfigUtil config)
  27. {
  28. _controller = new ManualController(config);
  29. RegisterMessage();
  30. InitData();
  31. }
  32. /// <summary>
  33. /// 注册消息
  34. /// </summary>
  35. private void RegisterMessage()
  36. {
  37. Messager.Register("ChangeTemperature", SetTemperature);
  38. }
  39. #region DataBind
  40. private int _manualBarProcess;
  41. public int ManualBarProcess
  42. {
  43. get => _manualBarProcess;
  44. set
  45. {
  46. _manualBarProcess = value;
  47. RaisePropertyChanged(nameof(ManualBarProcess));
  48. }
  49. }
  50. private string _settingTemperatures;
  51. public string SettingTemperature
  52. {
  53. get => _settingTemperatures;
  54. set
  55. {
  56. _settingTemperatures = value;
  57. RaisePropertyChanged(nameof(SettingTemperature));
  58. }
  59. }
  60. private string _temperatureText;
  61. public string CurrentTemperature
  62. {
  63. get => _temperatureText;
  64. set
  65. {
  66. _temperatureText = value;
  67. RaisePropertyChanged(nameof(CurrentTemperature));
  68. }
  69. }
  70. public ObservableCollection<EquipmentArea> Areas { get; set; }
  71. public List<ComboBoxItem> AreaPoint { get; set; }
  72. public EquipmentArea Area
  73. {
  74. get => Areas.FirstOrDefault(item => item.PointName.Equals(AreaCurrentPoint.Content));
  75. set
  76. {
  77. Areas.Where(item => item.PointName.Equals(AreaCurrentPoint.Content)).ToArray()[0] = value;
  78. RaisePropertyChanged(nameof(Area));
  79. }
  80. }
  81. private ComboBoxItem _areaCurrentPoint;
  82. public ComboBoxItem AreaCurrentPoint
  83. {
  84. get => _areaCurrentPoint;
  85. set
  86. {
  87. _areaCurrentPoint = value;
  88. RaisePropertyChanged(nameof(AreaCurrentPoint));
  89. }
  90. }
  91. private bool _potassiumDichromateHighOutValue;
  92. public bool PotassiumDichromateHighOutValue
  93. {
  94. get => _potassiumDichromateHighOutValue;
  95. set
  96. {
  97. _potassiumDichromateHighOutValue = value;
  98. RaisePropertyChanged(nameof(PotassiumDichromateHighOutValue));
  99. }
  100. }
  101. private bool _potassiumDichromateHighInValue;
  102. public bool PotassiumDichromateHighInValue
  103. {
  104. get => _potassiumDichromateHighInValue;
  105. set
  106. {
  107. _potassiumDichromateHighInValue = value;
  108. RaisePropertyChanged(nameof(PotassiumDichromateHighInValue));
  109. }
  110. }
  111. private bool _potassiumDichromateLowOutValue;
  112. public bool PotassiumDichromateLowOutValue
  113. {
  114. get => _potassiumDichromateLowOutValue;
  115. set
  116. {
  117. _potassiumDichromateLowOutValue = value;
  118. RaisePropertyChanged(nameof(PotassiumDichromateLowOutValue));
  119. }
  120. }
  121. private bool _potassiumDichromateLowInValue;
  122. public bool PotassiumDichromateLowInValue
  123. {
  124. get => _potassiumDichromateLowInValue;
  125. set
  126. {
  127. _potassiumDichromateLowInValue = value;
  128. RaisePropertyChanged(nameof(PotassiumDichromateLowInValue));
  129. }
  130. }
  131. private void InitData()
  132. {
  133. PotassiumDichromateHighOutValue = false;
  134. PotassiumDichromateHighInValue = false;
  135. PotassiumDichromateLowOutValue = false;
  136. PotassiumDichromateLowInValue = false;
  137. ManualBarProcess = 0;
  138. AreaPoint = new List<ComboBoxItem>();
  139. Areas = new ObservableCollection<EquipmentArea>(_controller.GetAreaInfo());
  140. (from EquipmentArea item in Areas select item.PointName).ToList().ForEach(item =>
  141. {
  142. AreaPoint.Add(
  143. new ComboBoxItem()
  144. {
  145. Foreground = "#99CCCC".ConvertToBrush(),
  146. Content = item
  147. }
  148. );
  149. });
  150. AreaCurrentPoint = AreaPoint.FirstOrDefault();
  151. }
  152. #endregion
  153. #region Command
  154. private DelegateCommand<object> _forwardCommand;
  155. public DelegateCommand<object> ForwardCommand => _forwardCommand ?? new DelegateCommand<object>(Forward);
  156. private DelegateCommand<object> _motorStopCommand;
  157. public DelegateCommand<object> MotorStopCommand => _motorStopCommand ?? new DelegateCommand<object>(MotorStopAsync);
  158. private DelegateCommand<object> _inversionCommand;
  159. public DelegateCommand<object> InversionCommand => _inversionCommand ?? new DelegateCommand<object>(Inversion);
  160. private DelegateCommand<object> _singleMoveCommand;
  161. public DelegateCommand<object> SingleMoveCommand => _singleMoveCommand ?? new DelegateCommand<object>(SingleMove);
  162. private DelegateCommand<object> _updateAreaCommand;
  163. public DelegateCommand<object> UpdateAreaCommand => _updateAreaCommand ?? new DelegateCommand<object>(UpdateArea);
  164. private DelegateCommand<object> _maniOperateCommand;
  165. public DelegateCommand<object> ManiOperateCommand => _maniOperateCommand ?? new DelegateCommand<object>(ManiOperateAsync);
  166. private DelegateCommand<object> _motorGoBackCommand;
  167. public DelegateCommand<object> MotorGoBackCommand => _motorGoBackCommand ?? new DelegateCommand<object>(MotorGoBackAsync);
  168. private DelegateCommand<object> _pumpInLiquidCommand;
  169. public DelegateCommand<object> PumpInLiquidCommand => _pumpInLiquidCommand ?? new DelegateCommand<object>(InPumpLiquid);
  170. private DelegateCommand<object> _pumpOutLiquidCommand;
  171. public DelegateCommand<object> PumpOutLiquidCommand => _pumpOutLiquidCommand ?? new DelegateCommand<object>(OutPumpLiquid);
  172. private DelegateCommand<object> _manualStopHeatCommand;
  173. public DelegateCommand<object> ManualStopHeatCommand => _manualStopHeatCommand ?? new DelegateCommand<object>(ManualStopHeat);
  174. private DelegateCommand<object> _coolingPipeMoveCommand;
  175. public DelegateCommand<object> CoolingPipeMoveCommand => _coolingPipeMoveCommand ?? new DelegateCommand<object>(CoolingPipeMoveAsync);
  176. private DelegateCommand<object> _manualStartHeatCommand;
  177. public DelegateCommand<object> ManualStartHeatCommand => _manualStartHeatCommand ?? new DelegateCommand<object>(ManualStartHeat);
  178. private DelegateCommand<object> _areaSelectionChangedCommand;
  179. public DelegateCommand<object> AreaSelectionChangedCommand => _areaSelectionChangedCommand ?? new DelegateCommand<object>(AreaSelectionChanged);
  180. private DelegateCommand<object> _dripNozzleOperateCommand;
  181. public DelegateCommand<object> DripNozzleOperateCommand => _dripNozzleOperateCommand ?? new DelegateCommand<object>(DripNozzleOperate);
  182. private DelegateCommand<object> _manualStirStartCommand;
  183. public DelegateCommand<object> ManualStirStartCommand => _manualStirStartCommand ?? new DelegateCommand<object>(ManualStirStart);
  184. private DelegateCommand<object> _manualStirStopCommand;
  185. public DelegateCommand<object> ManualStirStopCommand => _manualStirStopCommand ?? new DelegateCommand<object>(ManualStirStop);
  186. private DelegateCommand<object> _manualFanStartCommand;
  187. public DelegateCommand<object> ManualFanStartCommand => _manualFanStartCommand ?? new DelegateCommand<object>(ManualFanStart);
  188. private DelegateCommand<object> _manualFanStopCommand;
  189. public DelegateCommand<object> ManualFanStopCommand => _manualFanStopCommand ?? new DelegateCommand<object>(ManualFanStop);
  190. #region method
  191. private void ManualFanStop(object obj)
  192. {
  193. try
  194. {
  195. if (obj is not SegmentItem element) return;
  196. var res = _controller.ManualFanStop(element.Content);
  197. UMessageBox.InfoTip($"手动关闭{element.Content}位风扇{(res ? "成功" : "失败")}");
  198. }
  199. catch (Exception ex)
  200. {
  201. logger.LogError(ex.Message);
  202. }
  203. }
  204. private void ManualFanStart(object obj)
  205. {
  206. try
  207. {
  208. if (obj is not SegmentItem element) return;
  209. var res = _controller.ManualFanStrat(element.Content);
  210. UMessageBox.InfoTip($"手动打开{element.Content}位风扇{(res ? "成功" : "失败")}");
  211. }
  212. catch (Exception ex)
  213. {
  214. logger.LogError(ex.Message);
  215. }
  216. }
  217. private void ManualStirStop(object obj)
  218. {
  219. try
  220. {
  221. if (obj is not SegmentItem element) return;
  222. var res = _controller.ManualStirStop(element.Content);
  223. UMessageBox.InfoTip($"{element.Content}位搅拌结束{(res ? "成功" : "失败")}");
  224. }
  225. catch (Exception ex)
  226. {
  227. logger.LogError(ex.Message);
  228. }
  229. }
  230. private void ManualStirStart(object obj)
  231. {
  232. try
  233. {
  234. if (obj is not SegmentItem element) return;
  235. var res = _controller.ManualStirStrat(element.Content);
  236. UMessageBox.InfoTip($"{element.Content}位搅拌开始{(res ? "成功" : "失败")}");
  237. }
  238. catch (Exception ex)
  239. {
  240. logger.LogError(ex.Message);
  241. }
  242. }
  243. private void DripNozzleOperate(object obj)
  244. {
  245. try
  246. {
  247. var way = obj.ToString() switch
  248. {
  249. "滴正" => "Arrive",
  250. "滴返" => "GoBack",
  251. "滴2正" => "Arrive2",
  252. "滴2返" => "GoBack2",
  253. _ => throw new ArgumentNullException(obj.ToString())
  254. };
  255. var res = _controller.DripNozzleManual(way);
  256. }
  257. catch (Exception ex)
  258. {
  259. logger.LogError(ex.ToString());
  260. }
  261. }
  262. /// <summary>
  263. /// 设置温度
  264. /// </summary>
  265. /// <param name="obj"></param>
  266. private void SetTemperature(object obj)
  267. {
  268. try
  269. {
  270. if (obj is null) return;
  271. Application.Current.Dispatcher.BeginInvoke(new Action(() =>
  272. {
  273. var temp = obj as Dictionary<string, double>;
  274. if (temp is null or { Count: 0 }) return;
  275. if (temp.TryGetValue("sv", out var svValue))
  276. {
  277. SettingTemperature = svValue.ToString(CultureInfo.InvariantCulture);
  278. }
  279. if (temp.TryGetValue("pv", out var pvValue))
  280. {
  281. CurrentTemperature = pvValue.ToString(CultureInfo.InvariantCulture);
  282. }
  283. }));
  284. }
  285. catch (Exception ex)
  286. {
  287. logger.LogError(ex.ToString());
  288. }
  289. }
  290. /// <summary>
  291. /// 吸液
  292. /// </summary>
  293. /// <param name="obj"></param>
  294. private async void InPumpLiquid(object obj)
  295. {
  296. if (obj is not object[] objs) return;
  297. var name = (objs[0].ToString()) switch
  298. {
  299. "重铬酸钾(低)" => "PotassiumDichromate_Low",
  300. "重铬酸钾(高)" => "PotassiumDichromate_High",
  301. "硫酸银(1)" or "硫酸银(13)" => "SilverSulfate",
  302. _ => throw new ArgumentNullException(objs[0].ToString()),
  303. };
  304. if (name.Equals("PotassiumDichromate_Low"))
  305. PotassiumDichromateLowInValue = true;
  306. else if (name.Equals("PotassiumDichromate_High"))
  307. PotassiumDichromateHighInValue = true;
  308. _ = await _controller.ManualPumpInLiquidAsync(name, Convert.ToInt32(string.IsNullOrWhiteSpace(objs[1].ToString()) ? 0 : objs[1]));
  309. if (name.Equals("PotassiumDichromate_Low"))
  310. PotassiumDichromateLowInValue = false;
  311. else if (name.Equals("PotassiumDichromate_High"))
  312. PotassiumDichromateHighInValue = false;
  313. }
  314. /// <summary>
  315. /// 出液
  316. /// </summary>
  317. /// <param name="obj"></param>
  318. private void OutPumpLiquid(object obj)
  319. {
  320. if (obj is not object[] objs) return;
  321. var name = (objs[0].ToString()) switch
  322. {
  323. "水(1)" => "Water_1",
  324. "水(13)" => "Water_13",
  325. "试亚铁灵" => "Indicator",
  326. "试亚铁灵(高)" => "Indicator2",
  327. "硫酸汞" => "Mercury",
  328. "重铬酸钾(低)" => "PotassiumDichromate_Low",
  329. "重铬酸钾(高)" => "PotassiumDichromate_High",
  330. "硫酸亚铁铵(低)" => "FAS_Low",
  331. "硫酸亚铁铵(高)" => "FAS_High",
  332. "硫酸银(1)" => "SilverSulfate_1",
  333. "硫酸银(13)" => "SilverSulfate_13",
  334. _ => throw new ArgumentNullException(objs[0].ToString()),
  335. };
  336. switch (name)
  337. {
  338. case "Water_1" or "Water_13":
  339. WaterLiquid(name, Convert.ToInt32(objs[1]));
  340. break;
  341. case "Indicator" or "Mercury" or "Indicator2":
  342. SecondLiquid(name, Convert.ToInt32(objs[1]));
  343. break;
  344. case "PotassiumDichromate_Low" or "PotassiumDichromate_High" or "SilverSulfate_1" or "SilverSulfate_13" or "FAS_Low" or "FAS_High":
  345. OutLiquid(name, Convert.ToInt32(objs[1]));
  346. break;
  347. }
  348. }
  349. public async void WaterLiquid(string name, int second)
  350. {
  351. string nameStr = name switch
  352. {
  353. "Water_1" => "R1",
  354. "Water_13" => "R13",
  355. _ => throw new ArgumentNullException("NULL"),
  356. };
  357. _ = await _controller.ManualStorageOutLiquidAsync("Water", second, nameStr);
  358. }
  359. public async void SecondLiquid(string name, int second)
  360. {
  361. _ = await _controller.ManualStorageOutLiquidAsync(name, second);
  362. }
  363. public async void OutLiquid(string name, int amount)
  364. {
  365. if (name.Equals("PotassiumDichromate_Low"))
  366. PotassiumDichromateLowOutValue = true;
  367. else if (name.Equals("PotassiumDichromate_High"))
  368. PotassiumDichromateHighOutValue = true;
  369. _ = await _controller.ManualPumpOutLiquidAsync(name, amount);
  370. if (name.Equals("PotassiumDichromate_Low"))
  371. PotassiumDichromateLowOutValue = false;
  372. else if (name.Equals("PotassiumDichromate_High"))
  373. PotassiumDichromateHighOutValue = false;
  374. }
  375. /// <summary>
  376. /// 停止加热
  377. /// </summary>
  378. /// <param name="obj"></param>
  379. private void ManualStopHeat(object obj)
  380. {
  381. var res = _controller.SetHeating(-100);
  382. UMessageBox.InfoTip(res ? "停止加热设置成功!" : "停止加热设置失败!");
  383. }
  384. /// <summary>
  385. /// 开始加热
  386. /// </summary>
  387. /// <param name="obj"></param>
  388. private void ManualStartHeat(object obj)
  389. {
  390. var value = Convert.ToInt32(obj);
  391. var res = _controller.SetHeating(value);
  392. UMessageBox.InfoTip(res ? "加热设置成功!" : "加热设置失败!");
  393. }
  394. /// <summary>
  395. /// 电机停止
  396. /// </summary>
  397. /// <param name="obj"></param>
  398. private async void MotorStopAsync(object obj)
  399. {
  400. try
  401. {
  402. var motorName = obj.ToString() switch
  403. {
  404. "X轴" => "MotorX",
  405. "Y轴" => "MotorY",
  406. "Z轴" => "MotorZ",
  407. "H轴" => "MotorT",
  408. "消解" => "Dissolve",
  409. _ => throw new ArgumentNullException(obj.ToString())
  410. };
  411. var res = await _controller.MotorStop(motorName);
  412. }
  413. catch (Exception ex)
  414. {
  415. logger.LogError(ex.ToString());
  416. }
  417. }
  418. /// <summary>
  419. /// 机械手操作
  420. /// </summary>
  421. /// <param name="obj"></param>
  422. private async void ManiOperateAsync(object obj)
  423. {
  424. try
  425. {
  426. var way = obj.ToString() switch
  427. {
  428. "杯松" => WriteWay.Normotopia,
  429. "杯抓" => WriteWay.Antiposition,
  430. _ => throw new ArgumentNullException(obj.ToString())
  431. };
  432. var res = await _controller.ManiManual(way);
  433. }
  434. catch (Exception ex)
  435. {
  436. logger.LogError(ex.ToString());
  437. }
  438. }
  439. /// <summary>
  440. /// 冷凝管单独操作
  441. /// </summary>
  442. /// <param name="obj"></param>
  443. public async void CoolingPipeMoveAsync(object obj)
  444. {
  445. try
  446. {
  447. var way = obj.ToString() switch
  448. {
  449. "上升" => WriteWay.Normotopia,
  450. "下降" => WriteWay.Antiposition,
  451. _ => throw new ArgumentNullException(obj.ToString())
  452. };
  453. var res = await _controller.CageManualOperate(way);
  454. if (res)
  455. {
  456. UMessageBox.SuccessTip("冷凝管" + obj.ToString() + "成功!");
  457. }
  458. }
  459. catch (Exception ex)
  460. {
  461. logger.LogError(ex.ToString());
  462. }
  463. }
  464. /// <summary>
  465. /// 电机返回原点
  466. /// </summary>
  467. /// <param name="obj"></param>
  468. public async void MotorGoBackAsync(object obj)
  469. {
  470. try
  471. {
  472. var checkName = obj.ToString();
  473. var name = checkName switch
  474. {
  475. "X轴" => "MotorX",
  476. "Y轴" => "MotorY",
  477. "Z轴" => "MotorZ",
  478. "H轴" => "MotorT",
  479. "消解" => "Dissolve",
  480. "全部" => "AllGoBack",
  481. _ => throw new ArgumentNullException(checkName)
  482. };
  483. bool res = false;
  484. if (name == "AllGoBack")
  485. {
  486. res = await _controller.MotorGoBackAsync("MotorZ");
  487. res &= await _controller.MotorGoBackAsync("MotorX");
  488. res &= await _controller.MotorGoBackAsync("MotorY");
  489. res &= await _controller.MotorGoBackAsync("MotorT");
  490. res &= await _controller.CageManualOperate(WriteWay.Normotopia);
  491. res &= await _controller.MotorGoBackAsync("Dissolve");
  492. }
  493. else
  494. res = await _controller.MotorGoBackAsync(name);
  495. UMessageBox.InfoTip($"{checkName}返回原点{(res ? "成功" : "失败")}");
  496. }
  497. catch (Exception ex)
  498. {
  499. logger.LogError(ex.ToString());
  500. }
  501. }
  502. /// <summary>
  503. /// 正转
  504. /// </summary>
  505. /// <param name="obj"></param>
  506. private void Forward(object obj)
  507. {
  508. try
  509. {
  510. if (obj is not object[] objs) return;
  511. var name = objs[0].ToString();
  512. var value = Math.Abs(Convert.ToDouble(objs[1]));
  513. ManualMoveAsync(name, -value);
  514. }
  515. catch (Exception ex)
  516. {
  517. logger.LogError(ex.ToString());
  518. }
  519. }
  520. /// <summary>
  521. /// 反转
  522. /// </summary>
  523. /// <param name="obj"></param>
  524. public void Inversion(object obj)
  525. {
  526. try
  527. {
  528. if (obj is not object[] objs) return;
  529. var name = objs[0].ToString();
  530. var value = Math.Abs(Convert.ToDouble(objs[1]));
  531. ManualMoveAsync(name, value);
  532. }
  533. catch (Exception ex)
  534. {
  535. logger.LogError(ex.ToString());
  536. }
  537. }
  538. /// <summary>
  539. /// 手动移动
  540. /// </summary>
  541. /// <param name="name"></param>
  542. /// <param name="value"></param>
  543. public async void ManualMoveAsync(string name, double value)
  544. {
  545. try
  546. {
  547. var sendName = name switch
  548. {
  549. "X轴" => "MotorX",
  550. "Y轴" => "MotorY",
  551. "Z轴" => "MotorZ",
  552. "H轴" => "MotorT",
  553. "消解" => "Dissolve",
  554. _ => throw new ArgumentNullException(name)
  555. };
  556. await _controller.ManualMove(sendName, value);
  557. }
  558. catch (Exception ex)
  559. {
  560. logger.LogError(ex.Message);
  561. UMessageBox.Error(ex.Message);
  562. }
  563. }
  564. /// <summary>
  565. /// 下拉框改变事件
  566. /// </summary>
  567. /// <param name="obj"></param>
  568. public void AreaSelectionChanged(object obj)
  569. {
  570. Area = Areas.FirstOrDefault(item => item.PointName.Equals(AreaCurrentPoint.Content));
  571. }
  572. /// <summary>
  573. /// 单点移动
  574. /// </summary>
  575. /// <param name="obj"></param>
  576. public void SingleMove(object obj)
  577. {
  578. try
  579. {
  580. var point = Areas.FirstOrDefault(item => item.PointName.Equals(AreaCurrentPoint.Content));
  581. _controller.SinglePointMove(point);
  582. }
  583. catch (Exception ex)
  584. {
  585. logger.LogError(ex.ToString());
  586. }
  587. }
  588. /// <summary>
  589. /// 更新区域
  590. /// </summary>
  591. /// <param name="obj"></param>
  592. public void UpdateArea(object obj)
  593. {
  594. try
  595. {
  596. var area = Areas.FirstOrDefault(item => item.PointName.Equals(AreaCurrentPoint.Content));
  597. _controller.UpdateAreaInfo(area);
  598. Messager.Send("UpdateElementStatus", area);
  599. }
  600. catch (Exception ex)
  601. {
  602. logger.LogError(ex.ToString());
  603. }
  604. }
  605. #endregion
  606. #endregion
  607. }
  608. }