deliveryman-api/app/models/merchant_order.py

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(DECIMAL(10,1), 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: float
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