增加限购功能。
This commit is contained in:
parent
35488ca919
commit
ef14928e96
@ -1,5 +1,6 @@
|
||||
from fastapi import APIRouter, Depends, HTTPException
|
||||
from sqlalchemy.orm import Session
|
||||
from sqlalchemy import func
|
||||
from typing import List
|
||||
from app.models.merchant_order import (
|
||||
MerchantOrderDB,
|
||||
@ -35,6 +36,25 @@ async def create_merchant_order(
|
||||
if not product:
|
||||
return error_response(code=404, message="商品不存在")
|
||||
|
||||
# 检查限购
|
||||
if product.purchase_limit:
|
||||
# 查询用户已购买数量
|
||||
purchased_count = db.query(func.count(MerchantOrderDB.id)).filter(
|
||||
MerchantOrderDB.user_id == current_user.userid,
|
||||
MerchantOrderDB.merchant_product_id == product.id,
|
||||
MerchantOrderDB.status.in_([
|
||||
MerchantOrderStatus.CREATED,
|
||||
MerchantOrderStatus.VERIFIED,
|
||||
MerchantOrderStatus.UNVERIFIED
|
||||
])
|
||||
).scalar()
|
||||
|
||||
if purchased_count >= product.purchase_limit:
|
||||
return error_response(
|
||||
code=400,
|
||||
message=f"该商品限购{product.purchase_limit}次,您已达到限购次数"
|
||||
)
|
||||
|
||||
original_amount = float(product.sale_price)
|
||||
pay_amount = original_amount
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
from sqlalchemy import Column, String, Integer, Float, DateTime, ForeignKey, Enum
|
||||
from sqlalchemy import Column, String, Integer, Float, DateTime, ForeignKey, Enum, Boolean
|
||||
from sqlalchemy.dialects.mysql import DECIMAL
|
||||
from sqlalchemy.sql import func
|
||||
from pydantic import BaseModel, Field
|
||||
@ -23,6 +23,7 @@ class MerchantProductDB(Base):
|
||||
sale_price = Column(Float, nullable=False) # 售价
|
||||
settlement_amount = Column(DECIMAL(10,2), nullable=False) # 商家结算金额
|
||||
tags = Column(String(200)) # 标签,逗号分隔
|
||||
purchase_limit = Column(Integer, nullable=False, default=0) # 限购次数,0表示不限购
|
||||
create_time = Column(DateTime(timezone=True), server_default=func.now())
|
||||
update_time = Column(DateTime(timezone=True), onupdate=func.now())
|
||||
status = Column(Enum(ProductStatus), nullable=False, default=ProductStatus.UNLISTING)
|
||||
@ -37,6 +38,7 @@ class MerchantProductCreate(BaseModel):
|
||||
sale_price: float = Field(..., gt=0)
|
||||
settlement_amount: float = Field(..., gt=0)
|
||||
tags: str = Field("", max_length=200)
|
||||
purchase_limit: int = Field(0, ge=0) # 限购次数,默认0表示不限购
|
||||
status: ProductStatus = ProductStatus.UNLISTING
|
||||
|
||||
class MerchantProductUpdate(BaseModel):
|
||||
@ -46,6 +48,7 @@ class MerchantProductUpdate(BaseModel):
|
||||
sale_price: Optional[float] = Field(None, gt=0)
|
||||
settlement_amount: Optional[float] = Field(None, gt=0)
|
||||
tags: Optional[str] = Field(None, max_length=200)
|
||||
purchase_limit: Optional[int] = Field(None, ge=0) # 限购次数,可选字段
|
||||
status: Optional[ProductStatus] = None
|
||||
|
||||
class MerchantProductInfo(BaseModel):
|
||||
@ -58,9 +61,10 @@ class MerchantProductInfo(BaseModel):
|
||||
sale_price: float
|
||||
settlement_amount: float
|
||||
tags: str
|
||||
purchase_limit: int # 限购次数
|
||||
create_time: datetime
|
||||
update_time: Optional[datetime]
|
||||
status: ProductStatus
|
||||
|
||||
class Config:
|
||||
from_attributes = True
|
||||
from_attributes = True
|
||||
Loading…
Reference in New Issue
Block a user