Kamixitong/app/models/order.py

68 lines
2.9 KiB
Python
Raw Permalink Normal View History

2025-11-19 22:49:24 +08:00
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}>'