deliveryman-api/app/models/order_additional_fee.py
2025-04-01 11:28:40 +08:00

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