KeplerStatisticsViewModel.cs 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Collections.ObjectModel;
  4. using System.Data;
  5. using System.Linq;
  6. using Aitex.Core.RT.Log;
  7. using Prism.Commands;
  8. using Prism.Mvvm;
  9. using MECF.Framework.Common.DataCenter;
  10. using MECF.Framework.Common.OperationCenter;
  11. using OpenSEMI.ClientBase;
  12. using System.Windows.Threading;
  13. using WPF.Themes.UserControls;
  14. using System.Windows;
  15. namespace Venus_MainPages.ViewModels
  16. {
  17. public class KeplerStatisticsViewModel : BindableBase
  18. {
  19. private string _AddItemName;
  20. private string _AddItemModule;
  21. private string _AddItemFollowRF;
  22. public ObservableCollection<StatsDataListItem> _StatData;
  23. public ObservableCollection<StatsDataListItemRFAndPump> _StatDataRFAndPump;
  24. public ObservableCollection<string> _ModuleList = new ObservableCollection<string>();
  25. public ObservableCollection<string> _FollowRFList = new ObservableCollection<string>();
  26. DispatcherTimer timer;
  27. private string m_ModuleName;
  28. private StatsDataListItemRFAndPump m_StatDataRFAndPumpSelectedValue;
  29. public ObservableCollection<string> ModuleList
  30. {
  31. get { return _ModuleList; }
  32. set { SetProperty(ref _ModuleList, value); }
  33. }
  34. public ObservableCollection<string> FollowRFList
  35. {
  36. get { return _FollowRFList; }
  37. set { SetProperty(ref _FollowRFList, value); }
  38. }
  39. public string AddItemName
  40. {
  41. get { return _AddItemName; }
  42. set { SetProperty(ref _AddItemName, value); }
  43. }
  44. public string AddItemModule
  45. {
  46. get { return _AddItemModule; }
  47. set { SetProperty(ref _AddItemModule, value); }
  48. }
  49. public string AddItemFollowRF
  50. {
  51. get { return _AddItemFollowRF; }
  52. set { SetProperty(ref _AddItemFollowRF, value); }
  53. }
  54. public string ModuleName
  55. {
  56. get { return m_ModuleName; }
  57. set
  58. {
  59. SetProperty(ref m_ModuleName, value);
  60. }
  61. }
  62. public StatsDataListItemRFAndPump StatDataRFAndPumpSelectedValue
  63. {
  64. get { return m_StatDataRFAndPumpSelectedValue; }
  65. set
  66. {
  67. SetProperty(ref m_StatDataRFAndPumpSelectedValue, value);
  68. }
  69. }
  70. public KeplerStatisticsViewModel()
  71. {
  72. StatData = new ObservableCollection<StatsDataListItem>();
  73. StatDataRFAndPump = new ObservableCollection<StatsDataListItemRFAndPump>();
  74. timer = new DispatcherTimer();
  75. timer.Interval = TimeSpan.FromSeconds(1);
  76. timer.Tick += timer_Tick;
  77. //timer.Start();
  78. //_timer = new PeriodicJob(200, this.OnTimer, "Database cleaner", true);
  79. //_timer.Start();
  80. }
  81. void timer_Tick(object sender, EventArgs e)
  82. {
  83. //return;
  84. try
  85. {
  86. PollData();
  87. }
  88. catch
  89. {
  90. }
  91. }
  92. private DelegateCommand _ResetCommnad;
  93. public DelegateCommand ResetCommnad =>
  94. _ResetCommnad ?? (_ResetCommnad = new DelegateCommand(Resets));
  95. private DelegateCommand<StatsDataListItem> _ResetTotalCommnad;
  96. public DelegateCommand<StatsDataListItem> ResetTotalCommnad =>
  97. _ResetTotalCommnad ?? (_ResetTotalCommnad = new DelegateCommand<StatsDataListItem>(ResetTotalValue));
  98. private DelegateCommand<StatsDataListItemRFAndPump> _ResetRFTotalCommnad;
  99. public DelegateCommand<StatsDataListItemRFAndPump> ResetRFTotalCommnad =>
  100. _ResetRFTotalCommnad ?? (_ResetRFTotalCommnad = new DelegateCommand<StatsDataListItemRFAndPump>(ResetRFTotal));
  101. private DelegateCommand<StatsDataListItem> _ResetValueCommnad;
  102. public DelegateCommand<StatsDataListItem> ResetValueCommnad =>
  103. _ResetValueCommnad ?? (_ResetValueCommnad = new DelegateCommand<StatsDataListItem>(ResetValue));
  104. private DelegateCommand<StatsDataListItem> _ResetEnableValueCommnad;
  105. public DelegateCommand<StatsDataListItem> ResetEnableValueCommnad =>
  106. _ResetEnableValueCommnad ?? (_ResetEnableValueCommnad = new DelegateCommand<StatsDataListItem>(ResetEnableWarning));
  107. private DelegateCommand<StatsDataListItem> _SetWarningValueCommnad;
  108. public DelegateCommand<StatsDataListItem> SetWarningValueCommnad =>
  109. _SetWarningValueCommnad ?? (_SetWarningValueCommnad = new DelegateCommand<StatsDataListItem>(SetWarningValue));
  110. private DelegateCommand<StatsDataListItem> _ResetEnableAlarmCommnad;
  111. public DelegateCommand<StatsDataListItem> ResetEnableAlarmCommnad =>
  112. _ResetEnableAlarmCommnad ?? (_ResetEnableAlarmCommnad = new DelegateCommand<StatsDataListItem>(ResetEnableAlarm));
  113. private DelegateCommand<StatsDataListItem> _SetAlarmValueCommnad;
  114. public DelegateCommand<StatsDataListItem> SetAlarmValueCommnad =>
  115. _SetAlarmValueCommnad ?? (_SetAlarmValueCommnad = new DelegateCommand<StatsDataListItem>(SetAlarmValue));
  116. private DelegateCommand<StatsDataListItemRFAndPump> _ResetTimeValueCommnad;
  117. public DelegateCommand<StatsDataListItemRFAndPump> ResetTimeValueCommnad =>
  118. _ResetTimeValueCommnad ?? (_ResetTimeValueCommnad = new DelegateCommand<StatsDataListItemRFAndPump>(ResetTimeValue));
  119. private DelegateCommand<StatsDataListItemRFAndPump> _SetPMIntervalValueCommnad;
  120. public DelegateCommand<StatsDataListItemRFAndPump> SetPMIntervalValueCommnad =>
  121. _SetPMIntervalValueCommnad ?? (_SetPMIntervalValueCommnad = new DelegateCommand<StatsDataListItemRFAndPump>(SetPMIntervalValue));
  122. private DelegateCommand<StatsDataListItemRFAndPump> _ResetRFEnableAlarmCommnad;
  123. public DelegateCommand<StatsDataListItemRFAndPump> ResetRFEnableAlarmCommnad =>
  124. _ResetRFEnableAlarmCommnad ?? (_ResetRFEnableAlarmCommnad = new DelegateCommand<StatsDataListItemRFAndPump>(ResetRFEnableAlarm));
  125. private DelegateCommand _SubscribeItem;
  126. public DelegateCommand SubscribeItem => _SubscribeItem ?? (_SubscribeItem = new DelegateCommand(OnSubscribeItem));
  127. private DelegateCommand _DeleteItemCommand;
  128. public DelegateCommand DeleteItemCommand => _DeleteItemCommand ?? (_DeleteItemCommand = new DelegateCommand(OnDeleteItem));
  129. private int MenuPermission
  130. {
  131. //get
  132. //{
  133. // return ClientApp.Instance.GetPermission("Statistics");
  134. //}
  135. get; set;
  136. }
  137. //protected bool OnTimer()
  138. //{
  139. // try
  140. // {
  141. // PollData();
  142. // }
  143. // catch (Exception ex)
  144. // {
  145. // LOG.Error(ex.Message);
  146. // }
  147. // return true;
  148. //}
  149. public ObservableCollection<StatsDataListItem> StatData
  150. {
  151. get { return _StatData; }
  152. set { SetProperty(ref _StatData, value); }
  153. }
  154. public ObservableCollection<StatsDataListItemRFAndPump> StatDataRFAndPump
  155. {
  156. get { return _StatDataRFAndPump; }
  157. set { SetProperty(ref _StatDataRFAndPump, value); }
  158. }
  159. public void PollData()
  160. {
  161. try
  162. {
  163. string sql = $"SELECT * FROM \"stats_data\" order by \"name\" ASC;";
  164. DataTable dbData = QueryDataClient.Instance.Service.QueryData(sql);
  165. if (dbData == null || dbData.Rows.Count == 0)
  166. return;
  167. // string[] clearedNameList = Array.ConvertAll<StatsDataListItem, string>(StatData.ToArray(), x => x.Name);
  168. List<string> removableList = new List<string>();
  169. //if (clearedNameList.Length > 0)
  170. // removableList = clearedNameList.ToList();
  171. for (int i = 0; i < dbData.Rows.Count; i++)
  172. {
  173. if (!dbData.Rows[i]["is_visible"].Equals(DBNull.Value) && !Convert.ToBoolean(dbData.Rows[i]["is_visible"].ToString()))
  174. continue;
  175. string name = dbData.Rows[i]["name"].ToString();
  176. //removableList.RemoveIfContains(name);
  177. StatsDataListItem item = StatData.FirstOrDefault(x => x.Name == name);
  178. if (item == null)
  179. {
  180. item = new StatsDataListItem();
  181. item.Name = dbData.Rows[i]["name"].ToString();
  182. item.AlarmEnable = false;
  183. item.WarningEnable = false;
  184. item.IsVisible = true;
  185. item.AlarmTextSaved = true;
  186. item.WarningTextSaved = true;
  187. item.AlarmValueSetPoint = dbData.Rows[i]["alarm_value"].ToString();
  188. item.WarningValueSetPoint = dbData.Rows[i]["warning_value"].ToString();
  189. if (item.Name.Contains(ModuleName))
  190. {
  191. StatData.Add(item);
  192. }
  193. }
  194. item.Description = dbData.Rows[i]["description"].ToString();
  195. item.Value = dbData.Rows[i]["value"].ToString();
  196. item.Total = dbData.Rows[i]["total"].ToString();
  197. if (!dbData.Rows[i]["enable_warning"].Equals(DBNull.Value))
  198. item.WarningEnable = Convert.ToBoolean(dbData.Rows[i]["enable_warning"].ToString());
  199. item.WarningValue = dbData.Rows[i]["warning_value"].ToString();
  200. if (!dbData.Rows[i]["enable_alarm"].Equals(DBNull.Value))
  201. item.AlarmEnable = Convert.ToBoolean(dbData.Rows[i]["enable_alarm"].ToString());
  202. item.AlarmValue = dbData.Rows[i]["alarm_value"].ToString();
  203. if (!dbData.Rows[i]["last_update_time"].Equals(DBNull.Value))
  204. item.LastUpdateTime = ((DateTime)dbData.Rows[i]["last_update_time"]).ToString("yyyy-MM-dd HH:mm:ss.fff");
  205. if (!dbData.Rows[i]["last_reset_time"].Equals(DBNull.Value))
  206. item.LastResetTime = ((DateTime)dbData.Rows[i]["last_reset_time"]).ToString("yyyy-MM-dd HH:mm:ss.fff");
  207. if (!dbData.Rows[i]["last_total_reset_time"].Equals(DBNull.Value))
  208. item.LastResetTotalTime = ((DateTime)dbData.Rows[i]["last_total_reset_time"]).ToString("yyyy-MM-dd HH:mm:ss.fff");
  209. }
  210. string sqlrfpump = $"SELECT * FROM \"stats_data_rf_pump\" order by \"name\" ASC;";
  211. DataTable dbDataRFPump = QueryDataClient.Instance.Service.QueryData(sqlrfpump);
  212. if (dbDataRFPump == null || dbDataRFPump.Rows.Count == 0)
  213. return;
  214. for (int i = 0; i < dbDataRFPump.Rows.Count; i++)
  215. {
  216. string name = dbDataRFPump.Rows[i]["name"].ToString();
  217. //removableList.RemoveIfContains(name);
  218. StatsDataListItemRFAndPump item = StatDataRFAndPump.FirstOrDefault(x => x.Name == name);
  219. if (item == null)
  220. {
  221. item = new StatsDataListItemRFAndPump();
  222. item.Name = dbDataRFPump.Rows[i]["name"].ToString();
  223. item.AlarmEnable = false;
  224. item.PMIntervalTextSaved = true;
  225. //item.PMIntervalSetPoint = dbDataRFPump.Rows[i]["pm_interval"].ToString();
  226. if (item.Name.Contains(ModuleName))
  227. {
  228. StatDataRFAndPump.Add(item);
  229. }
  230. }
  231. item.Description = dbDataRFPump.Rows[i]["description"].ToString();
  232. if (!dbDataRFPump.Rows[i]["enable_alarm"].Equals(DBNull.Value))
  233. item.AlarmEnable = Convert.ToBoolean(dbDataRFPump.Rows[i]["enable_alarm"].ToString());
  234. item.fromLastPM = dbDataRFPump.Rows[i]["from_last_pm"].ToString();
  235. item.PMInterval = dbDataRFPump.Rows[i]["pm_interval"].ToString();
  236. item.Total = dbDataRFPump.Rows[i]["total"].ToString();
  237. if (!dbDataRFPump.Rows[i]["last_pm_time"].Equals(DBNull.Value))
  238. item.LastPMTime = ((DateTime)dbDataRFPump.Rows[i]["last_pm_time"]).ToString("yyyy-MM-dd HH:mm:ss.fff");
  239. }
  240. }
  241. catch
  242. {
  243. }
  244. }
  245. public void OnSubscribeItem()
  246. {
  247. if (!string.IsNullOrWhiteSpace(AddItemName))
  248. InvokeClient.Instance.Service.DoOperation($"{AddItemModule}.SubscribeStatsData", $"{AddItemModule}.{AddItemName}", $"Follow => {AddItemFollowRF}");
  249. }
  250. public void OnDeleteItem()
  251. {
  252. if (StatDataRFAndPumpSelectedValue == null)
  253. {
  254. return;
  255. }
  256. if (FollowRFList.Contains(StatDataRFAndPumpSelectedValue.Name))
  257. {
  258. WPFMessageBox.ShowError($"默认{StatDataRFAndPumpSelectedValue.Name} 无法删除");
  259. return;
  260. }
  261. //string sqlrfpump = $"DELETE * FROM \"stats_data_rf_pump\" WHERE \"name\"={StatDataRFAndPumpSelectedValue.Name};";
  262. if (WPFMessageBox.ShowQuestion($"Do you want to delete {StatDataRFAndPumpSelectedValue.Name}?", "删除后无法恢复!!!") == MessageBoxResult.Yes)
  263. {
  264. QueryDataClient.Instance.Service.DeleteCounterItem(StatDataRFAndPumpSelectedValue.Name);
  265. _StatDataRFAndPump.Clear();
  266. }
  267. }
  268. public void ResetValue(StatsDataListItem item)
  269. {
  270. InvokeClient.Instance.Service.DoOperation("System.Stats.ResetValue", item.Name);
  271. }
  272. public void Resets()
  273. {
  274. //InvokeClient.Instance.Service.DoOperation("System.Stats.ResetValue", item.Name);
  275. }
  276. public void ResetEnableAlarm(StatsDataListItem item)
  277. {
  278. InvokeClient.Instance.Service.DoOperation("System.Stats.EnableAlarm", item.Name, item.AlarmEnable);
  279. }
  280. public void ResetEnableWarning(StatsDataListItem item)
  281. {
  282. InvokeClient.Instance.Service.DoOperation("System.Stats.EnableWarning", item.Name, item.WarningEnable);
  283. }
  284. public void SetAlarmValue(StatsDataListItem item)
  285. {
  286. if (string.IsNullOrEmpty(item.AlarmValueSetPoint) ||
  287. !int.TryParse(item.AlarmValueSetPoint, out int setValue))
  288. {
  289. DialogBox.ShowWarning("Alarm value not valid");
  290. return;
  291. }
  292. InvokeClient.Instance.Service.DoOperation("System.Stats.SetAlarmValue", item.Name, setValue);
  293. item.AlarmTextSaved = true;
  294. }
  295. public void SetWarningValue(StatsDataListItem item)
  296. {
  297. if (string.IsNullOrEmpty(item.WarningValueSetPoint) ||
  298. !int.TryParse(item.WarningValueSetPoint, out int setValue))
  299. {
  300. DialogBox.ShowWarning("Warning value not valid");
  301. return;
  302. }
  303. InvokeClient.Instance.Service.DoOperation("System.Stats.SetWarningValue", item.Name, setValue, item.WarningEnable);
  304. item.WarningTextSaved = true;
  305. }
  306. public void ResetTotalValue(StatsDataListItem item)
  307. {
  308. InvokeClient.Instance.Service.DoOperation($"System.Stats.ResetTotalValue", item.Name);
  309. }
  310. public void ResetRFTotal(StatsDataListItemRFAndPump item)
  311. {
  312. //foreach (var rfpumpitem in StatDataRFAndPump.ToList().FindAll(x => x.Description == "Follow => " + item.Name))
  313. //{
  314. // InvokeClient.Instance.Service.DoOperation("System.Stats.IncreaseValue",
  315. // rfpumpitem.Name, rfpumpitem.Description, item.fromLastPM, item.Total);
  316. //}
  317. InvokeClient.Instance.Service.DoOperation("System.Stats.RFResetTotal", item.Name);
  318. //if (item.Name.Contains(".BiasRfOnTime"))
  319. //{
  320. // //InvokeClient.Instance.Service.DoOperation($"{item.Name.Split('.')[0]}.BiasRf.ResetRFStats", item.Name);
  321. // //ResetPumpStats
  322. //}
  323. if (item.Name.Contains(".RfOnTime"))
  324. {
  325. //InvokeClient.Instance.Service.DoOperation($"{item.Name.Split('.')[0]}.Rf.ResetRFStats", item.Name);
  326. }
  327. if (item.Name.Contains(".PumpOnTime"))
  328. {
  329. //InvokeClient.Instance.Service.DoOperation($"{item.Name.Split('.')[0]}.MainPump.ResetPumpStats", item.Name);
  330. }
  331. }
  332. public void ResetTimeValue(StatsDataListItemRFAndPump item)
  333. {
  334. //foreach (var rfpumpitem in StatDataRFAndPump.ToList().FindAll(x => x.Description == "Follow => " + item.Name))
  335. //{
  336. // InvokeClient.Instance.Service.DoOperation("System.Stats.IncreaseValue",
  337. // rfpumpitem.Name, rfpumpitem.Description, rfpumpitem.fromLastPM, rfpumpitem.Total);
  338. //}
  339. InvokeClient.Instance.Service.DoOperation("System.StatsRFAndPump.ResetValue", item.Name);
  340. if (item.Name.Contains(".BiasRfOnTime"))
  341. {
  342. //InvokeClient.Instance.Service.DoOperation($"{item.Name.Split('.')[0]}.BiasRf.ResetRFStats", item.Name);
  343. //ResetPumpStats
  344. }
  345. if (item.Name.Contains(".RfOnTime"))
  346. {
  347. //InvokeClient.Instance.Service.DoOperation($"{item.Name.Split('.')[0]}.Rf.ResetRFStats", item.Name);
  348. }
  349. if (item.Name.Contains(".PumpOnTime"))
  350. {
  351. //InvokeClient.Instance.Service.DoOperation($"{item.Name.Split('.')[0]}.MainPump.ResetPumpStats", item.Name);
  352. }
  353. //InvokeClient.Instance.Service.DoOperation("System.StatsRFAndPump.ResetValue", item.Name);
  354. }
  355. public void ResetRFEnableAlarm(StatsDataListItemRFAndPump item)
  356. {
  357. InvokeClient.Instance.Service.DoOperation("System.StatsRFAndPump.EnableAlarm", item.Name, item.AlarmEnable);
  358. }
  359. public void SetPMIntervalValue(StatsDataListItemRFAndPump item)
  360. {
  361. if (string.IsNullOrEmpty(item.PMIntervalSetPoint) ||
  362. !int.TryParse(item.PMIntervalSetPoint, out int setValue))
  363. {
  364. DialogBox.ShowWarning("PM Interval value not valid");
  365. return;
  366. }
  367. if (item.Name.Contains(".PumpOnTime"))
  368. {
  369. InvokeClient.Instance.Service.DoOperation("System.StatsRFAndPump.SetPMIntervalValue", item.Name, setValue);
  370. //InvokeClient.Instance.Service.DoOperation($"{item.Name.Split('.')[0]}.MainPump.ResetPumpStats", item.Name);
  371. }
  372. if (item.Name.Contains(".BiasRfOnTime"))
  373. {
  374. InvokeClient.Instance.Service.DoOperation("System.StatsRFAndPump.SetPMIntervalValue", item.Name, setValue);
  375. //InvokeClient.Instance.Service.DoOperation($"{item.Name.Split('.')[0]}.BiasRf.ResetRFStats", item.Name);
  376. //ResetPumpStats
  377. }
  378. if (item.Name.Contains(".RfOnTime"))
  379. {
  380. InvokeClient.Instance.Service.DoOperation("System.StatsRFAndPump.SetPMIntervalValue", item.Name, setValue);
  381. //InvokeClient.Instance.Service.DoOperation($"{item.Name.Split('.')[0]}.Rf.ResetRFStats", item.Name);
  382. }
  383. item.PMIntervalTextSaved = true;
  384. }
  385. public void Init()
  386. {
  387. //string[] allModules = QueryDataClient.Instance.Service.GetConfig($"System.InstalledModules").ToString().Split(',');
  388. AddItemName = "";
  389. FollowRFList.Add($"{ModuleName}.RfOnTime");
  390. FollowRFList.Add($"{ModuleName}.PumpOnTime");
  391. ModuleList.Add(ModuleName);
  392. if (ModuleList.Count > 0)
  393. {
  394. AddItemModule = ModuleList[0];
  395. AddItemFollowRF = FollowRFList[0];
  396. }
  397. }
  398. public void EnterExitView(bool isEnter)
  399. {
  400. if (isEnter)
  401. {
  402. timer_Tick(null, null);
  403. timer.Start();
  404. }
  405. else
  406. {
  407. timer.Stop();
  408. _StatData.Clear();
  409. _StatDataRFAndPump.Clear();
  410. }
  411. }
  412. }
  413. }