增加限购功能。
This commit is contained in:
parent
35488ca919
commit
ef14928e96
@ -1,5 +1,6 @@
|
|||||||
from fastapi import APIRouter, Depends, HTTPException
|
from fastapi import APIRouter, Depends, HTTPException
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
|
from sqlalchemy import func
|
||||||
from typing import List
|
from typing import List
|
||||||
from app.models.merchant_order import (
|
from app.models.merchant_order import (
|
||||||
MerchantOrderDB,
|
MerchantOrderDB,
|
||||||
@ -35,6 +36,25 @@ async def create_merchant_order(
|
|||||||
if not product:
|
if not product:
|
||||||
return error_response(code=404, message="商品不存在")
|
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)
|
original_amount = float(product.sale_price)
|
||||||
pay_amount = original_amount
|
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.dialects.mysql import DECIMAL
|
||||||
from sqlalchemy.sql import func
|
from sqlalchemy.sql import func
|
||||||
from pydantic import BaseModel, Field
|
from pydantic import BaseModel, Field
|
||||||
@ -23,6 +23,7 @@ class MerchantProductDB(Base):
|
|||||||
sale_price = Column(Float, nullable=False) # 售价
|
sale_price = Column(Float, nullable=False) # 售价
|
||||||
settlement_amount = Column(DECIMAL(10,2), nullable=False) # 商家结算金额
|
settlement_amount = Column(DECIMAL(10,2), nullable=False) # 商家结算金额
|
||||||
tags = Column(String(200)) # 标签,逗号分隔
|
tags = Column(String(200)) # 标签,逗号分隔
|
||||||
|
purchase_limit = Column(Integer, nullable=False, default=0) # 限购次数,0表示不限购
|
||||||
create_time = Column(DateTime(timezone=True), server_default=func.now())
|
create_time = Column(DateTime(timezone=True), server_default=func.now())
|
||||||
update_time = Column(DateTime(timezone=True), onupdate=func.now())
|
update_time = Column(DateTime(timezone=True), onupdate=func.now())
|
||||||
status = Column(Enum(ProductStatus), nullable=False, default=ProductStatus.UNLISTING)
|
status = Column(Enum(ProductStatus), nullable=False, default=ProductStatus.UNLISTING)
|
||||||
@ -37,6 +38,7 @@ class MerchantProductCreate(BaseModel):
|
|||||||
sale_price: float = Field(..., gt=0)
|
sale_price: float = Field(..., gt=0)
|
||||||
settlement_amount: float = Field(..., gt=0)
|
settlement_amount: float = Field(..., gt=0)
|
||||||
tags: str = Field("", max_length=200)
|
tags: str = Field("", max_length=200)
|
||||||
|
purchase_limit: int = Field(0, ge=0) # 限购次数,默认0表示不限购
|
||||||
status: ProductStatus = ProductStatus.UNLISTING
|
status: ProductStatus = ProductStatus.UNLISTING
|
||||||
|
|
||||||
class MerchantProductUpdate(BaseModel):
|
class MerchantProductUpdate(BaseModel):
|
||||||
@ -46,6 +48,7 @@ class MerchantProductUpdate(BaseModel):
|
|||||||
sale_price: Optional[float] = Field(None, gt=0)
|
sale_price: Optional[float] = Field(None, gt=0)
|
||||||
settlement_amount: Optional[float] = Field(None, gt=0)
|
settlement_amount: Optional[float] = Field(None, gt=0)
|
||||||
tags: Optional[str] = Field(None, max_length=200)
|
tags: Optional[str] = Field(None, max_length=200)
|
||||||
|
purchase_limit: Optional[int] = Field(None, ge=0) # 限购次数,可选字段
|
||||||
status: Optional[ProductStatus] = None
|
status: Optional[ProductStatus] = None
|
||||||
|
|
||||||
class MerchantProductInfo(BaseModel):
|
class MerchantProductInfo(BaseModel):
|
||||||
@ -58,6 +61,7 @@ class MerchantProductInfo(BaseModel):
|
|||||||
sale_price: float
|
sale_price: float
|
||||||
settlement_amount: float
|
settlement_amount: float
|
||||||
tags: str
|
tags: str
|
||||||
|
purchase_limit: int # 限购次数
|
||||||
create_time: datetime
|
create_time: datetime
|
||||||
update_time: Optional[datetime]
|
update_time: Optional[datetime]
|
||||||
status: ProductStatus
|
status: ProductStatus
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user