增加商家订单的返回结果。

This commit is contained in:
aaron 2025-01-13 21:41:50 +08:00
parent 2223873a82
commit 3bc27ea65d
2 changed files with 106 additions and 7 deletions

View File

@ -11,10 +11,11 @@ from app.models.merchant_order import (
) )
from app.models.merchant_product import MerchantProductDB from app.models.merchant_product import MerchantProductDB
from app.models.database import get_db 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.models.user import UserDB
from app.core.response import success_response, error_response, ResponseModel from app.core.response import success_response, error_response, ResponseModel
from datetime import datetime, timezone from datetime import datetime, timezone
from app.models.merchant import MerchantDB
router = APIRouter() router = APIRouter()
@ -71,15 +72,50 @@ async def get_user_orders(
current_user: UserDB = Depends(get_current_user) 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 MerchantOrderDB.user_id == current_user.userid
).order_by( ).order_by(
MerchantOrderDB.create_time.desc() MerchantOrderDB.create_time.desc()
).offset(skip).limit(limit).all() ).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) @router.post("/{order_id}/verify", response_model=ResponseModel)
async def verify_order( async def verify_order(
@ -174,7 +210,7 @@ async def apply_refund(
async def confirm_refund( async def confirm_refund(
order_id: str, order_id: str,
db: Session = Depends(get_db), db: Session = Depends(get_db),
current_user: UserDB = Depends(get_current_user) current_user: UserDB = Depends(get_admin_user)
): ):
"""确认退款(管理员)""" """确认退款(管理员)"""
order = db.query(MerchantOrderDB).filter( order = db.query(MerchantOrderDB).filter(
@ -196,4 +232,61 @@ async def confirm_refund(
) )
except Exception as e: except Exception as e:
db.rollback() db.rollback()
return error_response(code=500, message=f"确认退款失败: {str(e)}") 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)

View File

@ -47,6 +47,12 @@ class MerchantOrderInfo(BaseModel):
verify_user_id: Optional[int] verify_user_id: Optional[int]
create_time: datetime create_time: datetime
update_time: Optional[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: class Config:
from_attributes = True from_attributes = True