From 292392b4a2ea1a21bd594a84bc647c9753c14cda Mon Sep 17 00:00:00 2001 From: aaron <> Date: Tue, 18 Mar 2025 09:30:09 +0800 Subject: [PATCH] update --- app/api/endpoints/community.py | 1 - app/api/endpoints/dashboard.py | 86 ++++++++++++++++++++------------- jobs.sqlite | Bin 24576 -> 24576 bytes 3 files changed, 53 insertions(+), 34 deletions(-) diff --git a/app/api/endpoints/community.py b/app/api/endpoints/community.py index 6aba478..8ac02de 100644 --- a/app/api/endpoints/community.py +++ b/app/api/endpoints/community.py @@ -59,7 +59,6 @@ async def get_community_qrcode( "community": CommunityInfo.model_validate(community), "show_qrcode": show_qrcode }) - @router.get("", response_model=ResponseModel) async def get_communities( diff --git a/app/api/endpoints/dashboard.py b/app/api/endpoints/dashboard.py index 83b23b6..e2c6cdc 100644 --- a/app/api/endpoints/dashboard.py +++ b/app/api/endpoints/dashboard.py @@ -1,12 +1,13 @@ from fastapi import APIRouter, Depends from app.models.database import get_db from app.api.deps import get_admin_user -from app.models.user import UserDB +from app.models.user import UserDB, UserRole from app.models.order import ShippingOrderDB, OrderStatus -from app.models.community import CommunityDB +from app.models.community import CommunityDB, CommunityStatus from sqlalchemy.orm import Session from datetime import datetime, timedelta from app.core.response import success_response, error_response, ResponseModel +from typing import Optional router = APIRouter() # 获取基础信息 @@ -21,41 +22,60 @@ async def get_dashboard_info( # 总用户数, 今日新增用户数,昨日新增用户数, 总配送订单数, 今日新增配送订单数,昨日新增配送订单数 # 小区数量, 今日新增小区数,昨日新增小区数 + # 小区数量 + total_community_count = db.query(CommunityDB).filter(CommunityDB.status == CommunityStatus.OPENING).count() + # 总用户数 total_user_count = db.query(UserDB).count() - # 今日新增用户数 - today_user_count = db.query(UserDB).filter(UserDB.create_time >= datetime.now().date()).count() + # 查询已下单用户数 + orders = db.query(ShippingOrderDB).filter(ShippingOrderDB.status.in_(['COMPLETED', 'UNPAID'])).all() + has_order_user_count = len(set([order.userid for order in orders])) + has_paid_user_count = len(set([order.userid for order in orders if order.status == OrderStatus.COMPLETED and order.final_amount > 0])) + order_count = len(orders) + order_pay_count = len([order for order in orders if order.status == OrderStatus.COMPLETED and order.final_amount > 0]) + pay_rate = order_pay_count / order_count if order_count > 0 else 0 + order_amount = sum([order.original_amount_with_additional_fee for order in orders]) + pay_amount = sum([order.final_amount for order in orders if order.status == OrderStatus.COMPLETED and order.final_amount > 0]) - # 昨日新增用户数 - yesterday_user_count = db.query(UserDB).filter(UserDB.create_time >= datetime.now().date() - timedelta(days=1)).count() - - # 总配送订单数 - total_order_count = db.query(ShippingOrderDB).filter(ShippingOrderDB.status == OrderStatus.COMPLETED).count() - - # 昨日订单数 - yesterday_order_count = db.query(ShippingOrderDB).filter(ShippingOrderDB.completed_time >= datetime.now().date() - timedelta(days=1), ShippingOrderDB.status == OrderStatus.COMPLETED).count() - - # 今日配送订单数 - today_order_count = db.query(ShippingOrderDB).filter(ShippingOrderDB.completed_time >= datetime.now().date(), ShippingOrderDB.status == OrderStatus.COMPLETED).count() - - # 小区数量 - total_community_count = db.query(CommunityDB).count() - - # 昨日新增小区数 - yesterday_community_count = db.query(CommunityDB).filter(CommunityDB.create_time >= datetime.now().date() - timedelta(days=1)).count() - - # 今日新增小区数 - today_community_count = db.query(CommunityDB).filter(CommunityDB.create_time >= datetime.now().date()).count() return success_response(data={ - "total_user_count": total_user_count, - "today_user_count": today_user_count, - "yesterday_user_count": yesterday_user_count, - "total_order_count": total_order_count, - "today_order_count": today_order_count, - "yesterday_order_count": yesterday_order_count, "total_community_count": total_community_count, - "today_community_count": today_community_count, - "yesterday_community_count": yesterday_community_count, - }) \ No newline at end of file + "total_user_count": total_user_count, + "has_order_user_count": has_order_user_count, + "has_paid_user_count": has_paid_user_count, + "order_count": order_count, + "order_pay_count": order_pay_count, + "pay_rate": pay_rate, + "order_amount": order_amount, + "pay_amount": pay_amount + }) + +@router.get("/deliveryman") +async def get_deliveryman_dashboard_info( + community_id: Optional[int] = None, + db: Session = Depends(get_db) +): + # 获取配送员信息 + query = db.query(UserDB).filter(UserDB.roles.contains(UserRole.DELIVERYMAN)) + if community_id: + query = query.filter(UserDB.community_id == community_id) + deliverymans = query.all() + + result = [] + for deliveryman in deliverymans: + orders = db.query(ShippingOrderDB).filter(ShippingOrderDB.deliveryman_user_id == deliveryman.userid, ShippingOrderDB.status.in_([OrderStatus.COMPLETED, OrderStatus.UNPAID])).all() + today_orders = db.query(ShippingOrderDB).filter(ShippingOrderDB.deliveryman_user_id == deliveryman.userid, ShippingOrderDB.status.in_([OrderStatus.COMPLETED, OrderStatus.UNPAID]), ShippingOrderDB.completed_time >= datetime.now().date()).all() + result.append({ + "deliveryman_id": deliveryman.userid, + "deliveryman_name": deliveryman.nickname, + "deliveryman_community_name": deliveryman.community.name, + "order_count": len(orders), + "order_amount": sum([order.original_amount_with_additional_fee for order in orders]), + "today_order_count": len(today_orders), + "today_order_amount": sum([order.original_amount_with_additional_fee for order in today_orders]) + }) + + # 按照今日订单量排序 + result.sort(key=lambda x: x["today_order_count"], reverse=True) + return success_response(data=result) \ No newline at end of file diff --git a/jobs.sqlite b/jobs.sqlite index e57af6cf468cec35333057d67922ef644d5e3c1f..248dc39ab2840fae8989ffbc31736b584f9a1f0e 100644 GIT binary patch delta 19 bcmZoTz}Rqrae_4C-H9^JjCVICEQkjHO