增加接单接口
This commit is contained in:
parent
5028e1148c
commit
2f2b54f092
@ -328,3 +328,40 @@ async def get_delivery_orders(
|
|||||||
"total": total,
|
"total": total,
|
||||||
"items": [OrderInfo.model_validate(o) for o in orders]
|
"items": [OrderInfo.model_validate(o) for o in orders]
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@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)}")
|
||||||
@ -38,6 +38,7 @@ class ShippingOrderDB(Base):
|
|||||||
nullable=False,
|
nullable=False,
|
||||||
default=DeliveryMethod.DELIVERY_AT_DOORSTEP
|
default=DeliveryMethod.DELIVERY_AT_DOORSTEP
|
||||||
)
|
)
|
||||||
|
deliveryman_user_id = Column(Integer, ForeignKey("users.userid"), nullable=True)
|
||||||
|
|
||||||
class ShippingOrderPackageDB(Base):
|
class ShippingOrderPackageDB(Base):
|
||||||
__tablename__ = "shipping_order_packages"
|
__tablename__ = "shipping_order_packages"
|
||||||
@ -79,6 +80,7 @@ class OrderInfo(BaseModel):
|
|||||||
complete_images: Optional[List[str]] = None
|
complete_images: Optional[List[str]] = None
|
||||||
create_time: datetime
|
create_time: datetime
|
||||||
delivery_method: DeliveryMethod
|
delivery_method: DeliveryMethod
|
||||||
|
deliveryman_user_id: Optional[int] = None
|
||||||
|
|
||||||
def __init__(self, **data):
|
def __init__(self, **data):
|
||||||
super().__init__(**data)
|
super().__init__(**data)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user