from datetime import datetime from app import db class Order(db.Model): """订单模型""" __tablename__ = 'order' order_id = db.Column(db.Integer, primary_key=True) order_number = db.Column(db.String(32), unique=True, nullable=False, index=True) # 订单号 product_id = db.Column(db.String(32), db.ForeignKey('product.product_id'), nullable=False) package_id = db.Column(db.String(64), nullable=False) # 套餐ID contact_person = db.Column(db.String(64), nullable=False) # 联系人 phone = db.Column(db.String(20), nullable=False) # 手机号 quantity = db.Column(db.Integer, nullable=False, default=1) # 数量 amount = db.Column(db.Float, nullable=False) # 金额 status = db.Column(db.Integer, nullable=False, default=0) # 0=待支付, 1=已支付, 2=已取消, 3=已完成 payment_method = db.Column(db.String(20), nullable=True) # 支付方式 payment_time = db.Column(db.DateTime, nullable=True) # 支付时间 create_time = db.Column(db.DateTime, default=datetime.utcnow) update_time = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) # 关联关系 product = db.relationship('Product', backref='orders') def __init__(self, **kwargs): super(Order, self).__init__(**kwargs) if not self.order_number: self.order_number = self.generate_order_number() @classmethod def generate_order_number(cls): """生成订单号""" import time import random return f"ORD{int(time.time())}{random.randint(100, 999)}" def get_status_name(self): """获取状态名称""" status_map = { 0: '待支付', 1: '已支付', 2: '已取消', 3: '已完成' } return status_map.get(self.status, '未知') def to_dict(self): """转换为字典""" return { 'order_id': self.order_id, 'order_number': self.order_number, 'product_id': self.product_id, 'product_name': self.product.product_name if self.product and hasattr(self.product, 'product_name') else None, 'package_id': self.package_id, 'contact_person': self.contact_person, 'phone': self.phone, 'quantity': self.quantity, 'amount': self.amount, 'status': self.status, 'status_name': self.get_status_name(), 'payment_method': self.payment_method, 'payment_time': self.payment_time.strftime('%Y-%m-%d %H:%M:%S') if self.payment_time else None, 'create_time': self.create_time.strftime('%Y-%m-%d %H:%M:%S') if self.create_time else None, 'update_time': self.update_time.strftime('%Y-%m-%d %H:%M:%S') if self.update_time else None } def __repr__(self): return f''