65 lines
2.5 KiB
Python
65 lines
2.5 KiB
Python
from sqlalchemy import Column, String, Integer, DateTime, ForeignKey, Enum, Boolean
|
|
from sqlalchemy.dialects.mysql import DECIMAL
|
|
from sqlalchemy.sql import func
|
|
from pydantic import BaseModel, Field
|
|
from typing import Optional
|
|
from datetime import datetime
|
|
from .database import Base
|
|
import random
|
|
import time
|
|
import enum
|
|
|
|
class MerchantOrderStatus(str, enum.Enum):
|
|
CREATED = "CREATED" # 已下单
|
|
UNVERIFIED = "UNVERIFIED" # 未核销
|
|
VERIFIED = "VERIFIED" # 已核销
|
|
REFUNDING = "REFUNDING" # 退款中
|
|
REFUNDED = "REFUNDED" # 已退款
|
|
|
|
class MerchantOrderDB(Base):
|
|
__tablename__ = "merchant_orders"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
order_id = Column(String(15), unique=True, nullable=False)
|
|
qrcode_url = Column(String(200)) # 核销码二维码图片地址
|
|
user_id = Column(Integer, ForeignKey("users.userid"), nullable=False)
|
|
merchant_product_id = Column(Integer, ForeignKey("merchant_products.id"), nullable=False)
|
|
order_amount = Column(DECIMAL(10,2), nullable=False)
|
|
pay_amount = Column(DECIMAL(10,2), nullable=False, default=0)
|
|
gift_points = Column(Integer, nullable=False, default=0) # 赠送的积分
|
|
status = Column(Enum(MerchantOrderStatus), nullable=False, default=MerchantOrderStatus.CREATED)
|
|
pay_status = Column(Boolean, nullable=False, default=False)
|
|
order_verify_code = Column(String(21), unique=True, nullable=False)
|
|
verify_time = Column(DateTime(timezone=True), nullable=True)
|
|
verify_user_id = Column(Integer, ForeignKey("users.userid"), nullable=True)
|
|
create_time = Column(DateTime(timezone=True), server_default=func.now())
|
|
update_time = Column(DateTime(timezone=True), onupdate=func.now())
|
|
transaction_id = Column(String(64)) # 微信支付交易号
|
|
pay_time = Column(DateTime(timezone=True), nullable=True)
|
|
|
|
class MerchantOrderCreate(BaseModel):
|
|
merchant_product_id: int
|
|
|
|
class MerchantOrderInfo(BaseModel):
|
|
id: int
|
|
order_id: str
|
|
user_id: int
|
|
merchant_product_id: int
|
|
order_amount: float
|
|
pay_amount: float
|
|
gift_points: int
|
|
status: MerchantOrderStatus
|
|
order_verify_code: str
|
|
verify_time: Optional[datetime]
|
|
verify_user_id: Optional[int]
|
|
create_time: datetime
|
|
update_time: Optional[datetime]
|
|
product_name: Optional[str] = None
|
|
product_image: Optional[str] = None
|
|
product_price: Optional[float] = None
|
|
merchant_name: Optional[str] = None
|
|
merchant_address: Optional[str] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|