LogMangerViewModel.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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 LogMangerViewModel : DisplayViewModel<Shaker.Model.ModelBase>, IMainPageViewModel
  16. {
  17. private const int MAX_LOG_COUNT = 1000;
  18. private bool isEnabled = true;
  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 LogType logType = LogType.All;
  24. public string SelectedShaker { get => selectedShaker; set =>UpdateProperty(ref selectedShaker,value); }
  25. public ObservableCollection<KeyValuePair<string,string>> Shakers { get; } = new ObservableCollection<KeyValuePair<string,string>>();
  26. public MainPageType MainPageType => MainPageType.LogManger;
  27. public bool IsEnabled { get => isEnabled; set =>UpdateProperty(ref isEnabled,value); }
  28. public string IconPath { get; } = (string)App.Current.FindResource("LogIcon");
  29. public void AddLog(string message, Shaker.Model.LogType logType = Shaker.Model.LogType.Message)
  30. {
  31. Sql.Default.Insert(new Shaker.Model.LogModel()
  32. {
  33. ClientID= "Manger",
  34. DateTime= DateTime.Now,
  35. Message= message,
  36. LogType= logType,
  37. UserID = LoginViewModel.Default.Model.Id,
  38. });
  39. }
  40. public LogType LogType { get => logType; set =>UpdateProperty(ref logType, value); }
  41. public DateTime StartTime { get => startTime; set => UpdateProperty(ref startTime, value); }
  42. public DateTime EndTime { get => endTime; set => UpdateProperty(ref endTime, value); }
  43. public string Keyword { get => keyword; set => UpdateProperty(ref keyword, value); }
  44. public ICommand SearchCommand => new DelegateCommand(Search);
  45. private void Search()
  46. {
  47. Logs.Clear();
  48. List<Shaker.Model.LogModel> collection = new List<Shaker.Model.LogModel>();
  49. if (string.IsNullOrEmpty(Keyword))
  50. {
  51. var result = Sql.Default.GetCollection<Shaker.Model.LogModel>().Find(x => x.DateTime >= StartTime.ToUniversalTime() && x.DateTime <= EndTime.ToUniversalTime() &&(SelectedShaker != "All"? x.ShakerID ==SelectedShaker:true) &&(logType == LogType.All?true : x.LogType == logType)).Limit(MAX_LOG_COUNT).ToList();
  52. if (result != null) collection.AddRange(result);
  53. }
  54. else
  55. {
  56. var result = Sql.Default.GetCollection<Shaker.Model.LogModel>().Find(x => x.DateTime >= StartTime.ToUniversalTime() && x.DateTime <= EndTime.ToUniversalTime() && x.Message.IndexOf(keyword) >= 0 &&(SelectedShaker != "All"? x.ShakerID ==SelectedShaker:true)&&(logType == LogType.All?true : x.LogType == logType)).Limit(MAX_LOG_COUNT).ToList();
  57. if (result != null) collection.AddRange(result);
  58. }
  59. if (collection == null) return;
  60. var user = Sql.Default.GetCollection<Shaker.Model.UserModel>().AsQueryable().ToList();
  61. if (user != null)
  62. {
  63. collection.ForEach(x =>
  64. {
  65. x.UserID = user?.FirstOrDefault(y => y.Id == x.UserID)?.UserName ?? "";
  66. x.ShakerID = MainWindowViewModel.Default.Shakers.Shakers.FirstOrDefault(y => y.Model.Id == x.ShakerID)?.Title ?? "";
  67. });
  68. }
  69. if (collection.Count == 0)
  70. {
  71. return;
  72. }
  73. collection.ForEach(x =>
  74. {
  75. Logs.Add(new LogInfoViewModel(x));
  76. });
  77. }
  78. public void ClearLogs()
  79. {
  80. Logs.Clear();
  81. }
  82. public override Type View { get; } = typeof(View.LogView);
  83. public void Clear()
  84. {
  85. StartTime = DateTime.MinValue;
  86. EndTime = DateTime.MaxValue;
  87. Keyword = string.Empty;
  88. ClearLogs();
  89. }
  90. public ObservableCollection<LogInfoViewModel> Logs { get; } = new ObservableCollection<LogInfoViewModel>();
  91. }
  92. }