LogMangerViewModel.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  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 void AddLog(string message,string shakerid, Shaker.Model.LogType logType = Shaker.Model.LogType.Message)
  41. {
  42. Sql.Default.Insert(new Shaker.Model.LogModel()
  43. {
  44. ClientID = "Manger",
  45. DateTime = DateTime.Now,
  46. Message = message,
  47. LogType = logType,
  48. ShakerID =shakerid,
  49. UserID = LoginViewModel.Default.Model.Id,
  50. });
  51. }
  52. public LogType LogType { get => logType; set =>UpdateProperty(ref logType, value); }
  53. public DateTime StartTime { get => startTime; set => UpdateProperty(ref startTime, value); }
  54. public DateTime EndTime { get => endTime; set => UpdateProperty(ref endTime, value); }
  55. public string Keyword { get => keyword; set => UpdateProperty(ref keyword, value); }
  56. public ICommand SearchCommand => new DelegateCommand(Search);
  57. private void Search()
  58. {
  59. AddLog($"查询日志,时间{StartTime:yyyy-MM-dd HH:mm:ss}~{EndTime:yyyy-MM-dd HH:mm:ss}{(string.IsNullOrEmpty(Keyword) ? "" : $",关键字{Keyword}")}");
  60. Logs.Clear();
  61. List<Shaker.Model.LogModel> collection = new List<Shaker.Model.LogModel>();
  62. if (string.IsNullOrEmpty(Keyword))
  63. {
  64. 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();
  65. if (result != null) collection.AddRange(result);
  66. }
  67. else
  68. {
  69. 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();
  70. if (result != null) collection.AddRange(result);
  71. }
  72. if (collection == null) return;
  73. var user = Sql.Default.GetCollection<Shaker.Model.UserModel>().AsQueryable().ToList();
  74. if (user != null)
  75. {
  76. collection.ForEach(x =>
  77. {
  78. if (string.IsNullOrEmpty(x.UserID))
  79. {
  80. x.UserID = "---";
  81. }
  82. else
  83. {
  84. x.UserID = user?.FirstOrDefault(y => y.Id == x.UserID)?.UserName ?? "未知用户";
  85. }
  86. x.ShakerID = MainWindowViewModel.Default.Shakers.Shakers.FirstOrDefault(y => y.Model.Id == x.ShakerID)?.Title ?? "未知振动台";
  87. });
  88. }
  89. if (collection.Count == 0)
  90. {
  91. return;
  92. }
  93. collection.ForEach(x =>
  94. {
  95. Logs.Add(new LogInfoViewModel(x));
  96. });
  97. }
  98. public void ClearLogs()
  99. {
  100. Logs.Clear();
  101. }
  102. public override Type View { get; } = typeof(View.LogView);
  103. public void Clear()
  104. {
  105. StartTime = DateTime.MinValue;
  106. EndTime = DateTime.MaxValue;
  107. Keyword = string.Empty;
  108. ClearLogs();
  109. }
  110. public ObservableCollection<LogInfoViewModel> Logs { get; } = new ObservableCollection<LogInfoViewModel>();
  111. }
  112. }