WarnMangerViewModel.cs 4.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. using HandyControl.Interactivity.Commands;
  2. using MongoDB.Driver;
  3. using Shaker.Model;
  4. using Shaker.ViewModel;
  5. using ShakerManger.Data;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Collections.ObjectModel;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows.Input;
  13. namespace ShakerManger.ViewModel
  14. {
  15. internal class WarnMangerViewModel : DisplayViewModel<ModelBase>, IMainPageViewModel
  16. {
  17. private const int MAX_LOG_COUNT = 1000;
  18. public MainPageType MainPageType => MainPageType.WarnManger;
  19. private DateTime startTime = DateTime.MinValue;
  20. private DateTime endTime = DateTime.MaxValue;
  21. private string keyword = string.Empty;
  22. private string selectedShaker = "All";
  23. private bool isEnabled = true;
  24. private WarnType logType = WarnType.All;
  25. private void Search()
  26. {
  27. MainWindowViewModel.Default.LogManger.AddLog($"查询报警信息,时间{StartTime:yyyy-MM-dd HH:mm:ss}~{EndTime:yyyy-MM-dd HH:mm:ss}{(string.IsNullOrEmpty(Keyword) ? "" : $",关键字{Keyword}")}");
  28. Logs.Clear();
  29. List<Shaker.Model.WarnModel> collection = new List<Shaker.Model.WarnModel>();
  30. if (string.IsNullOrEmpty(Keyword))
  31. {
  32. var result = Sql.Default.GetCollection<Shaker.Model.WarnModel>().Find(x => x.DateTime >= StartTime.ToUniversalTime() && x.DateTime <= EndTime.ToUniversalTime() && (SelectedShaker != "All" ? x.ShakerID == SelectedShaker : true) && (logType == WarnType.All ? true : x.WarnType == logType)).Limit(MAX_LOG_COUNT).ToList();
  33. if (result != null) collection.AddRange(result);
  34. }
  35. else
  36. {
  37. var result = Sql.Default.GetCollection<Shaker.Model.WarnModel>().Find(x => x.DateTime >= StartTime.ToUniversalTime() && x.DateTime <= EndTime.ToUniversalTime() && x.Message.IndexOf(keyword) >= 0 && (SelectedShaker != "All" ? x.ShakerID == SelectedShaker : true) && (logType == WarnType.All ? true : x.WarnType == logType)).Limit(MAX_LOG_COUNT).ToList();
  38. if (result != null) collection.AddRange(result);
  39. }
  40. if (collection == null) return;
  41. var user = Sql.Default.GetCollection<Shaker.Model.UserModel>().AsQueryable().ToList();
  42. if (user != null)
  43. {
  44. collection.ForEach(x =>
  45. {
  46. if(string.IsNullOrEmpty(x.UserID))
  47. {
  48. x.UserID = "---";
  49. }
  50. else x.UserID = user?.FirstOrDefault(y => y.Id == x.UserID)?.UserName ?? "未知用户";
  51. x.ShakerID = MainWindowViewModel.Default.Shakers.Shakers.FirstOrDefault(y => y.Model.Id == x.ShakerID)?.Title ?? "未知振动台";
  52. });
  53. }
  54. if (collection.Count == 0)
  55. {
  56. return;
  57. }
  58. collection.ForEach(x =>
  59. {
  60. Logs.Add(new WarnViewModel(x));
  61. });
  62. }
  63. public ICommand SearchCommand => new DelegateCommand(Search);
  64. public WarnType LogType { get => logType; set => UpdateProperty(ref logType, value); }
  65. public DateTime StartTime { get => startTime; set => UpdateProperty(ref startTime, value); }
  66. public DateTime EndTime { get => endTime; set => UpdateProperty(ref endTime, value); }
  67. public string Keyword { get => keyword; set => UpdateProperty(ref keyword, value); }
  68. public string SelectedShaker { get => selectedShaker; set => UpdateProperty(ref selectedShaker, value); }
  69. public ObservableCollection<KeyValuePair<string, string>> Shakers { get; } = new ObservableCollection<KeyValuePair<string, string>>();
  70. public bool IsEnabled { get => isEnabled; set =>UpdateProperty(ref isEnabled,value); }
  71. public string IconPath { get; } = (string)App.Current.FindResource("WarnIcon");
  72. public ObservableCollection<WarnViewModel> Logs { get; } = new ObservableCollection<WarnViewModel>();
  73. public override Type View { get; } = typeof(View.WarnLogView);
  74. }
  75. }