AlarmQueryViewModel.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. using Prism.Commands;
  2. using Prism.Ioc;
  3. using Prism.Mvvm;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Collections.ObjectModel;
  7. using System.Data;
  8. using System.Linq;
  9. using System.Threading.Tasks;
  10. using System.Windows;
  11. using System.Windows.Controls;
  12. using TeamAAS_VM.Data;
  13. using TeamAAS_VP.Core;
  14. using TeamAAS_VP.Data;
  15. using TeamAAS_VP.Interfaces;
  16. using TeamAAS_VP.Models;
  17. using TeamAAS_VP.Resources.Languages;
  18. using TeamAAS_VP.Views.Product;
  19. namespace TeamAAS_VP.ViewModels.Statistics
  20. {
  21. public class AlarmQueryViewModel : BindableBase
  22. {
  23. IContainerProvider _container;
  24. ISystemDatabaseService _systemDatabaseService;
  25. #region 属性
  26. private DataTable _dataTable;
  27. public DataTable DataTable
  28. {
  29. get { return _dataTable; }
  30. set { SetProperty(ref _dataTable, value); }
  31. }
  32. private DateTime? _StartDate;
  33. public DateTime? StartDate
  34. {
  35. get { return _StartDate; }
  36. set { SetProperty(ref _StartDate, value); }
  37. }
  38. private DateTime? _StartTime;
  39. public DateTime? StartTime
  40. {
  41. get { return _StartTime; }
  42. set { SetProperty(ref _StartTime, value); }
  43. }
  44. private DateTime? _EndDate;
  45. public DateTime? EndDate
  46. {
  47. get { return _EndDate; }
  48. set { SetProperty(ref _EndDate, value); }
  49. }
  50. private DateTime? _EndTime;
  51. public DateTime? EndTime
  52. {
  53. get { return _EndTime; }
  54. set { SetProperty(ref _EndTime, value); }
  55. }
  56. private bool _isSearch = false;
  57. public bool isSearch
  58. {
  59. get { return _isSearch; }
  60. set { SetProperty(ref _isSearch, value); }
  61. }
  62. #endregion
  63. #region 命令
  64. private DelegateCommand _LoadedCommand;
  65. public DelegateCommand LoadedCommand =>
  66. _LoadedCommand ?? (_LoadedCommand = new DelegateCommand(ExecuteLoadedCommand));
  67. private DelegateCommand _SearchCommand;
  68. public DelegateCommand SearchCommand =>
  69. _SearchCommand ?? (_SearchCommand = new DelegateCommand(ExecuteSearchCommand, CanSearch)
  70. .ObservesProperty(() => StartDate).ObservesProperty(() => StartTime)
  71. .ObservesProperty(() => EndDate).ObservesProperty(() => EndTime).ObservesProperty(() => isSearch));
  72. private DelegateCommand _SaveCommand;
  73. public DelegateCommand SaveCommand =>
  74. _SaveCommand ?? (_SaveCommand = new DelegateCommand(ExecuteSaveCommand, CanSave).ObservesProperty(() => DataTable).ObservesProperty(() => isSearch));
  75. #endregion
  76. #region 事件
  77. #endregion
  78. public AlarmQueryViewModel(IContainerProvider container,ISystemDatabaseService systemDatabaseService)
  79. {
  80. _container = container;
  81. _systemDatabaseService = systemDatabaseService;
  82. }
  83. #region 方法
  84. void ExecuteLoadedCommand()
  85. {
  86. if (StartDate == null)
  87. {
  88. StartDate = DateTime.Now;
  89. }
  90. if (StartTime == null)
  91. {
  92. StartTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 0, 0, 0);
  93. }
  94. if (EndDate == null)
  95. {
  96. EndDate = DateTime.Now;
  97. }
  98. if (EndTime == null)
  99. {
  100. EndTime = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59);
  101. }
  102. }
  103. /// <summary>
  104. /// 查询
  105. /// </summary>
  106. async void ExecuteSearchCommand()
  107. {
  108. DateTime dt1 = new DateTime(StartDate.Value.Year, StartDate.Value.Month, StartDate.Value.Day, StartTime.Value.Hour, StartTime.Value.Minute, StartTime.Value.Second);
  109. DateTime dt2 = new DateTime(EndDate.Value.Year, EndDate.Value.Month, EndDate.Value.Day, EndTime.Value.Hour, EndTime.Value.Minute, EndTime.Value.Second);
  110. isSearch = true;
  111. var alarms=await _systemDatabaseService.QueryAlarmsAsync(dt1, dt2);
  112. //将查询结果转换为DataTable
  113. DataTable = DataTableHelper.ToDataTable(alarms);
  114. isSearch = false;
  115. }
  116. /// <summary>
  117. /// 保存
  118. /// </summary>
  119. async void ExecuteSaveCommand()
  120. {
  121. isSearch = true;
  122. try
  123. {
  124. //打开一个保存对话框,选择保存路径
  125. //将DataTable报错到本地路径中,保存的文件名为“产品名称_开始时间_结束时间.csv”
  126. string startTime = " "; //开始时间
  127. string endTime = " "; //结束时间
  128. if (StartDate != null)
  129. {
  130. startTime = StartDate.Value.ToString("yyyyMMddHHmm");
  131. }
  132. if (EndDate != null)
  133. {
  134. endTime = EndDate.Value.ToString("yyyyMMddHHmm");
  135. }
  136. string fileName = $"Alarm_{startTime}_{endTime}.csv";
  137. //打开一个保存对话框,选择保存路径
  138. var saveFileDialog = new Microsoft.Win32.SaveFileDialog
  139. {
  140. FileName = fileName,
  141. DefaultExt = ".csv",
  142. Filter = "CSV Files (*.csv)|*.csv"
  143. };
  144. bool? result = saveFileDialog.ShowDialog();
  145. if (result == true)
  146. {
  147. //保存文件
  148. string filePath = saveFileDialog.FileName;
  149. //将DataTable导出到csv文件中
  150. if (filePath == null) return;
  151. DataTableHelper.ExportToCsv(DataTable, filePath);
  152. }
  153. }
  154. catch (Exception ex)
  155. {
  156. MessageBox.Show(ex.Message, Lang.错误, MessageBoxButton.OK, MessageBoxImage.Error);
  157. }
  158. isSearch = false;
  159. }
  160. private bool CanSearch()
  161. {
  162. if (StartDate != null && StartTime != null && EndDate != null && EndTime != null && !isSearch)
  163. {
  164. return true;
  165. }
  166. else
  167. {
  168. return false;
  169. }
  170. }
  171. private bool CanSave()
  172. {
  173. if (DataTable != null && DataTable.Rows.Count > 0 && !isSearch)
  174. {
  175. return true;
  176. }
  177. else
  178. {
  179. return false;
  180. }
  181. }
  182. #endregion
  183. }
  184. }