dingdanquanliucheng/backend/app/api/salesman.py
taiyi 9b32afdbb4 为后端全部 86 个 Python 文件添加中文注释
覆盖所有模块:
- 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>
2026-05-30 07:23:33 +08:00

59 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

"""
业务员工作台路由模块
提供业务员个人工作台的概览数据接口,包括:
- 订单概览(最近订单列表)
- 提醒概览(待处理提醒列表)
- 汇总统计(订单数量、提醒数量)
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,
},
}
)