覆盖所有模块: - api 层:17 个路由文件,每个接口标注用途、参数、返回值、权限 - services 层:18 个服务文件,每个方法标注作用、参数、返回值、调用方 - repositories 层:13 个仓储文件,每个方法标注查询逻辑和被调用方 - schemas 层:11 个请求/响应体文件,每个字段标注业务含义 - core 层:config、security、exceptions、responses、error_codes - models 层:19 个 ORM 模型类,每个表标注业务含义和关联关系 - scripts:bootstrap_data、smoke_check - migrations:env.py 和版本迁移文件 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
59 lines
2.2 KiB
Python
59 lines
2.2 KiB
Python
"""
|
||
业务员工作台路由模块
|
||
|
||
提供业务员个人工作台的概览数据接口,包括:
|
||
- 订单概览(最近订单列表)
|
||
- 提醒概览(待处理提醒列表)
|
||
- 汇总统计(订单数量、提醒数量)
|
||
|
||
URL 前缀:/api/salesman
|
||
权限要求:salesman/admin 角色
|
||
"""
|
||
|
||
from fastapi import APIRouter, Depends
|
||
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.core.error_codes import ErrorCode
|
||
from backend.app.core.exceptions import AppException
|
||
from backend.app.schemas.common import success_payload
|
||
from backend.app.services.reminder_service import reminder_service
|
||
from backend.app.services.order_service import order_service
|
||
|
||
router = APIRouter(prefix="/api/salesman", tags=["salesman"])
|
||
|
||
|
||
@router.get("/dashboard")
|
||
def salesman_dashboard(
|
||
session: Session = Depends(get_db_session), # 数据库会话
|
||
current_user: dict = Depends(require_roles("salesman", "admin")), # 当前登录用户,仅salesman和admin可访问
|
||
_permission_user: dict = Depends(require_permissions("order:list")), # 权限校验:订单列表查看权限
|
||
) -> dict:
|
||
"""
|
||
获取业务员工作台概览数据
|
||
|
||
返回当前业务员的订单列表(最近20条)、提醒列表及汇总统计信息。
|
||
业务员只能查看自己的数据,管理员可查看所有。
|
||
|
||
返回值:
|
||
包含以下字段的字典:
|
||
- orders: 最近20条订单列表
|
||
- reminders: 提醒列表
|
||
- summary: 汇总数据(order_count 订单总数、reminder_count 提醒总数)
|
||
|
||
权限要求:salesman、admin 角色,需 order:list 权限
|
||
"""
|
||
orders = order_service.list_orders(session, {"salesman_id": current_user.get("user_id")})
|
||
reminders = reminder_service.list_reminders(session, {"receiver_user_id": current_user.get("user_id")})
|
||
return success_payload(
|
||
{
|
||
"orders": orders[:20],
|
||
"reminders": reminders.get("list", []) if isinstance(reminders, dict) else [],
|
||
"summary": {
|
||
"order_count": len(orders),
|
||
"reminder_count": len(reminders.get("list", [])) if isinstance(reminders, dict) else 0,
|
||
},
|
||
}
|
||
)
|