Files
Django/orders/management/commands/seed_fake_grab_orders.py
2026-06-28 18:07:38 +08:00

155 lines
5.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""写入抢单大厅假单种子数据。用法: python manage.py seed_fake_grab_orders --club-id xq --leixing-id 1"""
import random
import time
from django.core.management.base import BaseCommand
from django.utils import timezone
from orders.models import FakeGrabOrder
DEFAULT_AVATAR = 'beijing/morentouxiang.jpg'
COMMON_TAIL = (
'下单凑七套,不卡保底,不要私藏变卖,私藏变卖老板必退款,'
'陪护也不能私藏,不能藏一丁点装备和变卖,不然必退款和罚款。'
)
# 7 个模板(各生成 2 条 = 14 条)
TEMPLATE_ROWS = [
{
'title': '2100W',
'description': f'打手选图保底2100W,{COMMON_TAIL}',
'amount': '35.00',
},
{
'title': '4光子鸡',
'description': (
'单据4个光子鸡不出一直打下单凑七套装备和收益都归老板'
'不卡保底,不要私藏变卖,私藏变卖老板必退款,陪护也不能私藏,'
'不能藏一丁点装备和变卖,不然必退款和罚款。'
),
'amount': '30.00',
},
{
'title': '3金光',
'description': (
'单局出3个金光下单凑七套装备和收益都归老板'
'不卡保底,不要私藏变卖,私藏变卖老板必退款,陪护也不能私藏,'
'不能藏一丁点装备和变卖,不然必退款和罚款。'
),
'amount': '20.00',
},
{
'title': '1500W',
'description': f'打手选图保底1500W,{COMMON_TAIL}',
'amount': '25.00',
},
{
'title': '300W',
'description': f'保底300w以上,{COMMON_TAIL}',
'amount': '6.00',
},
{
'title': '4金条',
'description': (
'单据4根金条不出一直打下单凑七套装备和收益都归老板'
'不卡保底,不要私藏变卖,私藏变卖老板必退款,陪护也不能私藏,'
'不能藏一丁点装备和变卖,不然必退款和罚款。'
),
'amount': '18.00',
},
{
'title': '1000W',
'description': f'打手选图保底1000W,{COMMON_TAIL}',
'amount': '15.00',
},
]
MERCHANT_NAMES = [
'官方直营店',
'接单秒结',
'没实力的别接',
'骂老板4千家',
]
# 14 条:平台 5 + 商家 9优质商家 6仅商家单
# 索引 0-13 对应 7 模板各 2 条
PLATFORM_INDEXES = {0, 1, 2, 3, 4}
PREMIUM_MERCHANT_INDEXES = {5, 6, 7, 8, 9, 10}
REMARK_INDEXES = {2, 5, 8, 11}
REMARK_TEXT = '打的好奖励鸡腿'
POOL_USER_IDS = ['3829104', '5829104', '1928374', '6649201', '7731045', '8812345']
def _gen_order_id(used):
while True:
oid = f'JD{int(time.time() * 1000)}{random.randint(1000, 9999)}'
if oid not in used:
used.add(oid)
return oid
class Command(BaseCommand):
help = '写入抢单大厅假单7 模板 ×2 = 14 条,可重复执行会先清理同俱乐部+类型旧 JD 假单)'
def add_arguments(self, parser):
parser.add_argument('--club-id', default='xq', help='俱乐部 ID默认 xq')
parser.add_argument('--leixing-id', type=int, default=1, help='商品类型 ID与抢单大厅 Tab 一致)')
parser.add_argument('--no-clear', action='store_true', help='不清理旧 JD 假单,直接追加(可能 ID 冲突)')
def handle(self, *args, **options):
club_id = (options['club_id'] or 'xq').strip()
leixing_id = int(options['leixing_id'])
now = timezone.now()
if not options['no_clear']:
deleted, _ = FakeGrabOrder.query.filter(
ClubID=club_id,
ProductTypeID=leixing_id,
OrderID__startswith='JD',
).delete()
self.stdout.write(f'已清理旧假单 {deleted}club={club_id}, leixing={leixing_id}')
used_ids = set()
expanded = []
for tpl in TEMPLATE_ROWS:
expanded.append(tpl)
expanded.append(tpl)
created = 0
for idx, tpl in enumerate(expanded):
is_platform = idx in PLATFORM_INDEXES
is_premium = idx in PREMIUM_MERCHANT_INDEXES and not is_platform
remark = REMARK_TEXT if idx in REMARK_INDEXES else ''
merchant_name = ''
if not is_platform:
merchant_name = MERCHANT_NAMES[idx % len(MERCHANT_NAMES)]
dispatcher_id = random.choice(POOL_USER_IDS)
FakeGrabOrder.query.create(
OrderID=_gen_order_id(used_ids),
Amount=tpl['amount'],
ProductTypeID=leixing_id,
Description=tpl['description'],
Remark=remark,
DispatcherUserID=dispatcher_id,
DispatcherAvatar=DEFAULT_AVATAR,
MerchantNickname=merchant_name,
IsPremiumMerchant=is_premium,
Platform=1 if is_platform else 2,
ClubID=club_id,
SortOrder=100 - idx,
CreateTime=now,
UpdateTime=now,
)
created += 1
self.stdout.write(self.style.SUCCESS(
f'假单种子完成:新增 {created} 条 | club={club_id} leixing_id={leixing_id} '
f'(平台单 {len(PLATFORM_INDEXES)} 商家单 {created - len(PLATFORM_INDEXES)} '
f'优质商家 {len(PREMIUM_MERCHANT_INDEXES)}'
))