商家订单详情增加距离。

This commit is contained in:
aaron 2025-02-13 20:22:52 +08:00
parent 3e90da4910
commit c549a64292

View File

@ -281,21 +281,25 @@ async def get_order_detail(
current_user: UserDB = Depends(get_current_user) current_user: UserDB = Depends(get_current_user)
): ):
"""获取订单详情""" """获取订单详情"""
order = db.query( query = db.query(
MerchantOrderDB, MerchantOrderDB,
MerchantProductDB.name.label('product_name'), MerchantProductDB.name.label('product_name'),
MerchantProductDB.image_url.label('product_image'), MerchantProductDB.image_url.label('product_image'),
MerchantDB.name.label('merchant_name'), MerchantDB.name.label('merchant_name'),
MerchantDB.latitude.label('merchant_latitude'), MerchantDB.latitude.label('merchant_latitude'),
MerchantDB.longitude.label('merchant_longitude'), MerchantDB.longitude.label('merchant_longitude'),
MerchantDB.phone.label('merchant_phone'), 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( if longitude is not None and latitude is not None:
lat=latitude, query = query.add_columns(
lon=longitude text("ST_Distance_Sphere(point(merchants.longitude, merchants.latitude), "
) if longitude and latitude else text("NULL as distance") "point(:lon, :lat)) as distance").params(lon=longitude, lat=latitude)
).join( )
else:
query = query.add_columns(text("NULL as distance"))
order = query.join(
MerchantProductDB, MerchantProductDB,
MerchantOrderDB.merchant_product_id == MerchantProductDB.id MerchantOrderDB.merchant_product_id == MerchantProductDB.id
).join( ).join(
@ -305,6 +309,7 @@ async def get_order_detail(
MerchantOrderDB.order_id == order_id MerchantOrderDB.order_id == order_id
).first() ).first()
if not order: if not order:
return error_response(code=404, message="订单不存在") return error_response(code=404, message="订单不存在")
@ -334,7 +339,7 @@ async def get_order_detail(
"merchant_longitude": order.merchant_longitude, "merchant_longitude": order.merchant_longitude,
"merchant_phone": order.merchant_phone, "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) return success_response(data=order_data)