59 lines
2.3 KiB
Python
59 lines
2.3 KiB
Python
from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, Enum, DECIMAL, JSON
|
|
from sqlalchemy.sql import func
|
|
from pydantic import BaseModel, Field
|
|
from typing import Optional, List
|
|
from datetime import datetime
|
|
from .database import Base
|
|
import enum
|
|
|
|
class AdditionalFeeResult(str, enum.Enum):
|
|
PENDING = "PENDING" # 待处理
|
|
ACCEPTED = "ACCEPTED" # 已接受
|
|
REJECTED = "REJECTED" # 已拒绝
|
|
|
|
class OrderAdditionalFeeDB(Base):
|
|
__tablename__ = "order_additional_fees"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
orderid = Column(String(32), ForeignKey("shipping_orders.orderid"), nullable=False, index=True)
|
|
fee_order_id = Column(String(32), nullable=False, unique=True) # 子订单号,用于支付标识
|
|
order_user_id = Column(Integer, ForeignKey("users.userid"), nullable=False)
|
|
deliveryman_id = Column(Integer, ForeignKey("users.userid"), nullable=False)
|
|
reason = Column(String(200), nullable=False)
|
|
photo_urls = Column(JSON, nullable=True) # 存储照片URL的JSON数组
|
|
additional_fee_amount = Column(DECIMAL(10, 2), nullable=False)
|
|
result = Column(Enum(AdditionalFeeResult), nullable=False, default=AdditionalFeeResult.PENDING)
|
|
create_time = Column(DateTime(timezone=True), server_default=func.now())
|
|
update_time = Column(DateTime(timezone=True), onupdate=func.now())
|
|
transaction_id = Column(String(64), nullable=True) # 微信支付交易号
|
|
|
|
# Pydantic 模型
|
|
class OrderAdditionalFeeCreate(BaseModel):
|
|
orderid: str
|
|
reason: str = Field(..., max_length=200)
|
|
photo_urls: Optional[List[str]] = None
|
|
additional_fee_amount: float = Field(..., gt=0)
|
|
|
|
class OrderAdditionalFeeUpdate(BaseModel):
|
|
id: int
|
|
reason: str
|
|
photo_urls: Optional[List[str]]
|
|
additional_fee_amount: float
|
|
|
|
class OrderAdditionalFeeInfo(BaseModel):
|
|
id: int
|
|
orderid: str
|
|
order_user_id: int
|
|
deliveryman_id: int
|
|
deliveryman_name: Optional[str] = None
|
|
deliveryman_phone: Optional[str] = None
|
|
deliveryman_avatar: Optional[str] = None
|
|
reason: str
|
|
photo_urls: Optional[List[str]]
|
|
additional_fee_amount: float
|
|
result: AdditionalFeeResult
|
|
create_time: datetime
|
|
update_time: Optional[datetime] = None
|
|
|
|
class Config:
|
|
from_attributes = True |