50 lines
2.2 KiB
Python
50 lines
2.2 KiB
Python
"""现场人员独立只读入口;固定现场日历,不授予调度维护和主数据访问权限。"""
|
|
from typing import Optional
|
|
|
|
from fastapi import APIRouter, Depends, HTTPException, Query
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.core import menu_guard
|
|
from app.core.database import get_db
|
|
from app.core.db_auth import DbUserContext, get_db_current_user
|
|
from app.core.tenant_context import get_tenant_no
|
|
from app.services import pl_dispatch_calendar_service as svc
|
|
from app.services.web_auth_roles import iter_user_menu_perm_codes
|
|
|
|
|
|
def require_site_calendar_permission(
|
|
current_user: dict = Depends(menu_guard.require_admin_or_super_admin),
|
|
db: Session = Depends(get_db),
|
|
):
|
|
if current_user.get("role") != menu_guard.SUPER_ADMIN_ROLE:
|
|
tenant = get_tenant_no(db, current_user)
|
|
codes = iter_user_menu_perm_codes(db, current_user.get("user_id"), tenant)
|
|
if "mini:pl:site-dispatch-calendar:list" not in codes:
|
|
raise HTTPException(status_code=403, detail="无现场派车日历访问权限")
|
|
return current_user
|
|
|
|
|
|
router = APIRouter(
|
|
prefix="/transport/site-dispatch-calendar", tags=["现场派车日历(只读)"],
|
|
dependencies=[Depends(require_site_calendar_permission)],
|
|
)
|
|
|
|
|
|
@router.get("")
|
|
def list_records(month: str = Query(...), vehicle_id: Optional[str] = Query(None, alias="vehicleId"),
|
|
page: int = Query(1, ge=1), page_size: int = Query(500, alias="pageSize", ge=1, le=500),
|
|
db: Session = Depends(get_db), user: DbUserContext = Depends(get_db_current_user)):
|
|
tenant = get_tenant_no(db, user.to_tenant_user_dict())
|
|
return svc.list_records(db, tenant, user, month=month, vehicle_id=vehicle_id,
|
|
calendar_kind="site", page=page, page_size=page_size)
|
|
|
|
|
|
@router.get("/{record_id}")
|
|
def get_record(record_id: str, db: Session = Depends(get_db),
|
|
user: DbUserContext = Depends(get_db_current_user)):
|
|
tenant = get_tenant_no(db, user.to_tenant_user_dict())
|
|
row = svc.get_record(db, tenant, user, record_id)
|
|
if row.calendar_kind != "site":
|
|
raise HTTPException(status_code=404, detail="派车记录不存在或无权访问")
|
|
return svc._row_to_dict(row)
|