This commit is contained in:
aaron 2025-03-18 09:30:09 +08:00
parent 1cc356bf9a
commit 292392b4a2
3 changed files with 53 additions and 34 deletions

View File

@ -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(

View File

@ -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,
})
"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)

Binary file not shown.