feat: 后台添加商家 + 龙先生 lsx 俱乐部/邀请链种子
支持客服按用户UID开通商家(分俱乐部校验);新增 seed_club_lsx、seed_lsx_invite_data。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -4,7 +4,7 @@ from django.views.decorators.csrf import csrf_exempt
|
||||
from .view import (GetRolePermissionView,
|
||||
ModifyRolePermissionView, AddRoleView, GetAdminRolesView, GetAdminUserListView, AddAdminUserView,
|
||||
ModifyAdminUserView, KefuGetDashouListView, KefuGetDashouDetailView, KefuUpdateDashouView, KefuGetShangjiaListView,
|
||||
KefuGetShangjiaDetailView, KefuUpdateShangjiaView, GetProductBaseDataView, GetProductListView, SaveProductOrderView,
|
||||
KefuGetShangjiaDetailView, KefuUpdateShangjiaView, KefuAddShangjiaView, GetProductBaseDataView, GetProductListView, SaveProductOrderView,
|
||||
AddProductView, DeleteProductView, GetProductDetailView, UpdateProductView, UpdateZhiKanShenheView, UpdateMemberView, GetMemberListView,
|
||||
AddMemberView, GetGuanliListView, GetGuanliDetailView, PromoteGuanshiToZuzhangView, ChangeInviterView, UpdateGuanliView, GetWithdrawSettingsView,
|
||||
UpdateWithdrawSettingsView, GetZuzhangListView, GetZuzhangDetailView, UpdateZuzhangView, GetOperationLogListView, GetProductTypeZoneView,
|
||||
@@ -36,6 +36,7 @@ urlpatterns = [
|
||||
path('hqsjgllb', KefuGetShangjiaListView.as_view(), name='后台获取商家列表'),
|
||||
path('hthqsjxq', KefuGetShangjiaDetailView.as_view(), name='后台获取商家详情'),
|
||||
path('xgsjxx', KefuUpdateShangjiaView.as_view(), name='后台修改商家数据'),
|
||||
path('tjsj', KefuAddShangjiaView.as_view(), name='后台添加商家'),
|
||||
|
||||
path('htsphqjcsx', GetProductBaseDataView.as_view(), name='后台获取商品类型专区'),
|
||||
path('hthqsplb', GetProductListView.as_view(), name='后台获取商品数据'),
|
||||
|
||||
@@ -35,6 +35,7 @@ from .views.roles import (
|
||||
from .views.kefu import (
|
||||
KefuGetDashouListView, KefuGetDashouDetailView, KefuUpdateDashouView,
|
||||
KefuGetShangjiaListView, KefuGetShangjiaDetailView, KefuUpdateShangjiaView,
|
||||
KefuAddShangjiaView,
|
||||
KefuChatPermissionsView,
|
||||
DashouGiftHuiyuanSaveView, DashouGiftHuiyuanRemoveView,
|
||||
)
|
||||
@@ -100,6 +101,7 @@ __all__ = [
|
||||
'KefuGetDashouListView', 'KefuGetDashouDetailView', 'KefuUpdateDashouView',
|
||||
'DashouGiftHuiyuanSaveView', 'DashouGiftHuiyuanRemoveView',
|
||||
'KefuGetShangjiaListView', 'KefuGetShangjiaDetailView', 'KefuUpdateShangjiaView',
|
||||
'KefuAddShangjiaView',
|
||||
'KefuChatPermissionsView',
|
||||
# products
|
||||
'GetProductBaseDataView', 'GetProductListView', 'SaveProductOrderView',
|
||||
|
||||
@@ -1110,9 +1110,115 @@ class KefuUpdateShangjiaView(APIView):
|
||||
return Response({'code': 400, 'msg': '未知操作'})
|
||||
|
||||
|
||||
class KefuAddShangjiaView(APIView):
|
||||
"""
|
||||
后台按用户ID开通商家(分俱乐部,禁止前端自助注册场景使用)
|
||||
POST /houtai/tjsj 或 /jituan/houtai/tjsj
|
||||
参数:username, yonghuid(用户业务ID), nicheng(可选)
|
||||
权限:1100a
|
||||
"""
|
||||
permission_classes = []
|
||||
parser_classes = [JSONParser]
|
||||
|
||||
def post(self, request):
|
||||
username = request.data.get('username', '').strip()
|
||||
yonghuid = str(request.data.get('yonghuid', '')).strip()
|
||||
nicheng_in = (request.data.get('nicheng') or '').strip()
|
||||
|
||||
if not username:
|
||||
return Response({'code': 401, 'msg': '缺少username'})
|
||||
if not yonghuid:
|
||||
return Response({'code': 400, 'msg': '请填写用户ID'})
|
||||
|
||||
kefu, permissions = verify_kefu_permission(request, username)
|
||||
if kefu is None:
|
||||
return permissions
|
||||
if '1100a' not in permissions:
|
||||
return Response({'code': 403, 'msg': '无权限添加商家(需要1100a)'})
|
||||
|
||||
try:
|
||||
user = User.query.get(UserUID=yonghuid)
|
||||
except User.DoesNotExist:
|
||||
return Response({'code': 404, 'msg': '用户不存在,请确认用户ID'})
|
||||
|
||||
denied = forbid_if_user_out_of_scope(request, user)
|
||||
if denied:
|
||||
return denied
|
||||
|
||||
if not getattr(user, 'IsActive', True):
|
||||
return Response({'code': 400, 'msg': '该账号已被封禁,无法开通商家'})
|
||||
|
||||
try:
|
||||
dashou = user.DashouProfile
|
||||
if int(getattr(dashou, 'zhanghaozhuangtai', 1) or 0) != 1:
|
||||
return Response({'code': 400, 'msg': '该账号已被封禁,无法开通商家'})
|
||||
except UserDashou.DoesNotExist:
|
||||
pass
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if UserShangjia.query.filter(user=user).exists():
|
||||
return Response({'code': 400, 'msg': '该用户已是商家,无需重复添加'})
|
||||
|
||||
from merchant_ops.services.authz import assert_no_active_staff_when_merchant_register, StaffAuthError
|
||||
try:
|
||||
assert_no_active_staff_when_merchant_register(user)
|
||||
except StaffAuthError as e:
|
||||
return Response({'code': 403, 'msg': getattr(e, 'msg', None) or str(e)})
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
boss_nickname = '普通商家'
|
||||
try:
|
||||
boss = user.BossProfile
|
||||
if boss.nickname and boss.nickname.strip():
|
||||
boss_nickname = boss.nickname.strip()
|
||||
except UserBoss.DoesNotExist:
|
||||
pass
|
||||
|
||||
shangjia_nicheng = nicheng_in or boss_nickname
|
||||
if UserShangjia.query.filter(nicheng=shangjia_nicheng).exists():
|
||||
shangjia_nicheng = f"{shangjia_nicheng}{random.randint(1000, 9999)}"
|
||||
|
||||
try:
|
||||
with transaction.atomic():
|
||||
shop = UserShangjia.query.create(
|
||||
user=user,
|
||||
nicheng=shangjia_nicheng,
|
||||
zhuangtai=1,
|
||||
yue=0.00,
|
||||
fabu=0,
|
||||
tuikuan=0,
|
||||
chengjiao=0,
|
||||
jinridingdan=0,
|
||||
jinriliushui=0.00,
|
||||
jinyuedingdan=0,
|
||||
jinyueliushui=0.00,
|
||||
dianhua='',
|
||||
wechat='',
|
||||
)
|
||||
write_xiugai_log(
|
||||
yonghuid=yonghuid,
|
||||
xiugaiid=kefu.user.Phone,
|
||||
leixing=XIUGAI_LEIXING_SHANGJIA,
|
||||
qitashuoming=(
|
||||
f'【后台】添加商家:用户ID={yonghuid},昵称={shop.nicheng},'
|
||||
f'操作人={kefu.user.Phone}'
|
||||
),
|
||||
)
|
||||
except Exception as e:
|
||||
logger.exception('后台添加商家失败')
|
||||
return Response({'code': 500, 'msg': f'添加失败:{e}'})
|
||||
|
||||
return Response({
|
||||
'code': 0,
|
||||
'msg': '商家添加成功',
|
||||
'data': {
|
||||
'yonghuid': yonghuid,
|
||||
'nicheng': shop.nicheng,
|
||||
'zhuangtai': shop.zhuangtai,
|
||||
},
|
||||
})
|
||||
|
||||
|
||||
class KefuChatPermissionsView(APIView):
|
||||
|
||||
Reference in New Issue
Block a user