TopViewModel.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342
  1. using Aitex.Core.Common.DeviceData;
  2. using Aitex.Core.RT.Event;
  3. using Aitex.Core.WCF;
  4. using MECF.Framework.Common.DataCenter;
  5. using MECF.Framework.Common.OperationCenter;
  6. using Prism.Commands;
  7. using Prism.Mvvm;
  8. using System;
  9. using System.Collections.Generic;
  10. using System.Collections.ObjectModel;
  11. using System.Linq;
  12. using System.Text;
  13. using System.Threading;
  14. using System.Threading.Tasks;
  15. using System.Windows;
  16. using System.Windows.Threading;
  17. using Venus_Core;
  18. using Venus_MainPages.Unity;
  19. using Venus_Themes.UserControls;
  20. namespace Venus_MainPages.ViewModels
  21. {
  22. internal class TopViewModel : BindableBase
  23. {
  24. #region 私有字段
  25. private string m_Title;
  26. private string m_SoftwareVersion;
  27. private List<string> m_RtDataKeys=new List<string>();
  28. private Dictionary<string, object> m_RtDataValues;
  29. private string ModuleName;
  30. private ObservableCollection<EventItem> m_EventLogList = new ObservableCollection<EventItem>();
  31. private EventItem m_CurrentEventItem=new EventItem ();
  32. private string m_CurrentEventItemValue;
  33. private object _lockObj = new object();
  34. private int m_EventLogListSelectedIndex;
  35. private Queue<EventItem> alarmQuery = new Queue<EventItem>();//控制alarm log 在 top UI显示
  36. private int logMaxCount = 50;//log在ui最多显示数量
  37. private AITSignalTowerData m_SignalTowerData;
  38. private string m_HostCommunicationStatus;
  39. private JetChamber m_SelectedJetChamber = JetChamber.None;
  40. #endregion
  41. #region 属性
  42. public string Title
  43. {
  44. get { return m_Title; }
  45. set { SetProperty(ref m_Title, value); }
  46. }
  47. public string SoftwareVersion
  48. {
  49. get { return m_SoftwareVersion; }
  50. set { SetProperty(ref m_SoftwareVersion, value); }
  51. }
  52. public Dictionary<string, object> RtDataValues
  53. {
  54. get { return m_RtDataValues; }
  55. set { SetProperty(ref m_RtDataValues, value); }
  56. }
  57. public ObservableCollection<EventItem> EventLogList
  58. {
  59. get { return m_EventLogList; }
  60. set { SetProperty(ref m_EventLogList, value); }
  61. }
  62. public EventItem CurrentEventItem
  63. {
  64. get { return m_CurrentEventItem; }
  65. set { SetProperty(ref m_CurrentEventItem, value); }
  66. }
  67. public int EventLogListSelectedIndex
  68. {
  69. get { return m_EventLogListSelectedIndex; }
  70. set { SetProperty(ref m_EventLogListSelectedIndex, value); }
  71. }
  72. public string CurrentEventItemValue
  73. {
  74. get { return m_CurrentEventItemValue; }
  75. set { SetProperty(ref m_CurrentEventItemValue, value); }
  76. }
  77. public AITSignalTowerData SignalTowerData
  78. {
  79. get { return m_SignalTowerData; }
  80. set { SetProperty(ref m_SignalTowerData, value); }
  81. }
  82. public string HostCommunicationStatusBackground
  83. {
  84. get
  85. {
  86. switch (HostCommunicationStatus)
  87. {
  88. case "Disabled":
  89. return "Yellow";
  90. case "Enabled":
  91. case "EnabledNotCommunicating":
  92. case "WaitCRA":
  93. case "WaitDelay":
  94. case "WaitCRFromHost":
  95. return "Transparent";
  96. case "EnabledCommunicating":
  97. return "LawnGreen";
  98. default:
  99. return "Yellow";
  100. }
  101. }
  102. }
  103. public string m_HostBack;
  104. public string HostBack
  105. {
  106. get { return m_HostBack; }
  107. set { SetProperty(ref m_HostBack, value); }
  108. }
  109. public string HostCommunicationStatus
  110. {
  111. get { return m_HostCommunicationStatus; }
  112. set { SetProperty(ref m_HostCommunicationStatus, value); }
  113. }
  114. public bool IsEnableFAEnable
  115. {
  116. get
  117. {
  118. return HostCommunicationStatus == "Disabled";
  119. }
  120. }
  121. public bool IsDisableFAEnable
  122. {
  123. get
  124. {
  125. return HostCommunicationStatus != "Disabled";
  126. }
  127. }
  128. #endregion
  129. #region 命令
  130. private DelegateCommand _SwichLanguageCommand;
  131. public DelegateCommand SwichLanguageCommand =>
  132. _SwichLanguageCommand ?? (_SwichLanguageCommand = new DelegateCommand(OnSwitchLanguage));
  133. private DelegateCommand _ResetCommand;
  134. public DelegateCommand ResetCommand =>
  135. _ResetCommand ?? (_ResetCommand = new DelegateCommand(OnReset));
  136. private DelegateCommand _ClearCommand;
  137. public DelegateCommand ClearCommand =>
  138. _ClearCommand ?? (_ClearCommand = new DelegateCommand(OnClear));
  139. private DelegateCommand _SkipCommand;
  140. public DelegateCommand SkipCommand =>
  141. _SkipCommand ?? (_SkipCommand = new DelegateCommand(OnSkip));
  142. private DelegateCommand _BuzzerOffCommand;
  143. public DelegateCommand BuzzerOffCommand =>
  144. _BuzzerOffCommand ?? (_BuzzerOffCommand = new DelegateCommand(OnBuzzerOff));
  145. private DelegateCommand _FADisableCommand;
  146. public DelegateCommand FADisableCommand =>
  147. _FADisableCommand ?? (_FADisableCommand = new DelegateCommand(FaDisable));
  148. private DelegateCommand _FAEnableCommand;
  149. public DelegateCommand FAEnableCommand =>
  150. _FAEnableCommand ?? (_FAEnableCommand = new DelegateCommand(FaEnable));
  151. #endregion
  152. #region 构造函数
  153. public TopViewModel()
  154. {
  155. JetChamber selectedChamber = (JetChamber)(Convert.ToInt32(QueryDataClient.Instance.Service.GetConfig("System.ChamberSelect")));
  156. Title = selectedChamber.ToString();
  157. m_SoftwareVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
  158. ModuleName = "PMA";
  159. addDataKeys();
  160. DispatcherTimer timer = new DispatcherTimer();
  161. timer.Interval = TimeSpan.FromSeconds(1);
  162. timer.Tick += timer_Tick;
  163. timer.Start();
  164. EventClient.Instance.OnEvent += Instance_OnEvent;
  165. EventClient.Instance.Start();
  166. }
  167. #endregion
  168. #region 方法
  169. void timer_Tick(object sender, EventArgs e)
  170. {
  171. RtDataValues = QueryDataClient.Instance.Service.PollData(m_RtDataKeys);
  172. SignalTowerData = CommonFunction.GetValue<AITSignalTowerData>(RtDataValues, $"{ModuleName}.SignalTower.DeviceData");
  173. HostCommunicationStatus= CommonFunction.GetValue<String>(RtDataValues,"System.CommunicationStatus");
  174. HostBack = HostCommunicationStatusBackground;
  175. }
  176. private void OnSwitchLanguage()
  177. {
  178. List<ResourceDictionary> dictionaryList = new List<ResourceDictionary>();
  179. foreach (ResourceDictionary dictionary in Application.Current.Resources.MergedDictionaries)
  180. {
  181. if (dictionary.Source != null)
  182. {
  183. dictionaryList.Add(dictionary);
  184. }
  185. }
  186. string requestedCulture1 = @"/Venus_Themes;component/Languages/StringResources.en-US.xaml";
  187. string requestedCulture2 = @"/Venus_Themes;component/Languages/StringResources.zh-CN.xaml";
  188. ResourceDictionary resourceDictionary1 = dictionaryList.FirstOrDefault(d => d.Source.OriginalString.Equals(requestedCulture1));
  189. ResourceDictionary resourceDictionary2 = dictionaryList.FirstOrDefault(d => d.Source.OriginalString.Equals(requestedCulture2));
  190. if (dictionaryList.IndexOf(resourceDictionary1) < dictionaryList.IndexOf(resourceDictionary2))
  191. {
  192. Application.Current.Resources.MergedDictionaries.Remove(resourceDictionary1);
  193. Application.Current.Resources.MergedDictionaries.Add(resourceDictionary1);
  194. }
  195. else
  196. {
  197. Application.Current.Resources.MergedDictionaries.Remove(resourceDictionary2);
  198. Application.Current.Resources.MergedDictionaries.Add(resourceDictionary2);
  199. }
  200. }
  201. private void OnReset()
  202. {
  203. InvokeClient.Instance.Service.DoOperation("System.Reset");
  204. }
  205. private void addDataKeys()
  206. {
  207. m_RtDataKeys.Add("PMA.FsmState");
  208. m_RtDataKeys.Add("PMB.FsmState");
  209. m_RtDataKeys.Add("PMC.FsmState");
  210. m_RtDataKeys.Add("PMD.FsmState");
  211. m_RtDataKeys.Add("TM.FsmState");
  212. m_RtDataKeys.Add("LLA.FsmState");
  213. m_RtDataKeys.Add("LLB.FsmState");
  214. m_RtDataKeys.Add("EFEM.FsmState");
  215. m_RtDataKeys.Add("SYSTEM.FsmState");
  216. m_RtDataKeys.Add("PMA.IsSlitDoorClosed");
  217. m_RtDataKeys.Add($"{ModuleName}.SignalTower.DeviceData");
  218. m_RtDataKeys.Add("System.CommunicationStatus");
  219. }
  220. private void Instance_OnEvent(EventItem eventItem)
  221. {
  222. GlobalEvents.Instance.OnEventItemRaiseChanged(eventItem);
  223. switch (eventItem.Type)
  224. {
  225. case EventType.EventUI_Notify:
  226. Application.Current.Dispatcher.Invoke(delegate
  227. {
  228. EventLogList.Insert(0,eventItem);
  229. if (EventLogList.Count > logMaxCount)
  230. {
  231. EventLogList.RemoveAt(EventLogList.Count-1);
  232. }
  233. if (eventItem.Level == EventLevel.Alarm)
  234. {
  235. alarmQuery.Enqueue(eventItem);
  236. }
  237. if (alarmQuery.Count > 0)
  238. {
  239. CurrentEventItem = alarmQuery.First();
  240. }
  241. else
  242. {
  243. CurrentEventItem = eventItem;
  244. }
  245. EventLogListSelectedIndex = 0;
  246. });
  247. break;
  248. case EventType.Dialog_Nofity:
  249. //PopDialog(obj);
  250. break;
  251. case EventType.KickOut_Notify:
  252. break;
  253. case EventType.Sound_Notify:
  254. break;
  255. case EventType.UIMessage_Notify:
  256. //PopUIMessage(obj);
  257. break;
  258. }
  259. }
  260. private void OnClear()
  261. {
  262. CurrentEventItem = null;
  263. alarmQuery.Clear();
  264. EventLogList.Clear();
  265. }
  266. private void OnSkip()
  267. {
  268. if (alarmQuery.Count > 0)
  269. {
  270. alarmQuery.Dequeue();
  271. if (alarmQuery.Count > 0)
  272. {
  273. CurrentEventItem = alarmQuery.First();
  274. }
  275. else
  276. {
  277. CurrentEventItem = null;
  278. }
  279. }
  280. }
  281. private void OnBuzzerOff()
  282. {
  283. InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SignalTower.SwitchOffBuzzer");
  284. }
  285. public void FaDisable()
  286. {
  287. InvokeClient.Instance.Service.DoOperation($"System.FACommand", "FADisable");
  288. }
  289. public void FaEnable()
  290. {
  291. InvokeClient.Instance.Service.DoOperation($"System.FACommand", "FAEnable");
  292. }
  293. #endregion
  294. }
  295. }