Browse Source

style: 使用ruff格式化日志管理模块,优化导入

master
insistence 7 months ago
parent
commit
ccb9e2a314
  1. 105
      ruoyi-fastapi-backend/module_admin/controller/log_controller.py
  2. 87
      ruoyi-fastapi-backend/module_admin/dao/log_dao.py
  3. 10
      ruoyi-fastapi-backend/module_admin/entity/do/log_do.py
  4. 34
      ruoyi-fastapi-backend/module_admin/entity/vo/log_vo.py
  5. 98
      ruoyi-fastapi-backend/module_admin/service/log_service.py

105
ruoyi-fastapi-backend/module_admin/controller/log_controller.py

@ -1,30 +1,47 @@
from fastapi import APIRouter
from fastapi import Depends
from fastapi import APIRouter, Depends, Request
from sqlalchemy.ext.asyncio import AsyncSession
from config.enums import BusinessType
from config.get_db import get_db
from module_admin.service.login_service import LoginService
from module_admin.service.log_service import *
from module_admin.aspect.interface_auth import CheckUserInterfaceAuth
from module_admin.annotation.log_annotation import log_decorator
from config.enums import BusinessType
from utils.response_util import *
from utils.log_util import *
from utils.page_util import *
from module_admin.aspect.interface_auth import CheckUserInterfaceAuth
from module_admin.entity.vo.log_vo import (
DeleteLoginLogModel,
DeleteOperLogModel,
LoginLogPageQueryModel,
OperLogPageQueryModel,
UnlockUser,
)
from module_admin.service.log_service import LoginLogService, OperationLogService
from module_admin.service.login_service import LoginService
from utils.common_util import bytes2file_response
from utils.log_util import logger
from utils.page_util import PageResponseModel
from utils.response_util import ResponseUtil
logController = APIRouter(prefix='/monitor', dependencies=[Depends(LoginService.get_current_user)])
@logController.get("/operlog/list", response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('monitor:operlog:list'))])
async def get_system_operation_log_list(request: Request, operation_log_page_query: OperLogPageQueryModel = Depends(OperLogPageQueryModel.as_query), query_db: AsyncSession = Depends(get_db)):
@logController.get(
'/operlog/list',
response_model=PageResponseModel,
dependencies=[Depends(CheckUserInterfaceAuth('monitor:operlog:list'))],
)
async def get_system_operation_log_list(
request: Request,
operation_log_page_query: OperLogPageQueryModel = Depends(OperLogPageQueryModel.as_query),
query_db: AsyncSession = Depends(get_db),
):
# 获取分页数据
operation_log_page_query_result = await OperationLogService.get_operation_log_list_services(query_db, operation_log_page_query, is_page=True)
operation_log_page_query_result = await OperationLogService.get_operation_log_list_services(
query_db, operation_log_page_query, is_page=True
)
logger.info('获取成功')
return ResponseUtil.success(model_content=operation_log_page_query_result)
@logController.delete("/operlog/clean", dependencies=[Depends(CheckUserInterfaceAuth('monitor:operlog:remove'))])
@logController.delete('/operlog/clean', dependencies=[Depends(CheckUserInterfaceAuth('monitor:operlog:remove'))])
@log_decorator(title='操作日志管理', business_type=BusinessType.CLEAN)
async def clear_system_operation_log(request: Request, query_db: AsyncSession = Depends(get_db)):
clear_operation_log_result = await OperationLogService.clear_operation_log_services(query_db)
@ -33,37 +50,57 @@ async def clear_system_operation_log(request: Request, query_db: AsyncSession =
return ResponseUtil.success(msg=clear_operation_log_result.message)
@logController.delete("/operlog/{oper_ids}", dependencies=[Depends(CheckUserInterfaceAuth('monitor:operlog:remove'))])
@logController.delete('/operlog/{oper_ids}', dependencies=[Depends(CheckUserInterfaceAuth('monitor:operlog:remove'))])
@log_decorator(title='操作日志管理', business_type=BusinessType.DELETE)
async def delete_system_operation_log(request: Request, oper_ids: str, query_db: AsyncSession = Depends(get_db)):
delete_operation_log = DeleteOperLogModel(operIds=oper_ids)
delete_operation_log_result = await OperationLogService.delete_operation_log_services(query_db, delete_operation_log)
delete_operation_log_result = await OperationLogService.delete_operation_log_services(
query_db, delete_operation_log
)
logger.info(delete_operation_log_result.message)
return ResponseUtil.success(msg=delete_operation_log_result.message)
@logController.post("/operlog/export", dependencies=[Depends(CheckUserInterfaceAuth('monitor:operlog:export'))])
@logController.post('/operlog/export', dependencies=[Depends(CheckUserInterfaceAuth('monitor:operlog:export'))])
@log_decorator(title='操作日志管理', business_type=BusinessType.EXPORT)
async def export_system_operation_log_list(request: Request, operation_log_page_query: OperLogPageQueryModel = Depends(OperLogPageQueryModel.as_form), query_db: AsyncSession = Depends(get_db)):
async def export_system_operation_log_list(
request: Request,
operation_log_page_query: OperLogPageQueryModel = Depends(OperLogPageQueryModel.as_form),
query_db: AsyncSession = Depends(get_db),
):
# 获取全量数据
operation_log_query_result = await OperationLogService.get_operation_log_list_services(query_db, operation_log_page_query, is_page=False)
operation_log_export_result = await OperationLogService.export_operation_log_list_services(request, operation_log_query_result)
operation_log_query_result = await OperationLogService.get_operation_log_list_services(
query_db, operation_log_page_query, is_page=False
)
operation_log_export_result = await OperationLogService.export_operation_log_list_services(
request, operation_log_query_result
)
logger.info('导出成功')
return ResponseUtil.streaming(data=bytes2file_response(operation_log_export_result))
@logController.get("/logininfor/list", response_model=PageResponseModel, dependencies=[Depends(CheckUserInterfaceAuth('monitor:logininfor:list'))])
async def get_system_login_log_list(request: Request, login_log_page_query: LoginLogPageQueryModel = Depends(LoginLogPageQueryModel.as_query), query_db: AsyncSession = Depends(get_db)):
@logController.get(
'/logininfor/list',
response_model=PageResponseModel,
dependencies=[Depends(CheckUserInterfaceAuth('monitor:logininfor:list'))],
)
async def get_system_login_log_list(
request: Request,
login_log_page_query: LoginLogPageQueryModel = Depends(LoginLogPageQueryModel.as_query),
query_db: AsyncSession = Depends(get_db),
):
# 获取分页数据
login_log_page_query_result = await LoginLogService.get_login_log_list_services(query_db, login_log_page_query, is_page=True)
login_log_page_query_result = await LoginLogService.get_login_log_list_services(
query_db, login_log_page_query, is_page=True
)
logger.info('获取成功')
return ResponseUtil.success(model_content=login_log_page_query_result)
@logController.delete("/logininfor/clean", dependencies=[Depends(CheckUserInterfaceAuth('monitor:logininfor:remove'))])
@logController.delete('/logininfor/clean', dependencies=[Depends(CheckUserInterfaceAuth('monitor:logininfor:remove'))])
@log_decorator(title='登录日志管理', business_type=BusinessType.CLEAN)
async def clear_system_login_log(request: Request, query_db: AsyncSession = Depends(get_db)):
clear_login_log_result = await LoginLogService.clear_login_log_services(query_db)
@ -72,7 +109,9 @@ async def clear_system_login_log(request: Request, query_db: AsyncSession = Depe
return ResponseUtil.success(msg=clear_login_log_result.message)
@logController.delete("/logininfor/{info_ids}", dependencies=[Depends(CheckUserInterfaceAuth('monitor:logininfor:remove'))])
@logController.delete(
'/logininfor/{info_ids}', dependencies=[Depends(CheckUserInterfaceAuth('monitor:logininfor:remove'))]
)
@log_decorator(title='登录日志管理', business_type=BusinessType.DELETE)
async def delete_system_login_log(request: Request, info_ids: str, query_db: AsyncSession = Depends(get_db)):
delete_login_log = DeleteLoginLogModel(infoIds=info_ids)
@ -82,9 +121,11 @@ async def delete_system_login_log(request: Request, info_ids: str, query_db: Asy
return ResponseUtil.success(msg=delete_login_log_result.message)
@logController.get("/logininfor/unlock/{user_name}", dependencies=[Depends(CheckUserInterfaceAuth('monitor:logininfor:unlock'))])
@logController.get(
'/logininfor/unlock/{user_name}', dependencies=[Depends(CheckUserInterfaceAuth('monitor:logininfor:unlock'))]
)
@log_decorator(title='登录日志管理', business_type=BusinessType.OTHER)
async def clear_system_login_log(request: Request, user_name: str, query_db: AsyncSession = Depends(get_db)):
async def unlock_system_user(request: Request, user_name: str, query_db: AsyncSession = Depends(get_db)):
unlock_user = UnlockUser(userName=user_name)
unlock_user_result = await LoginLogService.unlock_user_services(request, unlock_user)
logger.info(unlock_user_result.message)
@ -92,11 +133,17 @@ async def clear_system_login_log(request: Request, user_name: str, query_db: Asy
return ResponseUtil.success(msg=unlock_user_result.message)
@logController.post("/logininfor/export", dependencies=[Depends(CheckUserInterfaceAuth('monitor:logininfor:export'))])
@logController.post('/logininfor/export', dependencies=[Depends(CheckUserInterfaceAuth('monitor:logininfor:export'))])
@log_decorator(title='登录日志管理', business_type=BusinessType.EXPORT)
async def export_system_login_log_list(request: Request, login_log_page_query: LoginLogPageQueryModel = Depends(LoginLogPageQueryModel.as_form), query_db: AsyncSession = Depends(get_db)):
async def export_system_login_log_list(
request: Request,
login_log_page_query: LoginLogPageQueryModel = Depends(LoginLogPageQueryModel.as_form),
query_db: AsyncSession = Depends(get_db),
):
# 获取全量数据
login_log_query_result = await LoginLogService.get_login_log_list_services(query_db, login_log_page_query, is_page=False)
login_log_query_result = await LoginLogService.get_login_log_list_services(
query_db, login_log_page_query, is_page=False
)
login_log_export_result = await LoginLogService.export_login_log_list_services(login_log_query_result)
logger.info('导出成功')

87
ruoyi-fastapi-backend/module_admin/dao/log_dao.py

@ -1,10 +1,10 @@
from sqlalchemy import select, update, delete, asc, desc
from datetime import datetime, time
from sqlalchemy import asc, delete, desc, select
from sqlalchemy.ext.asyncio import AsyncSession
from module_admin.entity.do.log_do import SysOperLog, SysLogininfor
from module_admin.entity.vo.log_vo import *
from utils.page_util import PageUtil
from module_admin.entity.do.log_do import SysLogininfor, SysOperLog
from module_admin.entity.vo.log_vo import LogininforModel, LoginLogPageQueryModel, OperLogModel, OperLogPageQueryModel
from utils.common_util import SnakeCaseUtil
from datetime import datetime, time
from utils.page_util import PageUtil
class OperationLogDao:
@ -25,20 +25,27 @@ class OperationLogDao:
order_by_column = asc(getattr(SysOperLog, SnakeCaseUtil.camel_to_snake(query_object.order_by_column), None))
elif query_object.is_asc == 'descending':
order_by_column = desc(
getattr(SysOperLog, SnakeCaseUtil.camel_to_snake(query_object.order_by_column), None))
getattr(SysOperLog, SnakeCaseUtil.camel_to_snake(query_object.order_by_column), None)
)
else:
order_by_column = desc(SysOperLog.oper_time)
query = select(SysOperLog) \
.where(SysOperLog.title.like(f'%{query_object.title}%') if query_object.title else True,
SysOperLog.oper_name.like(f'%{query_object.oper_name}%') if query_object.oper_name else True,
SysOperLog.business_type == query_object.business_type if query_object.business_type else True,
SysOperLog.status == query_object.status if query_object.status else True,
SysOperLog.oper_time.between(
datetime.combine(datetime.strptime(query_object.begin_time, '%Y-%m-%d'), time(00, 00, 00)),
datetime.combine(datetime.strptime(query_object.end_time, '%Y-%m-%d'), time(23, 59, 59)))
if query_object.begin_time and query_object.end_time else True) \
.distinct() \
query = (
select(SysOperLog)
.where(
SysOperLog.title.like(f'%{query_object.title}%') if query_object.title else True,
SysOperLog.oper_name.like(f'%{query_object.oper_name}%') if query_object.oper_name else True,
SysOperLog.business_type == query_object.business_type if query_object.business_type else True,
SysOperLog.status == query_object.status if query_object.status else True,
SysOperLog.oper_time.between(
datetime.combine(datetime.strptime(query_object.begin_time, '%Y-%m-%d'), time(00, 00, 00)),
datetime.combine(datetime.strptime(query_object.end_time, '%Y-%m-%d'), time(23, 59, 59)),
)
if query_object.begin_time and query_object.end_time
else True,
)
.distinct()
.order_by(order_by_column)
)
operation_log_list = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
return operation_log_list
@ -65,10 +72,7 @@ class OperationLogDao:
:param operation_log: 操作日志对象
:return:
"""
await db.execute(
delete(SysOperLog)
.where(SysOperLog.oper_id.in_([operation_log.oper_id]))
)
await db.execute(delete(SysOperLog).where(SysOperLog.oper_id.in_([operation_log.oper_id])))
@classmethod
async def clear_operation_log_dao(cls, db: AsyncSession):
@ -77,9 +81,7 @@ class OperationLogDao:
:param db: orm对象
:return:
"""
await db.execute(
delete(SysOperLog)
)
await db.execute(delete(SysOperLog))
class LoginLogDao:
@ -98,22 +100,30 @@ class LoginLogDao:
"""
if query_object.is_asc == 'ascending':
order_by_column = asc(
getattr(SysLogininfor, SnakeCaseUtil.camel_to_snake(query_object.order_by_column), None))
getattr(SysLogininfor, SnakeCaseUtil.camel_to_snake(query_object.order_by_column), None)
)
elif query_object.is_asc == 'descending':
order_by_column = desc(
getattr(SysLogininfor, SnakeCaseUtil.camel_to_snake(query_object.order_by_column), None))
getattr(SysLogininfor, SnakeCaseUtil.camel_to_snake(query_object.order_by_column), None)
)
else:
order_by_column = desc(SysLogininfor.login_time)
query = select(SysLogininfor) \
.where(SysLogininfor.ipaddr.like(f'%{query_object.ipaddr}%') if query_object.ipaddr else True,
SysLogininfor.user_name.like(f'%{query_object.user_name}%') if query_object.user_name else True,
SysLogininfor.status == query_object.status if query_object.status else True,
SysLogininfor.login_time.between(
datetime.combine(datetime.strptime(query_object.begin_time, '%Y-%m-%d'), time(00, 00, 00)),
datetime.combine(datetime.strptime(query_object.end_time, '%Y-%m-%d'), time(23, 59, 59)))
if query_object.begin_time and query_object.end_time else True) \
.distinct() \
query = (
select(SysLogininfor)
.where(
SysLogininfor.ipaddr.like(f'%{query_object.ipaddr}%') if query_object.ipaddr else True,
SysLogininfor.user_name.like(f'%{query_object.user_name}%') if query_object.user_name else True,
SysLogininfor.status == query_object.status if query_object.status else True,
SysLogininfor.login_time.between(
datetime.combine(datetime.strptime(query_object.begin_time, '%Y-%m-%d'), time(00, 00, 00)),
datetime.combine(datetime.strptime(query_object.end_time, '%Y-%m-%d'), time(23, 59, 59)),
)
if query_object.begin_time and query_object.end_time
else True,
)
.distinct()
.order_by(order_by_column)
)
login_log_list = await PageUtil.paginate(db, query, query_object.page_num, query_object.page_size, is_page)
return login_log_list
@ -140,10 +150,7 @@ class LoginLogDao:
:param login_log: 登录日志对象
:return:
"""
await db.execute(
delete(SysLogininfor)
.where(SysLogininfor.info_id.in_([login_log.info_id]))
)
await db.execute(delete(SysLogininfor).where(SysLogininfor.info_id.in_([login_log.info_id])))
@classmethod
async def clear_login_log_dao(cls, db: AsyncSession):
@ -152,6 +159,4 @@ class LoginLogDao:
:param db: orm对象
:return:
"""
await db.execute(
delete(SysLogininfor)
)
await db.execute(delete(SysLogininfor))

10
ruoyi-fastapi-backend/module_admin/entity/do/log_do.py

@ -1,12 +1,13 @@
from sqlalchemy import Column, Integer, String, DateTime, Text, BigInteger, Index
from config.database import Base
from datetime import datetime
from sqlalchemy import BigInteger, Column, DateTime, Index, Integer, String
from config.database import Base
class SysLogininfor(Base):
"""
系统访问记录
"""
__tablename__ = 'sys_logininfor'
info_id = Column(Integer, primary_key=True, autoincrement=True, comment='访问ID')
@ -15,7 +16,9 @@ class SysLogininfor(Base):
login_location = Column(String(255, collation='utf8_general_ci'), nullable=True, default='', comment='登录地点')
browser = Column(String(50, collation='utf8_general_ci'), nullable=True, default='', comment='浏览器类型')
os = Column(String(50, collation='utf8_general_ci'), nullable=True, default='', comment='操作系统')
status = Column(String(1, collation='utf8_general_ci'), nullable=True, default='0', comment='登录状态(0成功 1失败)')
status = Column(
String(1, collation='utf8_general_ci'), nullable=True, default='0', comment='登录状态(0成功 1失败)'
)
msg = Column(String(255, collation='utf8_general_ci'), nullable=True, default='', comment='提示消息')
login_time = Column(DateTime, nullable=True, default=datetime.now(), comment='访问时间')
@ -27,6 +30,7 @@ class SysOperLog(Base):
"""
操作日志记录
"""
__tablename__ = 'sys_oper_log'
oper_id = Column(BigInteger, primary_key=True, autoincrement=True, comment='日志主键')

34
ruoyi-fastapi-backend/module_admin/entity/vo/log_vo.py

@ -1,22 +1,29 @@
from datetime import datetime
from pydantic import BaseModel, ConfigDict, Field
from pydantic.alias_generators import to_camel
from typing import Union, Optional, List, Literal
from datetime import datetime
from module_admin.annotation.pydantic_annotation import as_query, as_form
from typing import Literal, Optional
from module_admin.annotation.pydantic_annotation import as_form, as_query
class OperLogModel(BaseModel):
"""
操作日志表对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
oper_id: Optional[int] = Field(default=None, description='日志主键')
title: Optional[str] = Field(default=None, description='模块标题')
business_type: Optional[Literal[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']] = Field(default=None, description='业务类型(0其它 1新增 2修改 3删除 4授权 5导出 6导入 7强退 8生成代码 9清空数据)')
business_type: Optional[Literal[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, '0', '1', '2', '3', '4', '5', '6', '7', '8', '9']] = (
Field(
default=None, description='业务类型(0其它 1新增 2修改 3删除 4授权 5导出 6导入 7强退 8生成代码 9清空数据)'
)
)
method: Optional[str] = Field(default=None, description='方法名称')
request_method: Optional[str] = Field(default=None, description='请求方式')
operator_type: Optional[Literal[0, 1, 2]] = Field(default=None, description='操作类别(0其它 1后台用户 2手机端用户)')
operator_type: Optional[Literal[0, 1, 2]] = Field(
default=None, description='操作类别(0其它 1后台用户 2手机端用户)'
)
oper_name: Optional[str] = Field(default=None, description='操作人员')
dept_name: Optional[str] = Field(default=None, description='部门名称')
oper_url: Optional[str] = Field(default=None, description='请求URL')
@ -34,6 +41,7 @@ class LogininforModel(BaseModel):
"""
登录日志表对应pydantic模型
"""
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
info_id: Optional[int] = Field(default=None, description='访问ID')
@ -51,8 +59,11 @@ class OperLogQueryModel(OperLogModel):
"""
操作日志管理不分页查询模型
"""
order_by_column: Optional[str] = Field(default=None, description='排序的字段名称')
is_asc: Optional[Literal['ascending', 'descending']] = Field(default=None, description='排序方式(ascending升序 descending降序)')
is_asc: Optional[Literal['ascending', 'descending']] = Field(
default=None, description='排序方式(ascending升序 descending降序)'
)
begin_time: Optional[str] = Field(default=None, description='开始时间')
end_time: Optional[str] = Field(default=None, description='结束时间')
@ -63,6 +74,7 @@ class OperLogPageQueryModel(OperLogQueryModel):
"""
操作日志管理分页查询模型
"""
page_num: int = Field(default=1, description='当前页码')
page_size: int = Field(default=10, description='每页记录数')
@ -71,6 +83,7 @@ class DeleteOperLogModel(BaseModel):
"""
删除操作日志模型
"""
model_config = ConfigDict(alias_generator=to_camel)
oper_ids: str = Field(description='需要删除的日志主键')
@ -80,19 +93,22 @@ class LoginLogQueryModel(LogininforModel):
"""
登录日志管理不分页查询模型
"""
order_by_column: Optional[str] = Field(default=None, description='排序的字段名称')
is_asc: Optional[Literal['ascending', 'descending']] = Field(default=None, description='排序方式(ascending升序 descending降序)')
is_asc: Optional[Literal['ascending', 'descending']] = Field(
default=None, description='排序方式(ascending升序 descending降序)'
)
begin_time: Optional[str] = Field(default=None, description='开始时间')
end_time: Optional[str] = Field(default=None, description='结束时间')
@as_query
@as_form
class LoginLogPageQueryModel(LoginLogQueryModel):
"""
登录日志管理分页查询模型
"""
page_num: int = Field(default=1, description='当前页码')
page_size: int = Field(default=10, description='每页记录数')
@ -101,6 +117,7 @@ class DeleteLoginLogModel(BaseModel):
"""
删除登录日志模型
"""
model_config = ConfigDict(alias_generator=to_camel)
info_ids: str = Field(description='需要删除的访问ID')
@ -110,6 +127,7 @@ class UnlockUser(BaseModel):
"""
解锁用户模型
"""
model_config = ConfigDict(alias_generator=to_camel)
user_name: str = Field(description='用户名称')

98
ruoyi-fastapi-backend/module_admin/service/log_service.py

@ -1,8 +1,20 @@
from module_admin.dao.log_dao import *
from module_admin.service.dict_service import Request, DictDataService
from module_admin.entity.vo.common_vo import CrudResponseModel
from fastapi import Request
from sqlalchemy.ext.asyncio import AsyncSession
from typing import List
from exceptions.exception import ServiceException
from utils.common_util import export_list2excel, CamelCaseUtil
from module_admin.dao.log_dao import LoginLogDao, OperationLogDao
from module_admin.entity.vo.common_vo import CrudResponseModel
from module_admin.entity.vo.log_vo import (
DeleteLoginLogModel,
DeleteOperLogModel,
LogininforModel,
LoginLogPageQueryModel,
OperLogModel,
OperLogPageQueryModel,
UnlockUser,
)
from module_admin.service.dict_service import DictDataService
from utils.common_util import export_list2excel
class OperationLogService:
@ -11,7 +23,9 @@ class OperationLogService:
"""
@classmethod
async def get_operation_log_list_services(cls, query_db: AsyncSession, query_object: OperLogPageQueryModel, is_page: bool = False):
async def get_operation_log_list_services(
cls, query_db: AsyncSession, query_object: OperLogPageQueryModel, is_page: bool = False
):
"""
获取操作日志列表信息service
:param query_db: orm对象
@ -85,27 +99,31 @@ class OperationLogService:
"""
# 创建一个映射字典,将英文键映射到中文键
mapping_dict = {
"operId": "日志编号",
"title": "系统模块",
"businessType": "操作类型",
"method": "方法名称",
"requestMethod": "请求方式",
"operName": "操作人员",
"deptName": "部门名称",
"operUrl": "请求URL",
"operIp": "操作地址",
"operLocation": "操作地点",
"operParam": "请求参数",
"jsonResult": "返回参数",
"status": "操作状态",
"error_msg": "错误消息",
"operTime": "操作日期",
"costTime": "消耗时间(毫秒)"
'operId': '日志编号',
'title': '系统模块',
'businessType': '操作类型',
'method': '方法名称',
'requestMethod': '请求方式',
'operName': '操作人员',
'deptName': '部门名称',
'operUrl': '请求URL',
'operIp': '操作地址',
'operLocation': '操作地点',
'operParam': '请求参数',
'jsonResult': '返回参数',
'status': '操作状态',
'error_msg': '错误消息',
'operTime': '操作日期',
'costTime': '消耗时间(毫秒)',
}
data = operation_log_list
operation_type_list = await DictDataService.query_dict_data_list_from_cache_services(request.app.state.redis, dict_type='sys_oper_type')
operation_type_option = [dict(label=item.get('dictLabel'), value=item.get('dictValue')) for item in operation_type_list]
operation_type_list = await DictDataService.query_dict_data_list_from_cache_services(
request.app.state.redis, dict_type='sys_oper_type'
)
operation_type_option = [
dict(label=item.get('dictLabel'), value=item.get('dictValue')) for item in operation_type_list
]
operation_type_option_dict = {item.get('value'): item for item in operation_type_option}
for item in data:
@ -116,7 +134,9 @@ class OperationLogService:
if str(item.get('businessType')) in operation_type_option_dict.keys():
item['businessType'] = operation_type_option_dict.get(str(item.get('businessType'))).get('label')
new_data = [{mapping_dict.get(key): value for key, value in item.items() if mapping_dict.get(key)} for item in data]
new_data = [
{mapping_dict.get(key): value for key, value in item.items() if mapping_dict.get(key)} for item in data
]
binary_data = export_list2excel(new_data)
return binary_data
@ -128,7 +148,9 @@ class LoginLogService:
"""
@classmethod
async def get_login_log_list_services(cls, query_db: AsyncSession, query_object: LoginLogPageQueryModel, is_page: bool = False):
async def get_login_log_list_services(
cls, query_db: AsyncSession, query_object: LoginLogPageQueryModel, is_page: bool = False
):
"""
获取登录日志列表信息service
:param query_db: orm对象
@ -194,9 +216,9 @@ class LoginLogService:
@classmethod
async def unlock_user_services(cls, request: Request, unlock_user: UnlockUser):
locked_user = await request.app.state.redis.get(f"account_lock:{unlock_user.user_name}")
locked_user = await request.app.state.redis.get(f'account_lock:{unlock_user.user_name}')
if locked_user:
await request.app.state.redis.delete(f"account_lock:{unlock_user.user_name}")
await request.app.state.redis.delete(f'account_lock:{unlock_user.user_name}')
return CrudResponseModel(is_success=True, message='解锁成功')
else:
raise ServiceException(message='该用户未锁定')
@ -210,15 +232,15 @@ class LoginLogService:
"""
# 创建一个映射字典,将英文键映射到中文键
mapping_dict = {
"infoId": "访问编号",
"userName": "用户名称",
"ipaddr": "登录地址",
"loginLocation": "登录地点",
"browser": "浏览器",
"os": "操作系统",
"status": "登录状态",
"msg": "操作信息",
"loginTime": "登录日期"
'infoId': '访问编号',
'userName': '用户名称',
'ipaddr': '登录地址',
'loginLocation': '登录地点',
'browser': '浏览器',
'os': '操作系统',
'status': '登录状态',
'msg': '操作信息',
'loginTime': '登录日期',
}
data = login_log_list
@ -228,7 +250,9 @@ class LoginLogService:
item['status'] = '成功'
else:
item['status'] = '失败'
new_data = [{mapping_dict.get(key): value for key, value in item.items() if mapping_dict.get(key)} for item in data]
new_data = [
{mapping_dict.get(key): value for key, value in item.items() if mapping_dict.get(key)} for item in data
]
binary_data = export_list2excel(new_data)
return binary_data

Loading…
Cancel
Save