Kamixitong/app/models/package.py

74 lines
2.9 KiB
Python
Raw Normal View History

2025-11-22 16:48:45 +08:00
from datetime import datetime
from app import db
class Package(db.Model):
"""产品套餐模型"""
__tablename__ = 'package'
package_id = db.Column(db.String(64), primary_key=True) # 套餐ID
product_id = db.Column(db.String(32), db.ForeignKey('product.product_id'), nullable=False) # 关联产品ID
name = db.Column(db.String(64), nullable=False) # 套餐名称
description = db.Column(db.Text, nullable=True) # 套餐描述
price = db.Column(db.Float, nullable=False) # 价格
duration = db.Column(db.Integer, nullable=False) # 时长(天)
max_devices = db.Column(db.Integer, nullable=False, default=1) # 最大设备数
stock = db.Column(db.Integer, nullable=False, default=-1) # 库存,-1表示无限
status = db.Column(db.Integer, nullable=False, default=1) # 0=禁用, 1=启用
sort_order = db.Column(db.Integer, nullable=False, default=0) # 排序
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='packages')
def __init__(self, **kwargs):
super(Package, self).__init__(**kwargs)
if not self.package_id:
# 自动生成套餐ID
import uuid
self.package_id = f"PKG_{uuid.uuid4().hex[:8]}".upper()
def is_enabled(self):
"""套餐是否启用"""
return self.status == 1
def has_stock(self):
"""是否有库存"""
return self.stock == -1 or self.stock > 0
def get_duration_type(self):
"""获取时长类型"""
if self.duration == -1:
return '永久卡'
elif self.duration == 1:
return '天卡'
elif self.duration == 30:
return '月卡'
elif self.duration == 90:
return '季卡'
elif self.duration == 365:
return '年卡'
else:
return f'{self.duration}天卡'
def to_dict(self):
"""转换为字典"""
return {
'package_id': self.package_id,
'product_id': self.product_id,
'name': self.name,
'description': self.description,
'price': self.price,
'duration': self.duration,
'duration_text': self.get_duration_type(),
'max_devices': self.max_devices,
'stock': self.stock,
'status': self.status,
'status_name': '启用' if self.status == 1 else '禁用',
'sort_order': self.sort_order,
'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'<Package {self.name}>'