增加接单接口
This commit is contained in:
parent
5028e1148c
commit
2f2b54f092
@ -327,4 +327,41 @@ async def get_delivery_orders(
|
||||
return success_response(data={
|
||||
"total": total,
|
||||
"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,
|
||||
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)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user