Fix API compatibility and add user/role/permission and asset import/export
This commit is contained in:
108
backend/app/schemas/statistics.py
Normal file
108
backend/app/schemas/statistics.py
Normal file
@@ -0,0 +1,108 @@
|
||||
"""
|
||||
统计分析相关的Pydantic Schema
|
||||
"""
|
||||
from typing import Optional, List, Dict, Any
|
||||
from datetime import datetime, date
|
||||
from decimal import Decimal
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class StatisticsOverview(BaseModel):
|
||||
"""总览统计Schema"""
|
||||
total_assets: int = Field(..., description="资产总数")
|
||||
total_value: Decimal = Field(..., description="资产总价值")
|
||||
in_stock_count: int = Field(..., description="库存中数量")
|
||||
in_use_count: int = Field(..., description="使用中数量")
|
||||
maintenance_count: int = Field(..., description="维修中数量")
|
||||
scrapped_count: int = Field(..., description="已报废数量")
|
||||
today_purchase_count: int = Field(..., description="今日采购数量")
|
||||
this_month_purchase_count: int = Field(..., description="本月采购数量")
|
||||
organization_count: int = Field(..., description="机构网点数")
|
||||
supplier_count: int = Field(..., description="供应商数")
|
||||
|
||||
|
||||
class PurchaseStatistics(BaseModel):
|
||||
"""采购统计Schema"""
|
||||
total_purchase_count: int = Field(..., description="总采购数量")
|
||||
total_purchase_value: Decimal = Field(..., description="总采购金额")
|
||||
monthly_trend: List[Dict[str, Any]] = Field(default_factory=list, description="月度趋势")
|
||||
supplier_distribution: List[Dict[str, Any]] = Field(default_factory=list, description="供应商分布")
|
||||
category_distribution: List[Dict[str, Any]] = Field(default_factory=list, description="分类分布")
|
||||
|
||||
|
||||
class DepreciationStatistics(BaseModel):
|
||||
"""折旧统计Schema"""
|
||||
total_depreciation_value: Decimal = Field(..., description="总折旧金额")
|
||||
average_depreciation_rate: Decimal = Field(..., description="平均折旧率")
|
||||
depreciation_by_category: List[Dict[str, Any]] = Field(default_factory=list, description="分类折旧")
|
||||
assets_near_end_life: List[Dict[str, Any]] = Field(default_factory=list, description="接近使用年限的资产")
|
||||
|
||||
|
||||
class ValueStatistics(BaseModel):
|
||||
"""价值统计Schema"""
|
||||
total_value: Decimal = Field(..., description="资产总价值")
|
||||
net_value: Decimal = Field(..., description="资产净值")
|
||||
depreciation_value: Decimal = Field(..., description="累计折旧")
|
||||
value_by_category: List[Dict[str, Any]] = Field(default_factory=list, description="分类价值")
|
||||
value_by_organization: List[Dict[str, Any]] = Field(default_factory=list, description="网点价值")
|
||||
high_value_assets: List[Dict[str, Any]] = Field(default_factory=list, description="高价值资产")
|
||||
|
||||
|
||||
class TrendAnalysis(BaseModel):
|
||||
"""趋势分析Schema"""
|
||||
asset_trend: List[Dict[str, Any]] = Field(default_factory=list, description="资产数量趋势")
|
||||
value_trend: List[Dict[str, Any]] = Field(default_factory=list, description="资产价值趋势")
|
||||
purchase_trend: List[Dict[str, Any]] = Field(default_factory=list, description="采购趋势")
|
||||
maintenance_trend: List[Dict[str, Any]] = Field(default_factory=list, description="维修趋势")
|
||||
allocation_trend: List[Dict[str, Any]] = Field(default_factory=list, description="调拨趋势")
|
||||
|
||||
|
||||
class MaintenanceStatistics(BaseModel):
|
||||
"""维修统计Schema"""
|
||||
total_maintenance_count: int = Field(..., description="总维修次数")
|
||||
total_maintenance_cost: Decimal = Field(..., description="总维修费用")
|
||||
pending_count: int = Field(..., description="待维修数量")
|
||||
in_progress_count: int = Field(..., description="维修中数量")
|
||||
completed_count: int = Field(..., description="已完成数量")
|
||||
monthly_trend: List[Dict[str, Any]] = Field(default_factory=list, description="月度趋势")
|
||||
type_distribution: List[Dict[str, Any]] = Field(default_factory=list, description="维修类型分布")
|
||||
cost_by_category: List[Dict[str, Any]] = Field(default_factory=list, description="分类维修费用")
|
||||
|
||||
|
||||
class AllocationStatistics(BaseModel):
|
||||
"""分配统计Schema"""
|
||||
total_allocation_count: int = Field(..., description="总分配次数")
|
||||
pending_count: int = Field(..., description="待审批数量")
|
||||
approved_count: int = Field(..., description="已批准数量")
|
||||
rejected_count: int = Field(..., description="已拒绝数量")
|
||||
monthly_trend: List[Dict[str, Any]] = Field(default_factory=list, description="月度趋势")
|
||||
by_organization: List[Dict[str, Any]] = Field(default_factory=list, description="网点分配统计")
|
||||
transfer_statistics: List[Dict[str, Any]] = Field(default_factory=list, description="调拨统计")
|
||||
|
||||
|
||||
class StatisticsQueryParams(BaseModel):
|
||||
"""统计查询参数"""
|
||||
start_date: Optional[date] = Field(None, description="开始日期")
|
||||
end_date: Optional[date] = Field(None, description="结束日期")
|
||||
organization_id: Optional[int] = Field(None, description="网点ID")
|
||||
device_type_id: Optional[int] = Field(None, description="设备类型ID")
|
||||
group_by: Optional[str] = Field(None, description="分组字段")
|
||||
|
||||
|
||||
class ExportStatisticsRequest(BaseModel):
|
||||
"""导出统计请求"""
|
||||
report_type: str = Field(..., description="报表类型")
|
||||
start_date: Optional[date] = Field(None, description="开始日期")
|
||||
end_date: Optional[date] = Field(None, description="结束日期")
|
||||
organization_id: Optional[int] = Field(None, description="网点ID")
|
||||
device_type_id: Optional[int] = Field(None, description="设备类型ID")
|
||||
format: str = Field(default="xlsx", description="导出格式")
|
||||
include_charts: bool = Field(default=False, description="是否包含图表")
|
||||
|
||||
|
||||
class ExportStatisticsResponse(BaseModel):
|
||||
"""导出统计响应"""
|
||||
file_url: str = Field(..., description="文件URL")
|
||||
file_name: str = Field(..., description="文件名")
|
||||
file_size: int = Field(..., description="文件大小(字节)")
|
||||
record_count: int = Field(..., description="记录数量")
|
||||
Reference in New Issue
Block a user