#!/usr/bin/env python # -*- coding: utf-8 -*- """ 用户操作模型模块 包含用户操作记录相关的数据模型 """ import enum from sqlalchemy import Column, Integer, String, Text, DateTime, Enum, ForeignKey, JSON, Boolean from sqlalchemy.orm import relationship from data.models.base import BaseModel class OperationType(enum.Enum): """ 操作类型枚举 """ CREATE = 'create' # 创建 UPDATE = 'update' # 更新 DELETE = 'delete' # 删除 ENABLE = 'enable' # 启用 DISABLE = 'disable' # 禁用 IMPORT = 'import' # 导入 EXPORT = 'export' # 导出 EXECUTE = 'execute' # 执行 CANCEL = 'cancel' # 取消 PAUSE = 'pause' # 暂停 RESUME = 'resume' # 恢复 class TargetType(enum.Enum): """ 操作目标类型枚举 """ TASK = 'task' # 任务 TASK_VERSION = 'task_version' # 任务版本 SUBTASK = 'subtask' # 子任务 COMPONENT = 'component' # 组件 class UserOperation(BaseModel): """ 用户操作模型 记录用户对系统的操作 """ __tablename__ = 'user_operations' user_id = Column(String(100), nullable=False, comment='用户ID') user_name = Column(String(100), nullable=True, comment='用户名称') operation_type = Column(Enum(OperationType), nullable=False, comment='操作类型') target_type = Column(Enum(TargetType), nullable=False, comment='目标类型') target_id = Column(Integer, nullable=False, comment='目标ID') target_name = Column(String(100), nullable=True, comment='目标名称') operation_time = Column(DateTime, nullable=False, comment='操作时间') operation_ip = Column(String(50), nullable=True, comment='操作IP') operation_details = Column(JSON, nullable=True, comment='操作详情(JSON格式)') operation_result = Column(Boolean, nullable=False, default=True, comment='操作结果(成功/失败)') error_message = Column(Text, nullable=True, comment='错误信息') def __repr__(self): return f"" @classmethod def get_by_user(cls, user_id, page=1, per_page=20): """ 获取用户的操作记录 """ return cls.query.filter( cls.user_id == user_id, cls.is_deleted == False ).order_by(cls.operation_time.desc()).paginate(page=page, per_page=per_page) @classmethod def get_by_target(cls, target_type, target_id, page=1, per_page=20): """ 获取目标对象的操作记录 """ return cls.query.filter( cls.target_type == target_type, cls.target_id == target_id, cls.is_deleted == False ).order_by(cls.operation_time.desc()).paginate(page=page, per_page=per_page) @classmethod def log_operation(cls, user_id, user_name, operation_type, target_type, target_id, target_name=None, operation_details=None, operation_ip=None, operation_result=True, error_message=None): """ 记录用户操作 """ import datetime from config.database import db_session operation = cls( user_id=user_id, user_name=user_name, operation_type=operation_type, target_type=target_type, target_id=target_id, target_name=target_name, operation_time=datetime.datetime.now(), operation_ip=operation_ip, operation_details=operation_details, operation_result=operation_result, error_message=error_message ) db_session.add(operation) db_session.commit() return operation