sys_user_online.py 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. # -*- coding: utf-8 -*-
  2. # @Author : YY
  3. from typing import List, Optional
  4. from ruoyi_common.constant import Constants
  5. from ruoyi_common.domain.entity import LoginUser
  6. from ruoyi_system.domain.entity import SysUserOnline
  7. from ruoyi_admin.ext import redis_cache
  8. class SysUserOnlineService:
  9. @classmethod
  10. def select_online_by_ipaddr(cls, ipaddr:str, user:LoginUser) \
  11. -> Optional[SysUserOnline]:
  12. """
  13. 通过登录地址查询信息
  14. **deprecated**: 该方法已废弃,请使用 cls.select_online_list
  15. Args:
  16. ipaddr (str): 登录地址
  17. user (LoginUser): 用户信息
  18. Returns:
  19. SysUserOnline: 登录信息
  20. """
  21. if user.ip_addr:
  22. if ipaddr == user.ip_addr:
  23. onlineuser:SysUserOnline = SysUserOnline.from_loginuser(user)
  24. return onlineuser
  25. @classmethod
  26. def select_online_by_user_name(cls, username:str, user:LoginUser) \
  27. -> Optional[SysUserOnline]:
  28. """
  29. 通过登录地址查询信息
  30. **deprecated**: 该方法已废弃,请使用 cls.select_online_list
  31. Args:
  32. username (str): 用户名称
  33. user (LoginUser): 用户信息
  34. Returns:
  35. SysUserOnline: 登录信息
  36. """
  37. if user.user_name:
  38. if username == user.user_name:
  39. onlineuser:SysUserOnline = SysUserOnline.from_loginuser(user)
  40. return onlineuser
  41. @classmethod
  42. def select_online_by_info(cls, ipaddr:str, username:str, user:LoginUser) \
  43. -> Optional[SysUserOnline]:
  44. """
  45. 通过登录地址查询信息
  46. **deprecated**: 该方法已废弃,请使用 cls.select_online_list
  47. Args:
  48. ipaddr (str): 登录地址
  49. username (str): 用户名称
  50. user (LoginUser): 用户信息
  51. Returns:
  52. SysUserOnline: 登录信息
  53. """
  54. if user.ip_addr and user.user_name:
  55. if ipaddr == user.ip_addr and username == user.user_name:
  56. onlineuser:SysUserOnline = SysUserOnline.from_loginuser(user)
  57. return onlineuser
  58. @classmethod
  59. def select_online_list(cls, query:SysUserOnline) -> List[SysUserOnline]:
  60. """
  61. 通过请求参数查询信息
  62. Args:
  63. query (SysUserOnline): 查询参数
  64. Returns:
  65. List[SysUserOnline]: 登录信息列表
  66. """
  67. keys:list[bytes] = redis_cache.keys(Constants.LOGIN_TOKEN_KEY + "*");
  68. online_users = []
  69. for key in keys:
  70. key_decoded = key.decode("utf-8")
  71. user_json = redis_cache.get(key_decoded)
  72. loginuser = LoginUser.model_validate_json(user_json)
  73. onlineuser:SysUserOnline = SysUserOnline.from_loginuser(loginuser)
  74. if query.ip_addr and query.user_name:
  75. if onlineuser.ip_addr == query.ip_addr and onlineuser.user_name == query.user_name:
  76. online_users.append(onlineuser)
  77. elif query.ip_addr:
  78. if onlineuser.ip_addr == query.ip_addr:
  79. online_users.append(onlineuser)
  80. elif query.user_name:
  81. if onlineuser.user_name == query.user_name:
  82. online_users.append(onlineuser)
  83. else:
  84. online_users.append(onlineuser)
  85. if online_users:
  86. online_users.reverse()
  87. return online_users
  88. @classmethod
  89. def login_user_to_user_online(cls, user:LoginUser)-> SysUserOnline:
  90. """
  91. 设置在线用户信息
  92. **deprecated**: 该方法已废弃,请使用 SysUserOnline.from_loginuser
  93. Args:
  94. user (LoginUser): 用户信息
  95. Returns:
  96. SysUserOnline: 登录信息
  97. """
  98. return SysUserOnline(
  99. token_id=user.token.hex,
  100. user_name=user.user_name,
  101. dept_name=user.dept_name,
  102. ip_addr=user.ip_addr,
  103. login_location=user.login_location,
  104. browser=user.browser,
  105. os=user.os,
  106. login_time=user.login_time,
  107. )
  108. @classmethod
  109. def force_logout(cls, token_id:str)-> bool:
  110. """
  111. 强制退出登录
  112. Args:
  113. token_id (str): 用户token
  114. Returns:
  115. bool: 是否成功
  116. """
  117. redis_cache.delete(Constants.LOGIN_TOKEN_KEY + token_id)
  118. return True