扩展 club_huiyuan_price/huiyuangoumai/czjilu/gsfenhong 字段;微信购会员强制写 czjilu+收支入账;formal_cishu 仅统计正式已支付单;关闭余额购会员;俱乐部上架/下架 API。 Co-authored-by: Cursor <cursoragent@cursor.com>
111 lines
5.0 KiB
Python
111 lines
5.0 KiB
Python
"""从 xq 模板复制配置,创建新子公司俱乐部。"""
|
||
from decimal import Decimal
|
||
|
||
from django.core.management.base import BaseCommand, CommandError
|
||
from django.db import transaction
|
||
|
||
from jituan.constants import CLUB_ID_DEFAULT
|
||
from jituan.models import Club, ClubHuiyuanPrice, ClubLilubiao, ClubTixianQuota, ClubWithdrawConfig
|
||
from jituan.services.szjilu_accounting import normalize_szjilu_club_id
|
||
from jituan.services.display_config import copy_display_config
|
||
from config.models import Szjilu
|
||
|
||
|
||
class Command(BaseCommand):
|
||
help = '从 xq 复制支付/会员价/利率配置,创建新俱乐部'
|
||
|
||
def add_arguments(self, parser):
|
||
parser.add_argument('club_id', type=str, help='新俱乐部 ID,如 xy')
|
||
parser.add_argument('--name', type=str, required=True, help='展示名称')
|
||
parser.add_argument('--wx-appid', type=str, default='', help='小程序 appid')
|
||
parser.add_argument('--from-club', type=str, default=CLUB_ID_DEFAULT, help='模板俱乐部')
|
||
|
||
def handle(self, *args, **options):
|
||
new_id = (options['club_id'] or '').strip()
|
||
name = (options['name'] or '').strip()
|
||
template_id = normalize_szjilu_club_id(options.get('from_club'))
|
||
|
||
if not new_id or len(new_id) > 16:
|
||
raise CommandError('club_id 无效')
|
||
if new_id == template_id:
|
||
raise CommandError('新 club_id 不能与模板相同')
|
||
|
||
try:
|
||
template = Club.query.get(club_id=template_id)
|
||
except Club.DoesNotExist:
|
||
raise CommandError(f'模板俱乐部 {template_id} 不存在,请先 seed_club_xq')
|
||
|
||
with transaction.atomic():
|
||
if Club.query.filter(club_id=new_id).exists():
|
||
raise CommandError(f'俱乐部 {new_id} 已存在')
|
||
|
||
Club.query.create(
|
||
club_id=new_id,
|
||
name=name,
|
||
status=1,
|
||
wx_appid=options.get('wx_appid') or template.wx_appid,
|
||
wx_secret=template.wx_secret,
|
||
mch_id=template.mch_id,
|
||
pay_app_id=template.pay_app_id or options.get('wx_appid') or template.wx_appid,
|
||
api_v3_key=template.api_v3_key,
|
||
cert_serial_no=template.cert_serial_no,
|
||
private_key_path=template.private_key_path,
|
||
platform_cert_dir=template.platform_cert_dir,
|
||
official_appid=template.official_appid,
|
||
official_secret=template.official_secret,
|
||
official_token=template.official_token,
|
||
encoding_aes_key=template.encoding_aes_key,
|
||
template_id=template.template_id,
|
||
template_max_per_minute=template.template_max_per_minute,
|
||
h5_domain=template.h5_domain,
|
||
oss_prefix=template.oss_prefix or new_id,
|
||
goeasy_appkey=template.goeasy_appkey,
|
||
goeasy_secret=template.goeasy_secret,
|
||
config_json=dict(template.config_json or {}),
|
||
sort_order=template.sort_order + 1,
|
||
)
|
||
|
||
for row in ClubHuiyuanPrice.query.filter(club_id=template_id):
|
||
ClubHuiyuanPrice.query.create(
|
||
club_id=new_id,
|
||
huiyuan_id=row.huiyuan_id,
|
||
jiage=row.jiage or Decimal('0'),
|
||
guanshifc=row.guanshifc or Decimal('0'),
|
||
zuzhangfc=row.zuzhangfc or Decimal('0'),
|
||
formal_days=row.formal_days or 30,
|
||
trial_enabled=bool(row.trial_enabled),
|
||
trial_price=row.trial_price or Decimal('0'),
|
||
trial_days=row.trial_days or 0,
|
||
trial_guanshifc=row.trial_guanshifc or Decimal('0'),
|
||
trial_zuzhangfc=row.trial_zuzhangfc or Decimal('0'),
|
||
is_enabled=row.is_enabled,
|
||
bankuai_id=row.bankuai_id,
|
||
)
|
||
|
||
for row in ClubLilubiao.query.filter(club_id=template_id):
|
||
ClubLilubiao.query.create(
|
||
club_id=new_id,
|
||
config_type=row.config_type,
|
||
lilv=row.lilv or Decimal('0'),
|
||
remark=row.remark or '',
|
||
)
|
||
|
||
try:
|
||
tpl_wd = ClubWithdrawConfig.query.get(club_id=template_id)
|
||
ClubWithdrawConfig.query.create(club_id=new_id, mode=tpl_wd.mode)
|
||
except ClubWithdrawConfig.DoesNotExist:
|
||
ClubWithdrawConfig.query.create(club_id=new_id, mode=1)
|
||
|
||
for row in ClubTixianQuota.query.filter(club_id=template_id):
|
||
ClubTixianQuota.query.create(
|
||
club_id=new_id,
|
||
leixing=row.leixing,
|
||
daily_limit=row.daily_limit or Decimal('0'),
|
||
)
|
||
|
||
Szjilu.objects.get_or_create(club_id=new_id)
|
||
|
||
copy_display_config(template_id, new_id)
|
||
|
||
self.stdout.write(self.style.SUCCESS(f'俱乐部 {new_id} ({name}) 已创建,配置自 {template_id} 复制'))
|