diff --git a/app/api/endpoints/merchant_order.py b/app/api/endpoints/merchant_order.py index 70343a4..3736594 100644 --- a/app/api/endpoints/merchant_order.py +++ b/app/api/endpoints/merchant_order.py @@ -11,10 +11,11 @@ from app.models.merchant_order import ( ) from app.models.merchant_product import MerchantProductDB from app.models.database import get_db -from app.api.deps import get_current_user +from app.api.deps import get_current_user, get_admin_user from app.models.user import UserDB from app.core.response import success_response, error_response, ResponseModel from datetime import datetime, timezone +from app.models.merchant import MerchantDB router = APIRouter() @@ -71,15 +72,50 @@ async def get_user_orders( current_user: UserDB = Depends(get_current_user) ): """获取用户的订单列表""" - orders = db.query(MerchantOrderDB).filter( + orders = db.query( + MerchantOrderDB, + MerchantProductDB.name.label('product_name'), + MerchantProductDB.image_url.label('product_image'), + MerchantDB.name.label('merchant_name'), + MerchantDB.latitude.label('merchant_latitude'), + MerchantDB.longitude.label('merchant_longitude'), + MerchantDB.phone.label('merchant_phone') + ).join( + MerchantProductDB, + MerchantOrderDB.merchant_product_id == MerchantProductDB.id + ).join( + MerchantDB, + MerchantProductDB.merchant_id == MerchantDB.id + ).filter( MerchantOrderDB.user_id == current_user.userid ).order_by( MerchantOrderDB.create_time.desc() ).offset(skip).limit(limit).all() - return success_response(data=[ - MerchantOrderInfo.model_validate(o) for o in orders - ]) + # 构建返回数据 + order_list = [{ + "id": order.MerchantOrderDB.id, + "order_id": order.MerchantOrderDB.order_id, + "user_id": order.MerchantOrderDB.user_id, + "merchant_product_id": order.MerchantOrderDB.merchant_product_id, + "order_amount": order.MerchantOrderDB.order_amount, + "status": order.MerchantOrderDB.status, + "order_verify_code": order.MerchantOrderDB.order_verify_code, + "verify_time": order.MerchantOrderDB.verify_time, + "verify_user_id": order.MerchantOrderDB.verify_user_id, + "create_time": order.MerchantOrderDB.create_time, + "update_time": order.MerchantOrderDB.update_time, + # 商品信息 + "product_name": order.product_name, + "product_image": order.product_image, + # 商家信息 + "merchant_name": order.merchant_name, + "merchant_latitude": order.merchant_latitude, + "merchant_longitude": order.merchant_longitude, + "merchant_phone": order.merchant_phone + } for order in orders] + + return success_response(data=order_list) @router.post("/{order_id}/verify", response_model=ResponseModel) async def verify_order( @@ -174,7 +210,7 @@ async def apply_refund( async def confirm_refund( order_id: str, db: Session = Depends(get_db), - current_user: UserDB = Depends(get_current_user) + current_user: UserDB = Depends(get_admin_user) ): """确认退款(管理员)""" order = db.query(MerchantOrderDB).filter( @@ -196,4 +232,61 @@ async def confirm_refund( ) except Exception as e: db.rollback() - return error_response(code=500, message=f"确认退款失败: {str(e)}") \ No newline at end of file + return error_response(code=500, message=f"确认退款失败: {str(e)}") + +@router.get("/{order_id}", response_model=ResponseModel) +async def get_order_detail( + order_id: str, + db: Session = Depends(get_db), + current_user: UserDB = Depends(get_current_user) +): + """获取订单详情""" + order = db.query( + MerchantOrderDB, + MerchantProductDB.name.label('product_name'), + MerchantProductDB.image_url.label('product_image'), + MerchantDB.name.label('merchant_name'), + MerchantDB.latitude.label('merchant_latitude'), + MerchantDB.longitude.label('merchant_longitude'), + MerchantDB.phone.label('merchant_phone') + ).join( + MerchantProductDB, + MerchantOrderDB.merchant_product_id == MerchantProductDB.id + ).join( + MerchantDB, + MerchantProductDB.merchant_id == MerchantDB.id + ).filter( + MerchantOrderDB.order_id == order_id + ).first() + + if not order: + return error_response(code=404, message="订单不存在") + + # 检查权限 + if order.MerchantOrderDB.user_id != current_user.userid: + return error_response(code=403, message="无权查看此订单") + + # 构建返回数据 + order_data = { + "id": order.MerchantOrderDB.id, + "order_id": order.MerchantOrderDB.order_id, + "user_id": order.MerchantOrderDB.user_id, + "merchant_product_id": order.MerchantOrderDB.merchant_product_id, + "order_amount": order.MerchantOrderDB.order_amount, + "status": order.MerchantOrderDB.status, + "order_verify_code": order.MerchantOrderDB.order_verify_code, + "verify_time": order.MerchantOrderDB.verify_time, + "verify_user_id": order.MerchantOrderDB.verify_user_id, + "create_time": order.MerchantOrderDB.create_time, + "update_time": order.MerchantOrderDB.update_time, + # 商品信息 + "product_name": order.product_name, + "product_image": order.product_image, + # 商家信息 + "merchant_name": order.merchant_name, + "merchant_latitude": order.merchant_latitude, + "merchant_longitude": order.merchant_longitude, + "merchant_phone": order.merchant_phone + } + + return success_response(data=order_data) \ No newline at end of file diff --git a/app/models/merchant_order.py b/app/models/merchant_order.py index 0c13354..5d5cbfb 100644 --- a/app/models/merchant_order.py +++ b/app/models/merchant_order.py @@ -47,6 +47,12 @@ class MerchantOrderInfo(BaseModel): verify_user_id: Optional[int] create_time: datetime update_time: Optional[datetime] + product_name: Optional[str] = None + product_image: Optional[str] = None + product_price: Optional[float] = None + merchant_name: Optional[str] = None + merchant_logo: Optional[str] = None + merchant_address: Optional[str] = None class Config: from_attributes = True