From 9d84614ea8f011b4580c611bf2d289727ed809fc Mon Sep 17 00:00:00 2001 From: aaron <> Date: Sat, 8 Mar 2025 23:35:10 +0800 Subject: [PATCH] update --- app/api/endpoints/order.py | 76 ++++++++++++++++++++------------------ app/models/user.py | 1 + 2 files changed, 42 insertions(+), 35 deletions(-) diff --git a/app/api/endpoints/order.py b/app/api/endpoints/order.py index 65c6072..c0d2ffe 100644 --- a/app/api/endpoints/order.py +++ b/app/api/endpoints/order.py @@ -103,7 +103,7 @@ def calculate_price(price_request: OrderPriceCalculateRequest,user: UserDB,db: S extra_package_price = float(community.extra_package_price) extra_package_threshold = int(community.extra_package_threshold) - original_amount = round(base_price + extra_package_price * (package_count - extra_package_threshold), 2) + original_amount = round((base_price + extra_package_price * (package_count - extra_package_threshold)), 2) result.price_info.package_count = package_count result.price_info.pickup_images_count = pickup_images_count @@ -550,51 +550,46 @@ async def deliveryman_get_order_status_count( db: Session = Depends(get_db), current_user: UserDB = Depends(get_current_user) ): + """获取社区订单状态数量""" + status_list = [OrderStatus.CREATED, OrderStatus.RECEIVED, OrderStatus.DELIVERING, OrderStatus.UNPAID, OrderStatus.COMPLETED] - created_count = db.query( - ShippingOrderDB.status - ).filter( - ShippingOrderDB.address_community_id == community_id, - ShippingOrderDB.status == OrderStatus.CREATED - ) - - if time_period_id: - created_count = created_count.filter( - ShippingOrderDB.time_period_id == time_period_id + result = [] + for status in status_list: + query = db.query( + ShippingOrderDB.status + ).filter( + ShippingOrderDB.address_community_id == community_id, + ShippingOrderDB.status == status ) - created_count = created_count.count() - others_status_count = db.query( - ShippingOrderDB.status, - func.count(ShippingOrderDB.orderid) - ).filter( - ShippingOrderDB.address_community_id == community_id, - ShippingOrderDB.status != OrderStatus.CREATED, - ShippingOrderDB.deliveryman_user_id == current_user.userid - ).group_by( - ShippingOrderDB.status - ) - - if time_period_id: - others_status_count = others_status_count.filter( - ShippingOrderDB.time_period_id == time_period_id - ) - others_status_count = others_status_count.all() + # 如果传入了时间周期id,则过滤时间周期 + if time_period_id: + query = query.filter( + ShippingOrderDB.time_period_id == time_period_id + ) - result = [{ - "status": OrderStatus.CREATED, - "count": created_count - }] + # 不是待接单的订单,需要过滤配送员 + if status != OrderStatus.CREATED: + query = query.filter( + ShippingOrderDB.deliveryman_user_id == current_user.userid + ) - for status, count in others_status_count: + # 不是未支付、已完成订单,需要过滤配送日期 + if status != OrderStatus.UNPAID and status != OrderStatus.COMPLETED: + query = query.filter( + ShippingOrderDB.delivery_date == datetime.now().date() + ) + + count = query.count() result.append({ "status": status, "count": count - }) - + }) + return success_response(data=result) + # 提供一个接口,传入 community_id 返回每栋楼栋的订单数量 @router.get("/community_building/count", response_model=ResponseModel) async def deliveryman_get_community_building_order_count( @@ -640,6 +635,12 @@ async def deliveryman_get_community_building_order_count( ShippingOrderDB.deliveryman_user_id == current_user.userid ) + # 如果订单状态不是待支付和已完成,则只显示今日配送的订单 + if status not in [OrderStatus.UNPAID, OrderStatus.COMPLETED]: + query = query.filter( + ShippingOrderDB.delivery_date == datetime.now().date() + ) + building_order_count = query.group_by( ShippingOrderDB.address_community_building_id ).all() @@ -892,6 +893,10 @@ async def deliveryman_orders( if OrderStatus.CREATED not in statuses: query = query.filter(ShippingOrderDB.deliveryman_user_id == deliveryman.userid) + # 如果订单状态不是待支付和已完成,则只显示今日配送的订单 + if OrderStatus.UNPAID not in statuses and OrderStatus.COMPLETED not in statuses: + query = query.filter(ShippingOrderDB.delivery_date == datetime.now().date()) + # 楼栋筛选 if building_id: query = query.filter(ShippingOrderDB.address_community_building_id == building_id) @@ -903,6 +908,7 @@ async def deliveryman_orders( # 配送时段筛选 if time_period_id: query = query.filter(ShippingOrderDB.time_period_id == time_period_id) + # 获取总数 total = query.count() diff --git a/app/models/user.py b/app/models/user.py index 3a10051..31c263b 100644 --- a/app/models/user.py +++ b/app/models/user.py @@ -14,6 +14,7 @@ class UserRole(str, enum.Enum): DELIVERYMAN = "deliveryman" MERCHANT = "merchant" ADMIN = "admin" + PARTNER = "partner" class Gender(str, enum.Enum): MALE = "MALE"