From 2c6b54ab6578e53724fdc414822cfbeadeed64e6 Mon Sep 17 00:00:00 2001 From: aaron <> Date: Fri, 14 Feb 2025 00:10:46 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A0=B8=E9=94=80=E8=AE=A2=E5=8D=95=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/deps.py | 8 +++++ app/api/endpoints/merchant_order.py | 47 ++++++++++++++++++++++------- app/models/merchant_order.py | 3 ++ 3 files changed, 47 insertions(+), 11 deletions(-) diff --git a/app/api/deps.py b/app/api/deps.py index 7f10177..5765db6 100644 --- a/app/api/deps.py +++ b/app/api/deps.py @@ -42,4 +42,12 @@ async def get_deliveryman_user( """验证配送员权限""" if UserRole.DELIVERYMAN not in current_user.roles: raise HTTPException(status_code=403, detail="需要配送员权限") + return current_user + +async def get_merchant_user( + current_user: UserDB = Depends(get_current_user) +) -> UserDB: + """验证商家权限""" + if UserRole.MERCHANT not in current_user.roles: + raise HTTPException(status_code=403, detail="需要商家权限") return current_user \ No newline at end of file diff --git a/app/api/endpoints/merchant_order.py b/app/api/endpoints/merchant_order.py index 751bd35..c62a697 100644 --- a/app/api/endpoints/merchant_order.py +++ b/app/api/endpoints/merchant_order.py @@ -10,7 +10,7 @@ from app.models.merchant_order import ( ) from app.models.merchant_product import MerchantProductDB from app.models.database import get_db -from app.api.deps import get_current_user, get_admin_user +from app.api.deps import get_current_user, get_admin_user, get_merchant_user from app.models.user import UserDB from app.core.response import success_response, error_response, ResponseModel from datetime import datetime, timezone @@ -28,6 +28,7 @@ from fastapi import UploadFile from app.core.qcloud import qcloud_manager from app.core.imageprocessor import process_image, ImageFormat from starlette.datastructures import Headers +from app.models.merchant_order import MerchantOrderVerify router = APIRouter() @@ -144,12 +145,36 @@ async def get_user_orders( return success_response(data=order_list) -@router.post("/{order_id}/verify", response_model=ResponseModel) -async def verify_order( - order_id: str, - verify_code: str, +@router.get("/merchant/query_verify", response_model=ResponseModel) +async def query_verify( + request: MerchantOrderVerify, db: Session = Depends(get_db), - current_user: UserDB = Depends(get_current_user) + merchant_user: UserDB = Depends(get_merchant_user) +): + """查询待核销订单""" + order = db.query( + MerchantOrderDB, + MerchantProductDB, + MerchantDB + ).join( + MerchantProductDB, + MerchantOrderDB.merchant_product_id == MerchantProductDB.id + ).join( + MerchantDB, + MerchantProductDB.merchant_id == MerchantDB.id + ).filter( + MerchantOrderDB.order_verify_code == request.verify_code, + MerchantOrderDB.status == MerchantOrderStatus.UNVERIFIED, + MerchantDB.user_id == merchant_user.userid + ).first() + + return success_response(data=MerchantOrderInfo.model_validate(order)) + +@router.post("/merchant/verify", response_model=ResponseModel) +async def verify_order( + request: MerchantOrderVerify, + db: Session = Depends(get_db), + merchant_user: UserDB = Depends(get_merchant_user) ): """核销订单""" # 查询订单及相关信息 @@ -164,9 +189,9 @@ async def verify_order( MerchantDB, MerchantProductDB.merchant_id == MerchantDB.id ).filter( - MerchantOrderDB.order_id == order_id, - MerchantOrderDB.order_verify_code == verify_code, - MerchantOrderDB.verify_time.is_(None) # 未核销 + MerchantOrderDB.order_verify_code == request.verify_code, + MerchantOrderDB.status == MerchantOrderStatus.UNVERIFIED, + MerchantDB.user_id == merchant_user.userid ).first() if not order: @@ -175,9 +200,9 @@ async def verify_order( try: # 更新核销时间和核销用户 order.MerchantOrderDB.verify_time = datetime.now(timezone.utc) - order.MerchantOrderDB.verify_user_id = current_user.userid + order.MerchantOrderDB.verify_user_id = merchant_user.userid order.MerchantOrderDB.status = MerchantOrderStatus.VERIFIED - + # 对商家进行结算 account_manager = AccountManager(db) settlement_amount = float(order.MerchantProductDB.settlement_amount) diff --git a/app/models/merchant_order.py b/app/models/merchant_order.py index c7e0f0b..25defe1 100644 --- a/app/models/merchant_order.py +++ b/app/models/merchant_order.py @@ -40,6 +40,9 @@ class MerchantOrderDB(Base): class MerchantOrderCreate(BaseModel): merchant_product_id: int +class MerchantOrderVerify(BaseModel): + verify_code: str + class MerchantOrderInfo(BaseModel): id: int order_id: str