from sqlalchemy import select from sqlalchemy.orm import Session from backend.app.models.business import LogisticsTask class LogisticsRepository: """物流任务数据访问层。""" def list_tasks_by_filters(self, session: Session, filters: dict) -> list[LogisticsTask]: stmt = select(LogisticsTask).where(LogisticsTask.deleted == 0) if filters.get("order_id") is not None: stmt = stmt.where(LogisticsTask.order_id == filters["order_id"]) if filters.get("task_no"): stmt = stmt.where(LogisticsTask.task_no.contains(filters["task_no"])) if filters.get("status"): stmt = stmt.where(LogisticsTask.status == filters["status"]) if filters.get("driver_id") is not None: stmt = stmt.where(LogisticsTask.driver_id == filters["driver_id"]) if filters.get("factory_id") is not None: stmt = stmt.where(LogisticsTask.factory_id == filters["factory_id"]) stmt = stmt.order_by(LogisticsTask.id.desc()) return list(session.execute(stmt).scalars()) def get_task(self, session: Session, task_id: int) -> LogisticsTask | None: stmt = select(LogisticsTask).where(LogisticsTask.id == task_id, LogisticsTask.deleted == 0) return session.execute(stmt).scalar_one_or_none() def get_task_by_order_id(self, session: Session, order_id: int) -> LogisticsTask | None: stmt = ( select(LogisticsTask) .where(LogisticsTask.order_id == order_id, LogisticsTask.deleted == 0) .order_by(LogisticsTask.id.desc()) ) return session.execute(stmt).scalar_one_or_none() def create_task(self, session: Session, payload: dict) -> LogisticsTask: task = LogisticsTask(**payload) session.add(task) session.flush() return task def update_task_status(self, session: Session, task: LogisticsTask, status: str) -> LogisticsTask: task.status = status session.add(task) session.flush() return task