From 64e2f4a339f66f4e694bf9fcc4699339b381f650 Mon Sep 17 00:00:00 2001 From: aaron <> Date: Wed, 22 Jan 2025 23:06:34 +0800 Subject: [PATCH] no message --- app/api/endpoints/merchant.py | 22 +++++++++++++++++++++- app/models/merchant.py | 1 + 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/app/api/endpoints/merchant.py b/app/api/endpoints/merchant.py index 2f427be..e6c3416 100644 --- a/app/api/endpoints/merchant.py +++ b/app/api/endpoints/merchant.py @@ -14,6 +14,8 @@ from app.models.database import get_db from app.api.deps import get_admin_user from app.models.user import UserDB from app.core.response import success_response, error_response, ResponseModel +from app.models.merchant_pay_order import MerchantPayOrderDB +from sqlalchemy.sql import func router = APIRouter() @@ -182,18 +184,36 @@ async def list_merchants( if longitude is not None and latitude is not None: query = query.add_columns( text("ST_Distance_Sphere(point(longitude, latitude), point(:lon, :lat)) as distance") - ).params(lon=longitude, lat=latitude).order_by(text("distance")) + ).params(lon=longitude, lat=latitude) + # 默认按距离排序 + query = query.order_by(text("distance")) else: + # 如果没有经纬度,则按创建时间排序 query = query.order_by(MerchantDB.create_time.desc()) + # 添加一个空的距离列,保持返回结构一致 + query = query.add_columns(text("NULL as distance")) + merchants = query.offset(skip).limit(limit).all() + # 获取商家在线买单数量 + merchant_ids = [m[0].id for m in merchants] + pay_order_counts = dict( + db.query( + MerchantPayOrderDB.merchant_id, + func.count(MerchantPayOrderDB.id).label('count') + ).filter( + MerchantPayOrderDB.merchant_id.in_(merchant_ids) + ).group_by(MerchantPayOrderDB.merchant_id).all() + ) + # 处理返回结果 merchant_list = [{ **MerchantInfo.model_validate(m[0]).model_dump(), "category_name": m[1], "user_phone": m[2], "user_nickname": m[3], + "online_pay_count": pay_order_counts.get(m[0].id, 0), "distance": round(m[4]) if longitude is not None and latitude is not None else None } for m in merchants] diff --git a/app/models/merchant.py b/app/models/merchant.py index 3105e0e..2e0367b 100644 --- a/app/models/merchant.py +++ b/app/models/merchant.py @@ -76,6 +76,7 @@ class MerchantInfo(BaseModel): user_id: int user_phone: Optional[str] = None user_nickname: Optional[str] = None + online_pay_count: Optional[int] = 0 name: str business_hours: str address: str