134 lines
4.7 KiB
Python
134 lines
4.7 KiB
Python
"""星之界(xzj)邀请链种子数据:自动插入组长+管事(含邀请码),无需先登录小程序。"""
|
||
from django.core.management import call_command
|
||
from django.core.management.base import BaseCommand
|
||
from django.db import transaction
|
||
|
||
from jituan.models import Club, ClubHuiyuanPrice
|
||
from users.business_models import User
|
||
from users.models import UserBoss, UserGuanshi, UserZuzhang
|
||
from utils.invitationcode_utils import CreateInvitationCode
|
||
|
||
CLUB_ID = 'xzj'
|
||
WX_APPID = 'wxdefa454152e78a03'
|
||
|
||
# 固定种子账号(可重复执行,幂等)
|
||
SEED_ZUZHANG = {
|
||
'UserUID': '9900001',
|
||
'OpenID': 'xzj_seed_openid_zuzhang_v1',
|
||
'Phone': '19900000001',
|
||
'UserName': 'xzj_seed_zuzhang',
|
||
'nickname': '星之界种子组长',
|
||
}
|
||
SEED_GUANSHI = {
|
||
'UserUID': '9900002',
|
||
'OpenID': 'xzj_seed_openid_guanshi_v1',
|
||
'Phone': '19900000002',
|
||
'UserName': 'xzj_seed_guanshi',
|
||
'nickname': '星之界种子管事',
|
||
}
|
||
|
||
|
||
def _ensure_club():
|
||
if Club.query.filter(club_id=CLUB_ID).exists():
|
||
return
|
||
call_command(
|
||
'create_club',
|
||
CLUB_ID,
|
||
name='星之界电竞',
|
||
wx_appid=WX_APPID,
|
||
)
|
||
|
||
|
||
def _ensure_user(meta):
|
||
user = User.query.filter(UserUID=meta['UserUID']).first()
|
||
if not user:
|
||
user = User.query.filter(OpenID=meta['OpenID']).first()
|
||
if user:
|
||
if user.ClubID != CLUB_ID:
|
||
user.ClubID = CLUB_ID
|
||
user.save(update_fields=['ClubID'])
|
||
return user, False
|
||
|
||
user = User.query.create(
|
||
UserUID=meta['UserUID'],
|
||
UserName=meta['UserName'],
|
||
OpenID=meta['OpenID'],
|
||
Phone=meta['Phone'],
|
||
ClubID=CLUB_ID,
|
||
)
|
||
UserBoss.query.create(user=user, nickname=meta['nickname'])
|
||
return user, True
|
||
|
||
|
||
def _ensure_zuzhang(user):
|
||
if hasattr(user, 'ZuzhangProfile'):
|
||
return user.ZuzhangProfile, False
|
||
yaoqingma = CreateInvitationCode(str(user.UserUID))
|
||
z = UserZuzhang.query.create(
|
||
user=user,
|
||
yaoqingma=yaoqingma,
|
||
zhuangtai=1,
|
||
)
|
||
return z, True
|
||
|
||
|
||
def _ensure_guanshi(user, zuzhang_uid):
|
||
if hasattr(user, 'GuanshiProfile'):
|
||
return user.GuanshiProfile, False
|
||
yaoqingma = CreateInvitationCode(str(user.UserUID))
|
||
g = UserGuanshi.query.create(
|
||
user=user,
|
||
yaoqingma=yaoqingma,
|
||
yaoqingren=zuzhang_uid,
|
||
zhuangtai=1,
|
||
)
|
||
return g, True
|
||
|
||
|
||
class Command(BaseCommand):
|
||
help = '插入星之界种子组长+管事(含邀请码),一条命令即可邀请注册'
|
||
|
||
def add_arguments(self, parser):
|
||
parser.add_argument(
|
||
'--force-new-codes',
|
||
action='store_true',
|
||
help='已存在时重新生成邀请码(慎用)',
|
||
)
|
||
|
||
def handle(self, *args, **options):
|
||
with transaction.atomic():
|
||
_ensure_club()
|
||
|
||
zz_user, zz_new = _ensure_user(SEED_ZUZHANG)
|
||
zz_profile, zz_profile_new = _ensure_zuzhang(zz_user)
|
||
if options.get('force_new_codes') and not zz_profile_new:
|
||
zz_profile.yaoqingma = CreateInvitationCode(str(zz_user.UserUID))
|
||
zz_profile.save(update_fields=['yaoqingma'])
|
||
|
||
gs_user, gs_new = _ensure_user(SEED_GUANSHI)
|
||
gs_profile, gs_profile_new = _ensure_guanshi(gs_user, zz_user.UserUID)
|
||
if options.get('force_new_codes') and not gs_profile_new:
|
||
gs_profile.yaoqingma = CreateInvitationCode(str(gs_user.UserUID))
|
||
gs_profile.save(update_fields=['yaoqingma'])
|
||
|
||
price_cnt = ClubHuiyuanPrice.query.filter(club_id=CLUB_ID).count()
|
||
|
||
self.stdout.write(self.style.SUCCESS('=' * 60))
|
||
self.stdout.write(self.style.SUCCESS('星之界 xzj 邀请链种子数据已就绪'))
|
||
self.stdout.write(self.style.SUCCESS('=' * 60))
|
||
self.stdout.write(f'club_huiyuan_price 条数: {price_cnt}(与星阙相同则需后台 xzj 视图下单独改价)')
|
||
self.stdout.write('')
|
||
self.stdout.write('【组长】管事注册用这个邀请码(guanshizhuce / zuzhangyqmzc):')
|
||
self.stdout.write(f' UserUID={zz_user.UserUID} Phone={SEED_ZUZHANG["Phone"]}')
|
||
self.stdout.write(f' 组长邀请码 inviteCode = {zz_profile.yaoqingma}')
|
||
self.stdout.write('')
|
||
self.stdout.write('【管事】打手注册用这个邀请码(dashouzhuce):')
|
||
self.stdout.write(f' UserUID={gs_user.UserUID} Phone={SEED_GUANSHI["Phone"]}')
|
||
self.stdout.write(f' 管事邀请码 inviteCode = {gs_profile.yaoqingma}')
|
||
self.stdout.write('')
|
||
self.stdout.write('新建: 组长=%s 管事=%s' % (
|
||
'是' if zz_new or zz_profile_new else '否(已存在)',
|
||
'是' if gs_new or gs_profile_new else '否(已存在)',
|
||
))
|
||
self.stdout.write(self.style.SUCCESS('=' * 60))
|