From c549a642929b3a5516dbb5584c7e503294797394 Mon Sep 17 00:00:00 2001 From: aaron <> Date: Thu, 13 Feb 2025 20:22:52 +0800 Subject: [PATCH] =?UTF-8?q?=E5=95=86=E5=AE=B6=E8=AE=A2=E5=8D=95=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E5=A2=9E=E5=8A=A0=E8=B7=9D=E7=A6=BB=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/endpoints/merchant_order.py | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/app/api/endpoints/merchant_order.py b/app/api/endpoints/merchant_order.py index 8706339..8833fbc 100644 --- a/app/api/endpoints/merchant_order.py +++ b/app/api/endpoints/merchant_order.py @@ -281,21 +281,25 @@ async def get_order_detail( current_user: UserDB = Depends(get_current_user) ): """获取订单详情""" - order = db.query( + query = 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'), - text("CASE WHEN :lat IS NOT NULL AND :lon IS NOT NULL THEN " - "ST_Distance_Sphere(point(merchants.longitude, merchants.latitude), point(:lon, :lat)) " - "ELSE NULL END as distance").params( - lat=latitude, - lon=longitude - ) if longitude and latitude else text("NULL as distance") - ).join( + MerchantDB.phone.label('merchant_phone') + ) + + if longitude is not None and latitude is not None: + query = query.add_columns( + text("ST_Distance_Sphere(point(merchants.longitude, merchants.latitude), " + "point(:lon, :lat)) as distance").params(lon=longitude, lat=latitude) + ) + else: + query = query.add_columns(text("NULL as distance")) + + order = query.join( MerchantProductDB, MerchantOrderDB.merchant_product_id == MerchantProductDB.id ).join( @@ -304,7 +308,8 @@ async def get_order_detail( ).filter( MerchantOrderDB.order_id == order_id ).first() - + + if not order: return error_response(code=404, message="订单不存在") @@ -334,7 +339,7 @@ async def get_order_detail( "merchant_longitude": order.merchant_longitude, "merchant_phone": order.merchant_phone, # 距离信息 - "distance": round(order.distance) if order.distance else None + "distance": round(order[7]) if order[7] else None } return success_response(data=order_data)