feat: 初始化项目架构
This commit is contained in:
71
ruoyi-fastapi-backend/module_admin/service/online_service.py
Normal file
71
ruoyi-fastapi-backend/module_admin/service/online_service.py
Normal file
@@ -0,0 +1,71 @@
|
||||
from fastapi import Request
|
||||
from jose import jwt
|
||||
from config.env import JwtConfig, RedisInitKeyConfig
|
||||
from module_admin.entity.vo.online_vo import *
|
||||
from module_admin.entity.vo.common_vo import CrudResponseModel
|
||||
from utils.common_util import CamelCaseUtil
|
||||
|
||||
|
||||
class OnlineService:
|
||||
"""
|
||||
在线用户管理模块服务层
|
||||
"""
|
||||
|
||||
@classmethod
|
||||
async def get_online_list_services(cls, request: Request, query_object: OnlineQueryModel):
|
||||
"""
|
||||
获取在线用户表信息service
|
||||
:param request: Request对象
|
||||
:param query_object: 查询参数对象
|
||||
:return: 在线用户列表信息
|
||||
"""
|
||||
access_token_keys = await request.app.state.redis.keys(f"{RedisInitKeyConfig.ACCESS_TOKEN.get('key')}*")
|
||||
if not access_token_keys:
|
||||
access_token_keys = []
|
||||
access_token_values_list = [await request.app.state.redis.get(key) for key in access_token_keys]
|
||||
online_info_list = []
|
||||
for item in access_token_values_list:
|
||||
payload = jwt.decode(item, JwtConfig.SECRET_KEY, algorithms=[JwtConfig.ALGORITHM])
|
||||
online_dict = dict(
|
||||
token_id=payload.get('session_id'),
|
||||
user_name=payload.get('user_name'),
|
||||
dept_name=payload.get('dept_name'),
|
||||
ipaddr=payload.get('login_info').get('ipaddr'),
|
||||
login_location=payload.get('login_info').get('loginLocation'),
|
||||
browser=payload.get('login_info').get('browser'),
|
||||
os=payload.get('login_info').get('os'),
|
||||
login_time=payload.get('login_info').get('loginTime')
|
||||
)
|
||||
if query_object.user_name and not query_object.ipaddr:
|
||||
if query_object.user_name == payload.get('login_info').get('ipaddr'):
|
||||
online_info_list = [online_dict]
|
||||
break
|
||||
elif not query_object.user_name and query_object.ipaddr:
|
||||
if query_object.ipaddr == payload.get('ipaddr'):
|
||||
online_info_list = [online_dict]
|
||||
break
|
||||
elif query_object.user_name and query_object.ipaddr:
|
||||
if query_object.user_name == payload.get('user_name') and query_object.ipaddr == payload.get('login_info').get('ipaddr'):
|
||||
online_info_list = [online_dict]
|
||||
break
|
||||
else:
|
||||
online_info_list.append(online_dict)
|
||||
|
||||
return CamelCaseUtil.transform_result(online_info_list)
|
||||
|
||||
@classmethod
|
||||
async def delete_online_services(cls, request: Request, page_object: DeleteOnlineModel):
|
||||
"""
|
||||
强退在线用户信息service
|
||||
:param request: Request对象
|
||||
:param page_object: 强退在线用户对象
|
||||
:return: 强退在线用户校验结果
|
||||
"""
|
||||
if page_object.token_ids.split(','):
|
||||
token_id_list = page_object.token_ids.split(',')
|
||||
for token_id in token_id_list:
|
||||
await request.app.state.redis.delete(f"{RedisInitKeyConfig.ACCESS_TOKEN.get('key')}:{token_id}")
|
||||
result = dict(is_success=True, message='强退成功')
|
||||
else:
|
||||
result = dict(is_success=False, message='传入session_id为空')
|
||||
return CrudResponseModel(**result)
|
Reference in New Issue
Block a user