NozzleChangeRecordQueryViewModel.cs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. using Prism.Commands;
  2. using Prism.Mvvm;
  3. using System;
  4. using System.Collections.ObjectModel;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using System.Windows;
  10. using TeamAAS_VP.Interfaces;
  11. using TeamAAS_VP.Models;
  12. namespace TeamAAS_VP.ViewModels.Statistics
  13. {
  14. public class NozzleChangeRecordQueryViewModel : BindableBase
  15. {
  16. private readonly ISystemDatabaseService _systemDatabaseService;
  17. public NozzleChangeRecordQueryViewModel(ISystemDatabaseService systemDatabaseService)
  18. {
  19. _systemDatabaseService = systemDatabaseService;
  20. PageSize = 20; PageIndex = 1;
  21. StartDate = DateTime.Now.Date; EndDate = DateTime.Now.Date.AddDays(1);
  22. SearchCommand = new DelegateCommand(async () => await ExecuteSearchCommand());
  23. PrevPageCommand = new DelegateCommand(async () => { if (PageIndex > 1) { PageIndex--; await ExecuteSearchCommand(); } });
  24. NextPageCommand = new DelegateCommand(async () => { if (PageIndex * PageSize < TotalCount) { PageIndex++; await ExecuteSearchCommand(); } });
  25. ExportCommand = new DelegateCommand(async () => await ExecuteExportCommand());
  26. }
  27. private DateTime? _StartDate;
  28. public DateTime? StartDate
  29. {
  30. get { return _StartDate; }
  31. set { SetProperty(ref _StartDate, value); }
  32. }
  33. private DateTime? _EndDate;
  34. public DateTime? EndDate
  35. {
  36. get { return _EndDate; }
  37. set { SetProperty(ref _EndDate, value); }
  38. }
  39. private string _NozzleBatchNumber;
  40. public string NozzleBatchNumber
  41. {
  42. get { return _NozzleBatchNumber; }
  43. set { SetProperty(ref _NozzleBatchNumber, value); }
  44. }
  45. private ObservableCollection<NozzleChangeRecord> _Results;
  46. public ObservableCollection<NozzleChangeRecord> Results
  47. {
  48. get { return _Results; }
  49. set { SetProperty(ref _Results, value); }
  50. }
  51. private int _PageIndex;
  52. public int PageIndex
  53. {
  54. get { return _PageIndex; }
  55. set { SetProperty(ref _PageIndex, value); }
  56. }
  57. private int _PageSize;
  58. public int PageSize
  59. {
  60. get { return _PageSize; }
  61. set { SetProperty(ref _PageSize, value); }
  62. }
  63. private int _TotalCount;
  64. public int TotalCount
  65. {
  66. get { return _TotalCount; }
  67. set { SetProperty(ref _TotalCount, value); }
  68. }
  69. public DelegateCommand SearchCommand { get; private set; }
  70. public DelegateCommand PrevPageCommand { get; private set; }
  71. public DelegateCommand NextPageCommand { get; private set; }
  72. public DelegateCommand ExportCommand { get; private set; }
  73. private async Task ExecuteSearchCommand()
  74. {
  75. try
  76. {
  77. var start = StartDate.HasValue ? StartDate.Value : (DateTime?)null;
  78. var end = EndDate.HasValue ? EndDate.Value : (DateTime?)null;
  79. var res = await _systemDatabaseService.QueryNozzleChangeRecordsPagedAsync(start, end, NozzleBatchNumber, PageIndex, PageSize);
  80. Results = new ObservableCollection<NozzleChangeRecord>(res.Items);
  81. TotalCount = res.TotalCount;
  82. }
  83. catch (Exception ex)
  84. {
  85. MessageBox.Show(ex.Message, "错误", MessageBoxButton.OK, MessageBoxImage.Error);
  86. }
  87. }
  88. private async Task ExecuteExportCommand()
  89. {
  90. try
  91. {
  92. var start = StartDate.HasValue ? StartDate.Value : (DateTime?)null;
  93. var end = EndDate.HasValue ? EndDate.Value : (DateTime?)null;
  94. var all = await _systemDatabaseService.QueryNozzleChangeRecordsAsync(start, end, NozzleBatchNumber);
  95. if (all == null || !all.Any()) { MessageBox.Show("没有找到符合条件的记录", "提示", MessageBoxButton.OK, MessageBoxImage.Information); return; }
  96. var dlg = new Microsoft.Win32.SaveFileDialog { FileName = $"NozzleChange_{DateTime.Now:yyyyMMddHHmmss}.csv", DefaultExt = ".csv", Filter = "CSV Files (*.csv)|*.csv" };
  97. if (dlg.ShowDialog() != true) return;
  98. var path = dlg.FileName;
  99. using (var sw = new StreamWriter(path, false, Encoding.UTF8))
  100. {
  101. sw.WriteLine("ChangeTime,NozzleBatchNumber,CurrentLockCount,OperatorName");
  102. foreach (var r in all)
  103. {
  104. sw.WriteLine($"{r.ChangeTime:yyyy-MM-dd HH:mm:ss},{r.NozzleBatchNumber},{r.CurrentLockCount},{r.OperatorName}");
  105. }
  106. }
  107. }
  108. catch (Exception ex)
  109. {
  110. MessageBox.Show(ex.Message, "错误", MessageBoxButton.OK, MessageBoxImage.Error);
  111. }
  112. }
  113. }
  114. }