From 49482830f9d2203c167e2aa83bd9d73d3e4daa3a Mon Sep 17 00:00:00 2001 From: XingQue Date: Wed, 24 Jun 2026 23:13:03 +0800 Subject: [PATCH] =?UTF-8?q?seed=5Fadmin=5Fassignments=20=E7=A6=81=E6=AD=A2?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E6=89=B9=E9=87=8F=EF=BC=9B=E4=BB=BB=E8=81=8C?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E4=BB=85=E4=BD=9C=E6=A0=87=E7=AD=BE=E8=AF=B4?= =?UTF-8?q?=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../commands/seed_admin_assignments.py | 31 ++++++++++++++-- jituan/management/commands/seed_club_xzj.py | 37 +++++++++++++------ 2 files changed, 53 insertions(+), 15 deletions(-) diff --git a/jituan/management/commands/seed_admin_assignments.py b/jituan/management/commands/seed_admin_assignments.py index 05106ab..453a15b 100644 --- a/jituan/management/commands/seed_admin_assignments.py +++ b/jituan/management/commands/seed_admin_assignments.py @@ -1,7 +1,7 @@ """为后台客服账号初始化 admin_assignment(数据范围,非功能权限)。""" import logging -from django.core.management.base import BaseCommand +from django.core.management.base import BaseCommand, CommandError from django.db import transaction from jituan.constants import CLUB_ID_DEFAULT, DATA_SCOPE_SINGLE, ADMIN_ROLE_LABELS @@ -19,7 +19,15 @@ class Command(BaseCommand): '--club-id', default=CLUB_ID_DEFAULT, help='目标俱乐部 ID,默认 xq', ) parser.add_argument( - '--role-code', default='CLUB_ADMIN', help='任职角色码', + '--role-code', default='CLUB_ADMIN', help='任职角色码(仅展示标签,不控制菜单功能权限)', + ) + parser.add_argument( + '--phone', type=str, default='', help='仅给该手机号客服添加任职(推荐)', + ) + parser.add_argument( + '--all-kefu', + action='store_true', + help='给全部客服账号批量添加(慎用,会扫所有有 KefuProfile 的账号)', ) parser.add_argument( '--dry-run', action='store_true', help='只打印不写入', @@ -29,9 +37,24 @@ class Command(BaseCommand): club_id = options['club_id'] role_code = options['role_code'] dry_run = options['dry_run'] + target_phone = (options.get('phone') or '').strip() + all_kefu = options.get('all_kefu') - # UserType 是属性不是 DB 字段,通过 KefuProfile 关联筛选客服账号 - kefu_users = User.query.filter(KefuProfile__isnull=False).select_related('KefuProfile') + if not target_phone and not all_kefu: + raise CommandError( + '请指定 --phone 13800138000(只配一个人)或 --all-kefu(批量全部客服)。' + '默认不会自动给所有人加任职。' + ) + + if target_phone: + target = User.query.filter(Phone=target_phone).first() + if not target: + raise CommandError(f'未找到手机号 {target_phone}') + kefu_users = [target] + else: + kefu_users = list( + User.query.filter(KefuProfile__isnull=False).select_related('KefuProfile') + ) created = 0 skipped = 0 diff --git a/jituan/management/commands/seed_club_xzj.py b/jituan/management/commands/seed_club_xzj.py index 9856c4b..9221d11 100644 --- a/jituan/management/commands/seed_club_xzj.py +++ b/jituan/management/commands/seed_club_xzj.py @@ -1,19 +1,24 @@ -"""一键初始化星之界(xzj)俱乐部及客服数据范围。""" +"""一键初始化星之界(xzj)俱乐部(默认不批量给所有客服加任职)。""" from django.core.management import call_command -from django.core.management.base import BaseCommand, CommandError +from django.core.management.base import BaseCommand from jituan.models import Club class Command(BaseCommand): - help = '创建星之界电竞俱乐部(xzj)并分配客服数据范围(需先 seed_club_xq)' + help = '创建星之界电竞俱乐部(xzj);任职请单独 seed_admin_assignments --phone ...' def add_arguments(self, parser): parser.add_argument( '--wx-appid', default='wxdefa454152e78a03', help='星之界小程序 appid', ) parser.add_argument( - '--skip-assignments', action='store_true', help='跳过客服 admin_assignment', + '--assignments', + action='store_true', + help='同时给 --phone 指定客服加 xzj 任职(需配合 --phone)', + ) + parser.add_argument( + '--phone', type=str, default='', help='与 --assignments 联用:客服手机号', ) def handle(self, *args, **options): @@ -32,15 +37,25 @@ class Command(BaseCommand): wx_appid=wx_appid, ) - if not options.get('skip_assignments'): - self.stdout.write('分配客服数据范围 ...') - try: - call_command('seed_admin_assignments', club_id=club_id) - except Exception as e: + if options.get('assignments'): + phone = (options.get('phone') or '').strip() + if not phone: self.stdout.write(self.style.WARNING( - f'客服数据范围分配失败(可稍后在后台「数据范围」页手动配置): {e}' + '未指定 --phone,跳过任职。示例:' + 'python manage.py seed_club_xzj --assignments --phone 你的手机号' )) + else: + call_command( + 'seed_admin_assignments', + club_id=club_id, + phone=phone, + ) + else: + self.stdout.write( + '未加任职。需要时在后台「数据范围」配置,或:' + 'python manage.py seed_admin_assignments --phone 手机号 --club-id xzj' + ) self.stdout.write(self.style.SUCCESS( - f'星之界 {club_id} 就绪。请在后台「俱乐部配置」检查支付密钥,并在 xzj 视图下单独改轮播/会员价。' + f'星之界 {club_id} 就绪。请在后台「俱乐部配置」检查支付密钥。' ))