From 6b6354000f627a5c9ce10a8f5e09d8f5ac50cf2a Mon Sep 17 00:00:00 2001 From: aaron <> Date: Mon, 13 Jan 2025 21:08:12 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=AE=A2=E5=8D=95=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E6=8E=A5=E5=8F=A3=E8=BF=94=E5=9B=9E=20=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=8F=96=E6=B6=88=E8=AE=A2=E5=8D=95=20uid=20=E8=AE=B0?= =?UTF-8?q?=E5=BD=95=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/endpoints/order.py | 28 +++++++++++++++++++++++----- app/models/order.py | 3 +++ 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/app/api/endpoints/order.py b/app/api/endpoints/order.py index 0630303..ef25fbb 100644 --- a/app/api/endpoints/order.py +++ b/app/api/endpoints/order.py @@ -25,6 +25,7 @@ from app.models.address import AddressDB from sqlalchemy.orm import joinedload from app.models.community import CommunityDB from app.models.community_building import CommunityBuildingDB +from app.models.station import StationDB router = APIRouter() @@ -149,8 +150,14 @@ async def get_order_detail( if order.ShippingOrderDB.userid != current_user.userid and UserRole.ADMIN not in current_user.roles: return error_response(code=403, message="无权查看此订单") - # 查询包裹信息 - packages = db.query(ShippingOrderPackageDB).filter( + # 查询包裹信息,包含驿站名称 + packages = db.query( + ShippingOrderPackageDB, + StationDB.name.label('station_name') + ).join( + StationDB, + ShippingOrderPackageDB.station_id == StationDB.id + ).filter( ShippingOrderPackageDB.orderid == orderid ).all() @@ -177,9 +184,19 @@ async def get_order_detail( "community_name": order.community_name } + # 构建包裹信息,包含驿站名称 + package_list = [{ + "id": p.ShippingOrderPackageDB.id, + "orderid": p.ShippingOrderPackageDB.orderid, + "station_id": p.ShippingOrderPackageDB.station_id, + "station_name": p.station_name, + "pickup_codes": p.ShippingOrderPackageDB.pickup_codes, + "create_time": p.ShippingOrderPackageDB.create_time + } for p in packages] + return success_response(data={ "order": order_data, - "packages": [OrderPackageInfo.model_validate(p) for p in packages] + "packages": package_list }) @router.get("/", response_model=ResponseModel) @@ -267,13 +284,14 @@ async def cancel_order( return error_response(code=404, message="订单不存在") # 检查订单状态是否可取消 - if order.status not in [OrderStatus.PENDING, OrderStatus.ACCEPTED]: + if order.status not in [OrderStatus.CREATED, OrderStatus.ACCEPTED]: return error_response(code=400, message="当前订单状态不可取消") try: - # 更新订单状态和取消原因 + # 更新订单状态、取消原因和取消用户 order.status = OrderStatus.CANCELLED order.cancel_reason = cancel_data.reason + order.cancel_user_id = current_user.userid # 记录取消订单的用户ID # 如果使用了优惠券,返还优惠券 if order.coupon_id: diff --git a/app/models/order.py b/app/models/order.py index e03c7a7..09c2f1b 100644 --- a/app/models/order.py +++ b/app/models/order.py @@ -39,6 +39,7 @@ class ShippingOrderDB(Base): default=DeliveryMethod.DELIVERY_AT_DOORSTEP ) deliveryman_user_id = Column(Integer, ForeignKey("users.userid"), nullable=True) + cancel_user_id = Column(Integer, ForeignKey("users.userid"), nullable=True) class ShippingOrderPackageDB(Base): __tablename__ = "shipping_order_packages" @@ -81,6 +82,8 @@ class OrderInfo(BaseModel): create_time: datetime delivery_method: DeliveryMethod deliveryman_user_id: Optional[int] = None + cancel_reason: Optional[str] = None + cancel_user_id: Optional[int] = None def __init__(self, **data): super().__init__(**data)