From 2f2b54f092f72a026520a16258b602e226b61808 Mon Sep 17 00:00:00 2001 From: aaron <> Date: Mon, 13 Jan 2025 18:09:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=8E=A5=E5=8D=95=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/endpoints/order.py | 39 +++++++++++++++++++++++++++++++++++++- app/models/order.py | 2 ++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/app/api/endpoints/order.py b/app/api/endpoints/order.py index c212c14..71c0c6a 100644 --- a/app/api/endpoints/order.py +++ b/app/api/endpoints/order.py @@ -327,4 +327,41 @@ async def get_delivery_orders( return success_response(data={ "total": total, "items": [OrderInfo.model_validate(o) for o in orders] - }) \ No newline at end of file + }) + +@router.post("/{orderid}/accept", response_model=ResponseModel) +async def accept_order( + orderid: str, + db: Session = Depends(get_db), + deliveryman: UserDB = Depends(get_deliveryman_user) +): + """接单(仅配送员可用)""" + # 查询订单 + order = db.query(ShippingOrderDB).filter( + ShippingOrderDB.orderid == orderid + ).first() + + if not order: + return error_response(code=404, message="订单不存在") + + # 检查订单状态 + if order.status != OrderStatus.CREATED: + return error_response(code=400, message="只能接待新创建的订单") + + # 检查订单是否已被接单 + if order.deliveryman_user_id is not None: + return error_response(code=400, message="订单已被其他配送员接单") + + try: + # 更新订单状态和配送员ID + order.status = OrderStatus.ACCEPTED + order.deliveryman_user_id = deliveryman.userid + + db.commit() + return success_response( + message="接单成功", + data=OrderInfo.model_validate(order) + ) + except Exception as e: + db.rollback() + return error_response(code=500, message=f"接单失败: {str(e)}") \ No newline at end of file diff --git a/app/models/order.py b/app/models/order.py index 56472b1..e03c7a7 100644 --- a/app/models/order.py +++ b/app/models/order.py @@ -38,6 +38,7 @@ class ShippingOrderDB(Base): nullable=False, default=DeliveryMethod.DELIVERY_AT_DOORSTEP ) + deliveryman_user_id = Column(Integer, ForeignKey("users.userid"), nullable=True) class ShippingOrderPackageDB(Base): __tablename__ = "shipping_order_packages" @@ -79,6 +80,7 @@ class OrderInfo(BaseModel): complete_images: Optional[List[str]] = None create_time: datetime delivery_method: DeliveryMethod + deliveryman_user_id: Optional[int] = None def __init__(self, **data): super().__init__(**data)