from sqlalchemy import Column, String, Integer, DateTime, ForeignKey, Enum, DECIMAL, Boolean from sqlalchemy.sql import func from pydantic import BaseModel, Field from typing import Optional from datetime import datetime from .database import Base import time import enum class MerchantPayOrderStatus(str, enum.Enum): UNPAID = "UNPAID" # 未支付 PAID = "PAID" # 已支付 REFUNDING = "REFUNDING" # 退款中 REFUNDED = "REFUNDED" # 已退款 class MerchantPayOrderDB(Base): __tablename__ = "merchant_pay_orders" id = Column(Integer, primary_key=True, autoincrement=True) order_id = Column(String(20), unique=True, nullable=False) merchant_id = Column(Integer, ForeignKey("merchants.id"), nullable=False) user_id = Column(Integer, ForeignKey("users.userid"), nullable=False) amount = Column(DECIMAL(10,2), nullable=False) gift_points = Column(DECIMAL(10,1), nullable=False, default=0) status = Column(Enum(MerchantPayOrderStatus), nullable=False, default=MerchantPayOrderStatus.UNPAID) pay_status = Column(Boolean, nullable=False, default=False) create_time = Column(DateTime(timezone=True), server_default=func.now()) update_time = Column(DateTime(timezone=True), onupdate=func.now()) pay_time = Column(DateTime(timezone=True), nullable=True) transaction_id = Column(String(64)) # 微信支付交易号 class MerchantPayOrderCreate(BaseModel): merchant_id: int amount: float = Field(..., gt=0) class MerchantPayOrderInfo(BaseModel): id: int order_id: str merchant_id: int user_id: int amount: float gift_points: float status: MerchantPayOrderStatus create_time: datetime update_time: Optional[datetime] pay_time: Optional[datetime] merchant_name: Optional[str] = None merchant_image: Optional[str] = None class Config: from_attributes = True