Fix API compatibility and add user/role/permission and asset import/export
This commit is contained in:
211
backend_new/app/api/v1/statistics.py
Normal file
211
backend_new/app/api/v1/statistics.py
Normal file
@@ -0,0 +1,211 @@
|
||||
"""
|
||||
统计分析API路由
|
||||
"""
|
||||
from typing import Optional, Dict, Any
|
||||
from datetime import date
|
||||
from fastapi import APIRouter, Depends, Query
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
from app.core.deps import get_db, get_current_user
|
||||
from app.services.statistics_service import statistics_service
|
||||
|
||||
router = APIRouter()
|
||||
|
||||
|
||||
@router.get("/overview", response_model=Dict[str, Any])
|
||||
async def get_statistics_overview(
|
||||
organization_id: Optional[int] = Query(None, description="网点ID筛选"),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
current_user = Depends(get_current_user)
|
||||
):
|
||||
"""
|
||||
获取总览统计
|
||||
|
||||
- **organization_id**: 网点ID筛选
|
||||
|
||||
返回资产总数、总价值、各状态数量、采购统计、网点数等概览信息
|
||||
"""
|
||||
return await statistics_service.get_overview(db, organization_id=organization_id)
|
||||
|
||||
|
||||
@router.get("/assets/purchase", response_model=Dict[str, Any])
|
||||
async def get_purchase_statistics(
|
||||
start_date: Optional[date] = Query(None, description="开始日期"),
|
||||
end_date: Optional[date] = Query(None, description="结束日期"),
|
||||
organization_id: Optional[int] = Query(None, description="网点ID筛选"),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
current_user = Depends(get_current_user)
|
||||
):
|
||||
"""
|
||||
获取采购统计
|
||||
|
||||
- **start_date**: 开始日期
|
||||
- **end_date**: 结束日期
|
||||
- **organization_id**: 网点ID筛选
|
||||
|
||||
返回采购数量、采购金额、月度趋势、供应商分布等统计信息
|
||||
"""
|
||||
return await statistics_service.get_purchase_statistics(
|
||||
db,
|
||||
start_date=start_date,
|
||||
end_date=end_date,
|
||||
organization_id=organization_id
|
||||
)
|
||||
|
||||
|
||||
@router.get("/assets/depreciation", response_model=Dict[str, Any])
|
||||
async def get_depreciation_statistics(
|
||||
organization_id: Optional[int] = Query(None, description="网点ID筛选"),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
current_user = Depends(get_current_user)
|
||||
):
|
||||
"""
|
||||
获取折旧统计
|
||||
|
||||
- **organization_id**: 网点ID筛选
|
||||
|
||||
返回折旧金额、折旧率、分类折旧等统计信息
|
||||
"""
|
||||
return await statistics_service.get_depreciation_statistics(db, organization_id=organization_id)
|
||||
|
||||
|
||||
@router.get("/assets/value", response_model=Dict[str, Any])
|
||||
async def get_value_statistics(
|
||||
organization_id: Optional[int] = Query(None, description="网点ID筛选"),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
current_user = Depends(get_current_user)
|
||||
):
|
||||
"""
|
||||
获取价值统计
|
||||
|
||||
- **organization_id**: 网点ID筛选
|
||||
|
||||
返回资产总价值、净值、折旧、分类价值、网点价值、高价值资产等统计信息
|
||||
"""
|
||||
return await statistics_service.get_value_statistics(db, organization_id=organization_id)
|
||||
|
||||
|
||||
@router.get("/assets/trend", response_model=Dict[str, Any])
|
||||
async def get_trend_analysis(
|
||||
start_date: Optional[date] = Query(None, description="开始日期"),
|
||||
end_date: Optional[date] = Query(None, description="结束日期"),
|
||||
organization_id: Optional[int] = Query(None, description="网点ID筛选"),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
current_user = Depends(get_current_user)
|
||||
):
|
||||
"""
|
||||
获取趋势分析
|
||||
|
||||
- **start_date**: 开始日期
|
||||
- **end_date**: 结束日期
|
||||
- **organization_id**: 网点ID筛选
|
||||
|
||||
返回资产数量趋势、价值趋势、采购趋势、维修趋势、调拨趋势等分析数据
|
||||
"""
|
||||
return await statistics_service.get_trend_analysis(
|
||||
db,
|
||||
start_date=start_date,
|
||||
end_date=end_date,
|
||||
organization_id=organization_id
|
||||
)
|
||||
|
||||
|
||||
@router.get("/maintenance/summary", response_model=Dict[str, Any])
|
||||
async def get_maintenance_summary(
|
||||
start_date: Optional[date] = Query(None, description="开始日期"),
|
||||
end_date: Optional[date] = Query(None, description="结束日期"),
|
||||
organization_id: Optional[int] = Query(None, description="网点ID筛选"),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
current_user = Depends(get_current_user)
|
||||
):
|
||||
"""
|
||||
获取维修汇总
|
||||
|
||||
- **start_date**: 开始日期
|
||||
- **end_date**: 结束日期
|
||||
- **organization_id**: 网点ID筛选
|
||||
|
||||
返回维修次数、维修费用、状态分布等统计信息
|
||||
"""
|
||||
return await statistics_service.get_maintenance_statistics(
|
||||
db,
|
||||
start_date=start_date,
|
||||
end_date=end_date,
|
||||
organization_id=organization_id
|
||||
)
|
||||
|
||||
|
||||
@router.get("/allocation/summary", response_model=Dict[str, Any])
|
||||
async def get_allocation_summary(
|
||||
start_date: Optional[date] = Query(None, description="开始日期"),
|
||||
end_date: Optional[date] = Query(None, description="结束日期"),
|
||||
organization_id: Optional[int] = Query(None, description="网点ID筛选"),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
current_user = Depends(get_current_user)
|
||||
):
|
||||
"""
|
||||
获取分配汇总
|
||||
|
||||
- **start_date**: 开始日期
|
||||
- **end_date**: 结束日期
|
||||
- **organization_id**: 网点ID筛选
|
||||
|
||||
返回分配次数、状态分布、网点分配统计等信息
|
||||
"""
|
||||
return await statistics_service.get_allocation_statistics(
|
||||
db,
|
||||
start_date=start_date,
|
||||
end_date=end_date,
|
||||
organization_id=organization_id
|
||||
)
|
||||
|
||||
|
||||
@router.post("/export")
|
||||
async def export_statistics(
|
||||
report_type: str = Query(..., description="报表类型"),
|
||||
start_date: Optional[date] = Query(None, description="开始日期"),
|
||||
end_date: Optional[date] = Query(None, description="结束日期"),
|
||||
organization_id: Optional[int] = Query(None, description="网点ID"),
|
||||
format: str = Query("xlsx", description="导出格式"),
|
||||
db: AsyncSession = Depends(get_db),
|
||||
current_user = Depends(get_current_user)
|
||||
):
|
||||
"""
|
||||
导出统计报表
|
||||
|
||||
- **report_type**: 报表类型(overview/purchase/depreciation/value/trend/maintenance/allocation)
|
||||
- **start_date**: 开始日期
|
||||
- **end_date**: 结束日期
|
||||
- **organization_id**: 网点ID
|
||||
- **format**: 导出格式(xlsx/csv/pdf)
|
||||
|
||||
返回导出文件信息
|
||||
"""
|
||||
# 根据报表类型获取数据
|
||||
if report_type == "overview":
|
||||
data = await statistics_service.get_overview(db, organization_id)
|
||||
elif report_type == "purchase":
|
||||
data = await statistics_service.get_purchase_statistics(db, start_date, end_date, organization_id)
|
||||
elif report_type == "depreciation":
|
||||
data = await statistics_service.get_depreciation_statistics(db, organization_id)
|
||||
elif report_type == "value":
|
||||
data = await statistics_service.get_value_statistics(db, organization_id)
|
||||
elif report_type == "trend":
|
||||
data = await statistics_service.get_trend_analysis(db, start_date, end_date, organization_id)
|
||||
elif report_type == "maintenance":
|
||||
data = await statistics_service.get_maintenance_statistics(db, start_date, end_date, organization_id)
|
||||
elif report_type == "allocation":
|
||||
data = await statistics_service.get_allocation_statistics(db, start_date, end_date, organization_id)
|
||||
else:
|
||||
raise ValueError(f"不支持的报表类型: {report_type}")
|
||||
|
||||
# TODO: 实现导出逻辑
|
||||
# 1. 生成Excel/CSV/PDF文件
|
||||
# 2. 保存到文件系统
|
||||
# 3. 返回文件URL
|
||||
|
||||
return {
|
||||
"message": "导出功能待实现",
|
||||
"data": data,
|
||||
"report_type": report_type,
|
||||
"format": format
|
||||
}
|
||||
Reference in New Issue
Block a user