diff --git a/app/api/endpoints/merchant_order.py b/app/api/endpoints/merchant_order.py index def7228..d200208 100644 --- a/app/api/endpoints/merchant_order.py +++ b/app/api/endpoints/merchant_order.py @@ -30,7 +30,7 @@ from app.core.imageprocessor import process_image, ImageFormat from starlette.datastructures import Headers from app.models.merchant_order import MerchantOrderVerify from app.core.point_manager import PointManager, PointRecordType - +from datetime import timedelta router = APIRouter() @router.post("", response_model=ResponseModel) @@ -434,4 +434,43 @@ async def get_order_qrcode( return success_response(data={"qrcode_url": process_url}) except Exception as e: db.rollback() - return error_response(code=500, message=f"生成二维码失败: {str(e)}") \ No newline at end of file + return error_response(code=500, message=f"生成二维码失败: {str(e)}") + + +# 获取商家订单数据汇总 +@router.get("/merchant/summary", response_model=ResponseModel) +async def get_merchant_order_summary( + db: Session = Depends(get_db), + merchant_user: UserDB = Depends(get_merchant_user) +): + """获取商家订单数据汇总""" + # 查询商家订单数量 + total = db.query(MerchantOrderDB).filter( + MerchantOrderDB.user_id == merchant_user.userid + ).count() + + today = datetime.now().date() + yesterday = today - timedelta(days=1) + today_start = datetime.combine(today, datetime.min.time()) + today_end = datetime.combine(today, datetime.max.time()) + yesterday_start = datetime.combine(yesterday, datetime.min.time()) + yesterday_end = datetime.combine(yesterday, datetime.max.time()) + + # 查询商家昨日、今日订单数量 + yesterday_total = db.query(MerchantOrderDB).filter( + MerchantOrderDB.user_id == merchant_user.userid, + MerchantOrderDB.status == MerchantOrderStatus.VERIFIED, + MerchantOrderDB.create_time.between(yesterday_start, yesterday_end) + ).count() + + today_total = db.query(MerchantOrderDB).filter( + MerchantOrderDB.user_id == merchant_user.userid, + MerchantOrderDB.status == MerchantOrderStatus.VERIFIED, + MerchantOrderDB.create_time.between(today_start, today_end) + ).count() + + return success_response(data={ + "total": total, + "yesterday_total": yesterday_total, + "today_total": today_total + }) diff --git a/app/api/endpoints/order.py b/app/api/endpoints/order.py index e5425ba..b1ea200 100644 --- a/app/api/endpoints/order.py +++ b/app/api/endpoints/order.py @@ -32,6 +32,7 @@ from app.core.utils import CommonUtils import logging from sqlalchemy import func from app.core.mpclient import mp_client +from datetime import timedelta router = APIRouter() @@ -1030,4 +1031,46 @@ async def get_admin_orders( except Exception as e: logging.exception(f"获取订单列表失败: {str(e)}") - return error_response(code=500, message=f"获取订单列表失败: {str(e)}") \ No newline at end of file + return error_response(code=500, message=f"获取订单列表失败: {str(e)}") + + +# 获取配送员订单数量汇总 +@router.get("/deliveryman/summary", response_model=ResponseModel) +async def get_deliveryman_order_summary( + db: Session = Depends(get_db), + deliveryman: UserDB = Depends(get_deliveryman_user) +): + """获取配送员订单数量汇总""" + + # 查询配送员总订单数量 + total = db.query(ShippingOrderDB).filter( + ShippingOrderDB.deliveryman_user_id == deliveryman.userid, + ShippingOrderDB.status == OrderStatus.COMPLETED + ).count() + + today = datetime.now().date() + yesterday = today - timedelta(days=1) + today_start = datetime.combine(today, datetime.min.time()) + today_end = datetime.combine(today, datetime.max.time()) + yesterday_start = datetime.combine(yesterday, datetime.min.time()) + yesterday_end = datetime.combine(yesterday, datetime.max.time()) + + # 查询配送员昨日、今日订单数量 + yesterday_total = db.query(ShippingOrderDB).filter( + ShippingOrderDB.deliveryman_user_id == deliveryman.userid, + ShippingOrderDB.status == OrderStatus.COMPLETED, + ShippingOrderDB.create_time.between(yesterday_start, yesterday_end) + ).count() + + today_total = db.query(ShippingOrderDB).filter( + ShippingOrderDB.deliveryman_user_id == deliveryman.userid, + ShippingOrderDB.status == OrderStatus.COMPLETED, + ShippingOrderDB.create_time.between(today_start, today_end) + ).count() + + + return success_response(data={ + "total_count": total, + "yesterday_count": yesterday_total, + "today_count": today_total + }) \ No newline at end of file