- reports API 两个 GET 接口 require_roles 加入 kuaiji - 新增 migration 为 kuaiji 角色补上报表统计/报表核对的 sys_role_menu 记录 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
140 lines
5.6 KiB
Python
140 lines
5.6 KiB
Python
"""
|
||
数据报表路由模块
|
||
|
||
提供业务数据统计与导出接口,包括:
|
||
- 业绩统计报表(支持按月/自定义时间段,可按产品分类筛选)
|
||
- 业绩报表导出(支持CSV格式)
|
||
|
||
URL 前缀:/api/reports
|
||
权限要求:manager/admin 角色
|
||
"""
|
||
|
||
from fastapi import APIRouter, Depends, Query
|
||
from sqlalchemy.orm import Session
|
||
|
||
from backend.app.api.deps import require_permissions, require_roles
|
||
from backend.app.db import get_db_session
|
||
from backend.app.schemas.common import success_payload
|
||
from backend.app.services.report_service import report_service
|
||
|
||
router = APIRouter(prefix="/api/reports", tags=["reports"])
|
||
|
||
|
||
@router.get("/performance")
|
||
def performance_report(
|
||
stat_type: str = Query(default="month"), # 统计类型:month(按月)/ custom(自定义时间段)
|
||
start_date: str | None = Query(default=None), # 自定义开始日期,格式 YYYY-MM-DD
|
||
end_date: str | None = Query(default=None), # 自定义结束日期,格式 YYYY-MM-DD
|
||
category_id: int | None = Query(default=None, gt=0), # 产品分类ID筛选,必须大于0
|
||
order_type: str | None = Query(default=None), # 订单类型筛选(industry/daily)
|
||
exclude_ecommerce: bool = Query(default=False), # 是否排除电商渠道订单
|
||
salesman_id: int | None = Query(default=None), # 业务员ID筛选
|
||
session: Session = Depends(get_db_session), # 数据库会话
|
||
current_user: dict = Depends(require_roles("manager", "admin", "kuaiji")), # 当前登录用户,manager/admin/会计
|
||
_permission_user: dict = Depends(require_permissions("report:performance:view")), # 权限校验:业绩报表查看权限
|
||
) -> dict:
|
||
"""
|
||
获取业绩统计报表
|
||
|
||
根据统计类型(按月/自定义时间段)和可选的分类筛选,返回业绩统计数据。
|
||
|
||
请求参数:
|
||
stat_type: 统计类型,month 或 custom(默认 month)
|
||
start_date: 开始日期,仅 custom 时有效(可选)
|
||
end_date: 结束日期,仅 custom 时有效(可选)
|
||
category_id: 产品分类ID,可选筛选条件
|
||
exclude_ecommerce: 是否排除电商订单(默认 False)
|
||
|
||
返回值:
|
||
业绩统计数据,包含各维度的销售汇总
|
||
|
||
权限要求:manager、admin、kuaiji 角色,需 report:performance:view 权限
|
||
"""
|
||
return success_payload(
|
||
report_service.performance_report(
|
||
{
|
||
"stat_type": stat_type,
|
||
"start_date": start_date,
|
||
"end_date": end_date,
|
||
"category_id": category_id,
|
||
"order_type": order_type,
|
||
"exclude_ecommerce": exclude_ecommerce,
|
||
"salesman_id": salesman_id,
|
||
},
|
||
session,
|
||
)
|
||
)
|
||
|
||
|
||
@router.get("/audit")
|
||
def report_audit(
|
||
stat_type: str = Query(default="month"),
|
||
start_date: str | None = Query(default=None),
|
||
end_date: str | None = Query(default=None),
|
||
category_id: int | None = Query(default=None, gt=0),
|
||
exclude_ecommerce: bool = Query(default=False),
|
||
salesman_id: int | None = Query(default=None),
|
||
session: Session = Depends(get_db_session),
|
||
current_user: dict = Depends(require_roles("manager", "admin", "kuaiji")),
|
||
_permission_user: dict = Depends(require_permissions("report:performance:view")),
|
||
) -> dict:
|
||
"""报表核对接口,返回基础数据 + 动态异常检测结果。"""
|
||
return success_payload(
|
||
report_service.audit_report(
|
||
{
|
||
"stat_type": stat_type,
|
||
"start_date": start_date,
|
||
"end_date": end_date,
|
||
"category_id": category_id,
|
||
"exclude_ecommerce": exclude_ecommerce,
|
||
"salesman_id": salesman_id,
|
||
},
|
||
session,
|
||
)
|
||
)
|
||
|
||
|
||
@router.get("/performance/export")
|
||
def export_performance_report(
|
||
stat_type: str = Query(default="month"), # 统计类型:month 或 custom
|
||
start_date: str | None = Query(default=None), # 自定义开始日期
|
||
end_date: str | None = Query(default=None), # 自定义结束日期
|
||
category_id: int | None = Query(default=None, gt=0), # 产品分类ID
|
||
exclude_ecommerce: bool = Query(default=False), # 是否排除电商渠道订单
|
||
export_format: str = Query(default="csv"), # 导出格式,默认 csv
|
||
session: Session = Depends(get_db_session), # 数据库会话
|
||
current_user: dict = Depends(require_roles("manager", "admin")), # 当前登录用户
|
||
_permission_user: dict = Depends(require_permissions("report:performance:export")), # 权限校验:业绩报表导出权限
|
||
) -> dict:
|
||
"""
|
||
导出业绩统计报表
|
||
|
||
将业绩统计数据导出为文件,支持CSV等格式。参数与业绩查询接口一致,额外支持导出格式选择。
|
||
|
||
请求参数:
|
||
stat_type: 统计类型(默认 month)
|
||
start_date: 开始日期(custom 模式可选)
|
||
end_date: 结束日期(custom 模式可选)
|
||
category_id: 产品分类ID(可选)
|
||
exclude_ecommerce: 是否排除电商订单(默认 False)
|
||
export_format: 导出格式,默认 csv
|
||
|
||
返回值:
|
||
导出文件的下载链接或文件内容
|
||
|
||
权限要求:manager、admin 角色,需 report:performance:export 权限
|
||
"""
|
||
return success_payload(
|
||
report_service.export_performance_report(
|
||
{
|
||
"stat_type": stat_type,
|
||
"start_date": start_date,
|
||
"end_date": end_date,
|
||
"category_id": category_id,
|
||
"exclude_ecommerce": exclude_ecommerce,
|
||
"export_format": export_format,
|
||
},
|
||
session,
|
||
)
|
||
)
|