UserOnlineLogService.cs 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using Infrastructure.Attribute;
  2. using ZR.Model;
  3. using ZR.Model.Dto;
  4. using ZR.Model.Models;
  5. using ZR.Model.System;
  6. using ZR.Repository;
  7. using ZR.ServiceCore.Monitor.IMonitorService;
  8. using ZR.ServiceCore.Signalr;
  9. namespace ZR.ServiceCore.Monitor
  10. {
  11. /// <summary>
  12. /// 用户在线时长Service业务层处理
  13. /// </summary>
  14. [AppService(ServiceType = typeof(IUserOnlineLogService), ServiceLifetime = LifeTime.Transient)]
  15. public class UserOnlineLogService : BaseService<UserOnlineLog>, IUserOnlineLogService
  16. {
  17. /// <summary>
  18. /// 查询用户在线时长列表
  19. /// </summary>
  20. /// <param name="parm"></param>
  21. /// <returns></returns>
  22. public PagedInfo<UserOnlineLogDto> GetList(UserOnlineLogQueryDto parm)
  23. {
  24. var predicate = QueryExp(parm);
  25. var response = Queryable()
  26. //.OrderBy("Id desc")
  27. .Where(predicate.ToExpression())
  28. .LeftJoin<SysUser>((it, u) => it.UserId == u.UserId)
  29. .Select((it, u) => new UserOnlineLogDto()
  30. {
  31. NickName = u.NickName
  32. }, true)
  33. .ToPage(parm);
  34. return response;
  35. }
  36. /// <summary>
  37. /// 添加用户在线时长
  38. /// </summary>
  39. /// <param name="model"></param>
  40. /// <param name="user"></param>
  41. /// <returns></returns>
  42. public async Task<UserOnlineLog> AddUserOnlineLog(UserOnlineLog model, OnlineUsers user)
  43. {
  44. model.UserId = user.Userid;
  45. model.Location = user?.Location;
  46. model.OnlineTime = user.OnlineTime;
  47. model.UserIP = user.UserIP;
  48. model.Platform = user.Platform;
  49. model.Remark = user.Browser;
  50. model.LoginTime = user.LoginTime;
  51. model.AddTime = DateTime.Now;
  52. if (model.OnlineTime >= 0.5)
  53. {
  54. await Insertable(model).ExecuteReturnSnowflakeIdAsync();
  55. }
  56. return model;
  57. }
  58. /// <summary>
  59. /// 导出用户在线时长
  60. /// </summary>
  61. /// <param name="parm"></param>
  62. /// <returns></returns>
  63. public PagedInfo<UserOnlineLogDto> ExportList(UserOnlineLogQueryDto parm)
  64. {
  65. var predicate = QueryExp(parm);
  66. var response = Queryable()
  67. .Where(predicate.ToExpression())
  68. .Select((it) => new UserOnlineLogDto()
  69. {
  70. }, true)
  71. .ToPage(parm);
  72. return response;
  73. }
  74. /// <summary>
  75. /// 查询导出表达式
  76. /// </summary>
  77. /// <param name="parm"></param>
  78. /// <returns></returns>
  79. private static Expressionable<UserOnlineLog> QueryExp(UserOnlineLogQueryDto parm)
  80. {
  81. var predicate = Expressionable.Create<UserOnlineLog>();
  82. predicate = predicate.AndIF(parm.UserId != null, it => it.UserId == parm.UserId);
  83. predicate = predicate.AndIF(!string.IsNullOrEmpty(parm.UserIP), it => it.UserIP == parm.UserIP);
  84. predicate = predicate.AndIF(parm.BeginAddTime == null, it => it.AddTime >= DateTime.Now.ToShortDateString().ParseToDateTime());
  85. predicate = predicate.AndIF(parm.BeginAddTime != null, it => it.AddTime >= parm.BeginAddTime);
  86. return predicate;
  87. }
  88. }
  89. }