Fix API compatibility and add user/role/permission and asset import/export

This commit is contained in:
2026-01-25 23:36:23 +08:00
commit 501d11e14e
371 changed files with 68853 additions and 0 deletions

View File

@@ -0,0 +1,126 @@
"""
操作日志相关的Pydantic Schema
"""
from typing import Optional, List, Dict, Any
from datetime import datetime
from pydantic import BaseModel, Field
from enum import Enum
class OperationModuleEnum(str, Enum):
"""操作模块枚举"""
AUTH = "auth" # 认证模块
ASSET = "asset" # 资产模块
DEVICE_TYPE = "device_type" # 设备类型模块
ORGANIZATION = "organization" # 机构模块
BRAND_SUPPLIER = "brand_supplier" # 品牌供应商模块
ALLOCATION = "allocation" # 调拨模块
MAINTENANCE = "maintenance" # 维修模块
SYSTEM_CONFIG = "system_config" # 系统配置模块
USER = "user" # 用户模块
STATISTICS = "statistics" # 统计模块
class OperationTypeEnum(str, Enum):
"""操作类型枚举"""
CREATE = "create" # 创建
UPDATE = "update" # 更新
DELETE = "delete" # 删除
QUERY = "query" # 查询
EXPORT = "export" # 导出
IMPORT = "import" # 导入
LOGIN = "login" # 登录
LOGOUT = "logout" # 登出
APPROVE = "approve" # 审批
REJECT = "reject" # 拒绝
ASSIGN = "assign" # 分配
TRANSFER = "transfer" # 调拨
SCRAP = "scrap" # 报废
class OperationResultEnum(str, Enum):
"""操作结果枚举"""
SUCCESS = "success"
FAILED = "failed"
class OperationLogBase(BaseModel):
"""操作日志基础Schema"""
operator_id: int = Field(..., description="操作人ID")
operator_name: str = Field(..., min_length=1, max_length=100, description="操作人姓名")
operator_ip: Optional[str] = Field(None, max_length=50, description="操作人IP")
module: OperationModuleEnum = Field(..., description="模块名称")
operation_type: OperationTypeEnum = Field(..., description="操作类型")
method: str = Field(..., min_length=1, max_length=10, description="请求方法")
url: str = Field(..., min_length=1, max_length=500, description="请求URL")
params: Optional[str] = Field(None, description="请求参数")
result: OperationResultEnum = Field(default=OperationResultEnum.SUCCESS, description="操作结果")
error_msg: Optional[str] = Field(None, description="错误信息")
duration: Optional[int] = Field(None, ge=0, description="执行时长(毫秒)")
user_agent: Optional[str] = Field(None, max_length=500, description="用户代理")
extra_data: Optional[Dict[str, Any]] = Field(None, description="额外数据")
class OperationLogCreate(OperationLogBase):
"""创建操作日志Schema"""
pass
class OperationLogInDB(BaseModel):
"""数据库中的操作日志Schema"""
id: int
operator_id: int
operator_name: str
operator_ip: Optional[str]
module: str
operation_type: str
method: str
url: str
params: Optional[str]
result: str
error_msg: Optional[str]
duration: Optional[int]
user_agent: Optional[str]
extra_data: Optional[Dict[str, Any]]
created_at: datetime
class Config:
from_attributes = True
class OperationLogResponse(OperationLogInDB):
"""操作日志响应Schema"""
pass
class OperationLogQueryParams(BaseModel):
"""操作日志查询参数"""
operator_id: Optional[int] = Field(None, description="操作人ID")
operator_name: Optional[str] = Field(None, description="操作人姓名")
module: Optional[OperationModuleEnum] = Field(None, description="模块名称")
operation_type: Optional[OperationTypeEnum] = Field(None, description="操作类型")
result: Optional[OperationResultEnum] = Field(None, description="操作结果")
start_time: Optional[datetime] = Field(None, description="开始时间")
end_time: Optional[datetime] = Field(None, description="结束时间")
keyword: Optional[str] = Field(None, description="关键词")
page: int = Field(default=1, ge=1, description="页码")
page_size: int = Field(default=20, ge=1, le=100, description="每页数量")
class OperationLogStatistics(BaseModel):
"""操作日志统计Schema"""
total_count: int = Field(..., description="总操作次数")
success_count: int = Field(..., description="成功次数")
failed_count: int = Field(..., description="失败次数")
today_count: int = Field(..., description="今日操作次数")
module_distribution: List[Dict[str, Any]] = Field(default_factory=list, description="模块分布")
operation_distribution: List[Dict[str, Any]] = Field(default_factory=list, description="操作类型分布")
class OperationLogExport(BaseModel):
"""操作日志导出Schema"""
start_time: Optional[datetime] = Field(None, description="开始时间")
end_time: Optional[datetime] = Field(None, description="结束时间")
operator_id: Optional[int] = Field(None, description="操作人ID")
module: Optional[str] = Field(None, description="模块名称")
operation_type: Optional[str] = Field(None, description="操作类型")