""" 支付模型 """ from datetime import datetime from config.database import db class Payment(db.Model): """支付记录模型""" __tablename__ = 'payments' id = db.Column(db.Integer, primary_key=True) order_id = db.Column(db.Integer, db.ForeignKey('orders.id'), nullable=False) payment_sn = db.Column(db.String(64), unique=True, nullable=False) payment_method = db.Column(db.String(20), nullable=False) amount = db.Column(db.Numeric(10, 2), nullable=False) status = db.Column(db.Integer, default=1) # 1-待支付 2-支付成功 3-支付失败 4-已退款 third_party_sn = db.Column(db.String(100)) # 第三方支付流水号 callback_data = db.Column(db.Text) # 支付回调数据 paid_at = db.Column(db.DateTime) created_at = db.Column(db.DateTime, default=datetime.utcnow) updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) # 关联关系 order = db.relationship('Order', backref='payments') # 状态常量 STATUS_PENDING = 1 # 待支付 STATUS_SUCCESS = 2 # 支付成功 STATUS_FAILED = 3 # 支付失败 STATUS_REFUNDED = 4 # 已退款 STATUS_CHOICES = { STATUS_PENDING: '待支付', STATUS_SUCCESS: '支付成功', STATUS_FAILED: '支付失败', STATUS_REFUNDED: '已退款' } def get_status_text(self): """获取状态文本""" return self.STATUS_CHOICES.get(self.status, '未知状态') def to_dict(self): """转换为字典""" return { 'id': self.id, 'payment_sn': self.payment_sn, 'payment_method': self.payment_method, 'amount': float(self.amount), 'status': self.status, 'status_text': self.get_status_text(), 'third_party_sn': self.third_party_sn, 'paid_at': self.paid_at.isoformat() if self.paid_at else None, 'created_at': self.created_at.isoformat() if self.created_at else None } @classmethod def generate_payment_sn(cls): """生成支付流水号""" import time import random timestamp = str(int(time.time())) random_str = str(random.randint(100000, 999999)) return f"PAY{timestamp}{random_str}" def __repr__(self): return f''