完善订单详情接口返回

增加取消订单 uid 记录。
This commit is contained in:
aaron 2025-01-13 21:08:12 +08:00
parent 1d10986d93
commit 6b6354000f
2 changed files with 26 additions and 5 deletions

View File

@ -25,6 +25,7 @@ from app.models.address import AddressDB
from sqlalchemy.orm import joinedload from sqlalchemy.orm import joinedload
from app.models.community import CommunityDB from app.models.community import CommunityDB
from app.models.community_building import CommunityBuildingDB from app.models.community_building import CommunityBuildingDB
from app.models.station import StationDB
router = APIRouter() 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: if order.ShippingOrderDB.userid != current_user.userid and UserRole.ADMIN not in current_user.roles:
return error_response(code=403, message="无权查看此订单") 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 ShippingOrderPackageDB.orderid == orderid
).all() ).all()
@ -177,9 +184,19 @@ async def get_order_detail(
"community_name": order.community_name "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={ return success_response(data={
"order": order_data, "order": order_data,
"packages": [OrderPackageInfo.model_validate(p) for p in packages] "packages": package_list
}) })
@router.get("/", response_model=ResponseModel) @router.get("/", response_model=ResponseModel)
@ -267,13 +284,14 @@ async def cancel_order(
return error_response(code=404, message="订单不存在") 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="当前订单状态不可取消") return error_response(code=400, message="当前订单状态不可取消")
try: try:
# 更新订单状态和取消原因 # 更新订单状态、取消原因和取消用户
order.status = OrderStatus.CANCELLED order.status = OrderStatus.CANCELLED
order.cancel_reason = cancel_data.reason order.cancel_reason = cancel_data.reason
order.cancel_user_id = current_user.userid # 记录取消订单的用户ID
# 如果使用了优惠券,返还优惠券 # 如果使用了优惠券,返还优惠券
if order.coupon_id: if order.coupon_id:

View File

@ -39,6 +39,7 @@ class ShippingOrderDB(Base):
default=DeliveryMethod.DELIVERY_AT_DOORSTEP default=DeliveryMethod.DELIVERY_AT_DOORSTEP
) )
deliveryman_user_id = Column(Integer, ForeignKey("users.userid"), nullable=True) deliveryman_user_id = Column(Integer, ForeignKey("users.userid"), nullable=True)
cancel_user_id = Column(Integer, ForeignKey("users.userid"), nullable=True)
class ShippingOrderPackageDB(Base): class ShippingOrderPackageDB(Base):
__tablename__ = "shipping_order_packages" __tablename__ = "shipping_order_packages"
@ -81,6 +82,8 @@ class OrderInfo(BaseModel):
create_time: datetime create_time: datetime
delivery_method: DeliveryMethod delivery_method: DeliveryMethod
deliveryman_user_id: Optional[int] = None deliveryman_user_id: Optional[int] = None
cancel_reason: Optional[str] = None
cancel_user_id: Optional[int] = None
def __init__(self, **data): def __init__(self, **data):
super().__init__(**data) super().__init__(**data)