核销订单修改。

This commit is contained in:
aaron 2025-02-14 00:10:46 +08:00
parent 16e398c744
commit 2c6b54ab65
3 changed files with 47 additions and 11 deletions

View File

@ -43,3 +43,11 @@ async def get_deliveryman_user(
if UserRole.DELIVERYMAN not in current_user.roles: if UserRole.DELIVERYMAN not in current_user.roles:
raise HTTPException(status_code=403, detail="需要配送员权限") raise HTTPException(status_code=403, detail="需要配送员权限")
return current_user 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

View File

@ -10,7 +10,7 @@ from app.models.merchant_order import (
) )
from app.models.merchant_product import MerchantProductDB from app.models.merchant_product import MerchantProductDB
from app.models.database import get_db 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.models.user import UserDB
from app.core.response import success_response, error_response, ResponseModel from app.core.response import success_response, error_response, ResponseModel
from datetime import datetime, timezone from datetime import datetime, timezone
@ -28,6 +28,7 @@ from fastapi import UploadFile
from app.core.qcloud import qcloud_manager from app.core.qcloud import qcloud_manager
from app.core.imageprocessor import process_image, ImageFormat from app.core.imageprocessor import process_image, ImageFormat
from starlette.datastructures import Headers from starlette.datastructures import Headers
from app.models.merchant_order import MerchantOrderVerify
router = APIRouter() router = APIRouter()
@ -144,12 +145,36 @@ async def get_user_orders(
return success_response(data=order_list) return success_response(data=order_list)
@router.post("/{order_id}/verify", response_model=ResponseModel) @router.get("/merchant/query_verify", response_model=ResponseModel)
async def verify_order( async def query_verify(
order_id: str, request: MerchantOrderVerify,
verify_code: str,
db: Session = Depends(get_db), 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, MerchantDB,
MerchantProductDB.merchant_id == MerchantDB.id MerchantProductDB.merchant_id == MerchantDB.id
).filter( ).filter(
MerchantOrderDB.order_id == order_id, MerchantOrderDB.order_verify_code == request.verify_code,
MerchantOrderDB.order_verify_code == verify_code, MerchantOrderDB.status == MerchantOrderStatus.UNVERIFIED,
MerchantOrderDB.verify_time.is_(None) # 未核销 MerchantDB.user_id == merchant_user.userid
).first() ).first()
if not order: if not order:
@ -175,7 +200,7 @@ async def verify_order(
try: try:
# 更新核销时间和核销用户 # 更新核销时间和核销用户
order.MerchantOrderDB.verify_time = datetime.now(timezone.utc) 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 order.MerchantOrderDB.status = MerchantOrderStatus.VERIFIED
# 对商家进行结算 # 对商家进行结算

View File

@ -40,6 +40,9 @@ class MerchantOrderDB(Base):
class MerchantOrderCreate(BaseModel): class MerchantOrderCreate(BaseModel):
merchant_product_id: int merchant_product_id: int
class MerchantOrderVerify(BaseModel):
verify_code: str
class MerchantOrderInfo(BaseModel): class MerchantOrderInfo(BaseModel):
id: int id: int
order_id: str order_id: str