2026-05-30 07:23:33 +08:00
|
|
|
|
"""审计日志模块 Repository 层
|
|
|
|
|
|
|
|
|
|
|
|
负责审计日志的创建和查询操作,记录系统中各业务模块的操作行为。
|
|
|
|
|
|
被 AuditService(审计服务)调用。
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
2026-05-15 11:47:29 +08:00
|
|
|
|
from datetime import datetime
|
|
|
|
|
|
|
|
|
|
|
|
from sqlalchemy import select
|
|
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
|
|
|
|
|
|
|
|
from backend.app.models.system import AuditLog
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class AuditRepository:
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""审计日志数据仓储
|
|
|
|
|
|
|
|
|
|
|
|
封装审计日志的写入和多条件查询操作。
|
|
|
|
|
|
被 AuditService(审计服务)调用。
|
|
|
|
|
|
"""
|
|
|
|
|
|
|
2026-05-15 11:47:29 +08:00
|
|
|
|
def create_log(self, session: Session, payload: dict) -> AuditLog:
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""创建审计日志记录
|
|
|
|
|
|
|
|
|
|
|
|
参数:
|
|
|
|
|
|
session: 数据库会话
|
|
|
|
|
|
payload: 日志数据字典,包含 biz_type / biz_id / operator_name /
|
|
|
|
|
|
operate_type / operate_time / operate_content 等字段
|
|
|
|
|
|
|
|
|
|
|
|
返回:
|
|
|
|
|
|
新创建的审计日志对象
|
|
|
|
|
|
"""
|
2026-05-15 11:47:29 +08:00
|
|
|
|
log = AuditLog(**payload)
|
|
|
|
|
|
session.add(log)
|
|
|
|
|
|
session.flush()
|
|
|
|
|
|
return log
|
|
|
|
|
|
|
|
|
|
|
|
def list_logs(self, session: Session, filters: dict) -> list[AuditLog]:
|
2026-05-30 07:23:33 +08:00
|
|
|
|
"""查询审计日志列表
|
|
|
|
|
|
|
|
|
|
|
|
支持按业务类型、业务ID、操作人、操作类型、时间范围等条件过滤,
|
|
|
|
|
|
按 id 倒序返回。
|
|
|
|
|
|
|
|
|
|
|
|
参数:
|
|
|
|
|
|
session: 数据库会话
|
|
|
|
|
|
filters: 过滤条件字典,支持 biz_type / biz_id / operator_name /
|
|
|
|
|
|
operate_type / start_time / end_time(格式 "%Y-%m-%d %H:%M:%S")
|
|
|
|
|
|
|
|
|
|
|
|
返回:
|
|
|
|
|
|
符合条件的审计日志列表
|
|
|
|
|
|
"""
|
2026-05-15 11:47:29 +08:00
|
|
|
|
stmt = select(AuditLog)
|
|
|
|
|
|
|
|
|
|
|
|
if filters.get("biz_type"):
|
|
|
|
|
|
stmt = stmt.where(AuditLog.biz_type == filters["biz_type"])
|
|
|
|
|
|
if filters.get("biz_id") is not None:
|
|
|
|
|
|
stmt = stmt.where(AuditLog.biz_id == filters["biz_id"])
|
|
|
|
|
|
if filters.get("operator_name"):
|
|
|
|
|
|
stmt = stmt.where(AuditLog.operator_name.contains(filters["operator_name"]))
|
|
|
|
|
|
if filters.get("operate_type"):
|
|
|
|
|
|
stmt = stmt.where(AuditLog.operate_type == filters["operate_type"])
|
|
|
|
|
|
if filters.get("start_time"):
|
|
|
|
|
|
stmt = stmt.where(AuditLog.operate_time >= datetime.strptime(filters["start_time"], "%Y-%m-%d %H:%M:%S"))
|
|
|
|
|
|
if filters.get("end_time"):
|
|
|
|
|
|
stmt = stmt.where(AuditLog.operate_time <= datetime.strptime(filters["end_time"], "%Y-%m-%d %H:%M:%S"))
|
|
|
|
|
|
|
|
|
|
|
|
stmt = stmt.order_by(AuditLog.id.desc())
|
|
|
|
|
|
return list(session.execute(stmt).scalars())
|