115 lines
4.3 KiB
Python
115 lines
4.3 KiB
Python
"""
|
||
创建带规格的测试商品
|
||
"""
|
||
from app.models.product import Product, Category, ProductInventory, SpecName, SpecValue
|
||
from config.database import db
|
||
import json
|
||
|
||
def create_test_product():
|
||
"""创建测试商品"""
|
||
try:
|
||
# 创建或获取测试分类
|
||
category = Category.query.filter_by(name='测试分类').first()
|
||
if not category:
|
||
category = Category(
|
||
name='测试分类',
|
||
parent_id=0,
|
||
level=1,
|
||
sort_order=1,
|
||
is_active=1
|
||
)
|
||
db.session.add(category)
|
||
db.session.flush()
|
||
|
||
# 创建测试商品
|
||
product = Product(
|
||
name='测试商品 - 多规格T恤',
|
||
category_id=category.id,
|
||
brand='测试品牌',
|
||
price=99.00,
|
||
original_price=129.00,
|
||
description='这是一件多规格测试商品,支持颜色和尺寸选择',
|
||
has_specs=1,
|
||
status=1,
|
||
weight=0.3
|
||
)
|
||
db.session.add(product)
|
||
db.session.flush()
|
||
|
||
# 创建规格名称(如果不存在)
|
||
color_spec = SpecName.query.filter_by(name='颜色').first()
|
||
if not color_spec:
|
||
color_spec = SpecName(name='颜色', sort_order=1)
|
||
db.session.add(color_spec)
|
||
db.session.flush()
|
||
|
||
size_spec = SpecName.query.filter_by(name='尺寸').first()
|
||
if not size_spec:
|
||
size_spec = SpecName(name='尺寸', sort_order=2)
|
||
db.session.add(size_spec)
|
||
db.session.flush()
|
||
|
||
# 创建规格值(如果不存在)
|
||
colors = ['红色', '蓝色', '黑色']
|
||
sizes = ['S', 'M', 'L', 'XL']
|
||
|
||
for color in colors:
|
||
color_value = SpecValue.query.filter_by(spec_name_id=color_spec.id, value=color).first()
|
||
if not color_value:
|
||
color_value = SpecValue(spec_name_id=color_spec.id, value=color)
|
||
db.session.add(color_value)
|
||
|
||
for size in sizes:
|
||
size_value = SpecValue.query.filter_by(spec_name_id=size_spec.id, value=size).first()
|
||
if not size_value:
|
||
size_value = SpecValue(spec_name_id=size_spec.id, value=size)
|
||
db.session.add(size_value)
|
||
|
||
db.session.flush()
|
||
|
||
# 创建商品库存(多个SKU)
|
||
sku_data = [
|
||
{'color': '红色', 'size': 'S', 'stock': 10, 'price_adj': 0, 'is_default': 1},
|
||
{'color': '红色', 'size': 'M', 'stock': 15, 'price_adj': 0, 'is_default': 0},
|
||
{'color': '红色', 'size': 'L', 'stock': 12, 'price_adj': 0, 'is_default': 0},
|
||
{'color': '蓝色', 'size': 'S', 'stock': 8, 'price_adj': 5, 'is_default': 0},
|
||
{'color': '蓝色', 'size': 'M', 'stock': 20, 'price_adj': 5, 'is_default': 0},
|
||
{'color': '蓝色', 'size': 'L', 'stock': 18, 'price_adj': 5, 'is_default': 0},
|
||
{'color': '黑色', 'size': 'M', 'stock': 25, 'price_adj': -5, 'is_default': 0},
|
||
{'color': '黑色', 'size': 'L', 'stock': 22, 'price_adj': -5, 'is_default': 0},
|
||
{'color': '黑色', 'size': 'XL', 'stock': 15, 'price_adj': 10, 'is_default': 0},
|
||
]
|
||
|
||
for i, sku_info in enumerate(sku_data):
|
||
spec_combination = {'颜色': sku_info['color'], '尺寸': sku_info['size']}
|
||
sku_code = f"TST-{sku_info['color'][:1]}{sku_info['size']}-{product.id:03d}"
|
||
|
||
inventory = ProductInventory(
|
||
product_id=product.id,
|
||
sku_code=sku_code,
|
||
spec_combination=spec_combination,
|
||
price_adjustment=sku_info['price_adj'],
|
||
stock=sku_info['stock'],
|
||
warning_stock=5,
|
||
is_default=sku_info['is_default'],
|
||
status=1
|
||
)
|
||
db.session.add(inventory)
|
||
|
||
db.session.commit()
|
||
print(f"成功创建测试商品: {product.name} (ID: {product.id})")
|
||
print(f"创建了 {len(sku_data)} 个SKU")
|
||
return product.id
|
||
|
||
except Exception as e:
|
||
db.session.rollback()
|
||
print(f"创建失败: {str(e)}")
|
||
return None
|
||
|
||
if __name__ == '__main__':
|
||
from app import create_app
|
||
app = create_app()
|
||
|
||
with app.app_context():
|
||
create_test_product()
|