NozzleChangeRecordQueryViewModel.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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. public ObservableCollection<NozzleChangeRecord> Results { get; set; } = new ObservableCollection<NozzleChangeRecord>();
  46. private int _PageIndex;
  47. public int PageIndex
  48. {
  49. get { return _PageIndex; }
  50. set { SetProperty(ref _PageIndex, value); }
  51. }
  52. private int _PageSize;
  53. public int PageSize
  54. {
  55. get { return _PageSize; }
  56. set { SetProperty(ref _PageSize, value); }
  57. }
  58. private int _TotalCount;
  59. public int TotalCount
  60. {
  61. get { return _TotalCount; }
  62. set { SetProperty(ref _TotalCount, value); }
  63. }
  64. public DelegateCommand SearchCommand { get; private set; }
  65. public DelegateCommand PrevPageCommand { get; private set; }
  66. public DelegateCommand NextPageCommand { get; private set; }
  67. public DelegateCommand ExportCommand { get; private set; }
  68. private async Task ExecuteSearchCommand()
  69. {
  70. try
  71. {
  72. var start = StartDate.HasValue ? StartDate.Value : (DateTime?)null;
  73. var end = EndDate.HasValue ? EndDate.Value : (DateTime?)null;
  74. var res = await _systemDatabaseService.QueryNozzleChangeRecordsPagedAsync(start, end, NozzleBatchNumber, PageIndex, PageSize);
  75. Results = new ObservableCollection<NozzleChangeRecord>(res.Items);
  76. TotalCount = res.TotalCount;
  77. }
  78. catch (Exception ex)
  79. {
  80. MessageBox.Show(ex.Message, "错误", MessageBoxButton.OK, MessageBoxImage.Error);
  81. }
  82. }
  83. private async Task ExecuteExportCommand()
  84. {
  85. try
  86. {
  87. var start = StartDate.HasValue ? StartDate.Value : (DateTime?)null;
  88. var end = EndDate.HasValue ? EndDate.Value : (DateTime?)null;
  89. var all = await _systemDatabaseService.QueryNozzleChangeRecordsAsync(start, end, NozzleBatchNumber);
  90. if (all == null || !all.Any()) { MessageBox.Show("没有找到符合条件的记录", "提示", MessageBoxButton.OK, MessageBoxImage.Information); return; }
  91. var dlg = new Microsoft.Win32.SaveFileDialog { FileName = $"NozzleChange_{DateTime.Now:yyyyMMddHHmmss}.csv", DefaultExt = ".csv", Filter = "CSV Files (*.csv)|*.csv" };
  92. if (dlg.ShowDialog() != true) return;
  93. var path = dlg.FileName;
  94. using (var sw = new StreamWriter(path, false, Encoding.UTF8))
  95. {
  96. sw.WriteLine("ChangeTime,NozzleBatchNumber,CurrentLockCount,OperatorName");
  97. foreach (var r in all)
  98. {
  99. sw.WriteLine($"{r.ChangeTime:yyyy-MM-dd HH:mm:ss},{r.NozzleBatchNumber},{r.CurrentLockCount},{r.OperatorName}");
  100. }
  101. }
  102. }
  103. catch (Exception ex)
  104. {
  105. MessageBox.Show(ex.Message, "错误", MessageBoxButton.OK, MessageBoxImage.Error);
  106. }
  107. }
  108. }
  109. }