68 lines
2.9 KiB
Python
68 lines
2.9 KiB
Python
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'<Order {self.order_number}>' |