feat: 封禁原因字段与身份状态刷新接口

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
XingQue
2026-07-27 05:40:50 +08:00
parent 40c489de39
commit 5b0db2c8fd
5 changed files with 84 additions and 4 deletions

View File

@@ -317,6 +317,7 @@ class KefuGetDashouDetailView(APIView):
'zaixianzhuangtai': dashou.zaixianzhuangtai,
'zhanghaozhuangtai': dashou.zhanghaozhuangtai,
'zhuangtai': dashou.zhuangtai,
'fengjin_yuanyin': getattr(dashou, 'fengjin_yuanyin', '') or '',
'nicheng': dashou.nicheng or '',
'chenghao': dashou.chenghao or '',
'dianhua': dashou.dianhua or '',
@@ -585,20 +586,33 @@ class KefuUpdateDashouView(APIView):
new_status = int(value)
if new_status not in [0, 1]:
return Response({'code': 400, 'msg': '状态值无效0=封禁,1=正常)'})
yuanyin = (request.data.get('yuanyin') or request.data.get('fengjin_yuanyin') or '').strip()
dashou_profile.zhanghaozhuangtai = new_status
dashou_profile.save()
if new_status == 0:
dashou_profile.fengjin_yuanyin = yuanyin[:200]
else:
dashou_profile.fengjin_yuanyin = ''
dashou_profile.save(update_fields=['zhanghaozhuangtai', 'fengjin_yuanyin'])
status_label = '正常' if new_status == 1 else '封禁'
old_label = '正常' if before['zhanghaozhuangtai'] == 1 else '封禁'
reason_part = f',原因={yuanyin}' if (new_status == 0 and yuanyin) else ''
write_xiugai_log(
yonghuid=dashou_id,
xiugaiid=kefu.user.Phone,
leixing=XIUGAI_LEIXING_DASHOU,
qitashuoming=(
f'【后台】修改打手账号状态:{old_label}{status_label}'
f'【后台】修改打手账号状态:{old_label}{status_label}{reason_part}'
f'打手ID={dashou_id},操作人={kefu.user.Phone}'
),
)
return Response({'code': 0, 'msg': '修改账号状态成功', 'data': {'new_zhanghaozhuangtai': new_status}})
return Response({
'code': 0,
'msg': '修改账号状态成功',
'data': {
'new_zhanghaozhuangtai': new_status,
'fengjin_yuanyin': dashou_profile.fengjin_yuanyin or '',
},
})
elif caozuo == 'gai_zaixianzhuangtai':
if '001ee' not in permissions:

View File

@@ -0,0 +1,33 @@
# Generated manually for ban reason fields
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('users', '0007_role_fund_freeze_fields'),
]
operations = [
migrations.AddField(
model_name='userdashou',
name='fengjin_yuanyin',
field=models.CharField(blank=True, default='', max_length=200, verbose_name='封禁原因'),
),
migrations.AddField(
model_name='userguanshi',
name='fengjin_yuanyin',
field=models.CharField(blank=True, default='', max_length=200, verbose_name='封禁原因'),
),
migrations.AddField(
model_name='userzuzhang',
name='fengjin_yuanyin',
field=models.CharField(blank=True, default='', max_length=200, verbose_name='封禁原因'),
),
migrations.AddField(
model_name='usershangjia',
name='fengjin_yuanyin',
field=models.CharField(blank=True, default='', max_length=200, verbose_name='封禁原因'),
),
]

View File

@@ -143,6 +143,7 @@ class UserDashou(QModel):
zhuangtai = models.IntegerField(default=1, verbose_name='打手状态')
zaixianzhuangtai = models.IntegerField(default=1, verbose_name='打手在线状态')
zhanghaozhuangtai = models.IntegerField(default=1, verbose_name='打手账号状态')
fengjin_yuanyin = models.CharField(max_length=200, blank=True, default='', verbose_name='封禁原因')
jieshao = models.TextField(null=True, verbose_name='打手介绍')
jiedanzongliang = models.IntegerField(default=0, verbose_name='接单总量')
chengjiaozongliang = models.IntegerField(default=0, verbose_name='成交单总量')
@@ -192,6 +193,7 @@ class UserShangjia(QModel):
nicheng = models.CharField(max_length=50, unique=True, db_index=True, verbose_name='商家昵称')
zhuangtai = models.IntegerField(choices=[(0, '待审核'), (1, '正常'), (2, '禁用')], default=1,
verbose_name='商家状态')
fengjin_yuanyin = models.CharField(max_length=200, blank=True, default='', verbose_name='封禁原因')
dianhua = models.CharField(max_length=20,null=True,verbose_name='商家电话')
wechat = models.CharField(max_length=50, null=True, verbose_name='商家微信号')
fabu = models.IntegerField(default=0, verbose_name='发布订单总数量')
@@ -226,6 +228,7 @@ class UserGuanshi(QModel):
wechat = models.CharField(max_length=50,null=True, verbose_name='管事微信号')
yaogingshuliang = models.IntegerField(default=0, verbose_name='邀请打手总数')
zhuangtai = models.IntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='管事状态')
fengjin_yuanyin = models.CharField(max_length=200, blank=True, default='', verbose_name='封禁原因')
jinrichongzhi = models.IntegerField(default=0, verbose_name='今日充值打手数量')
jinyuechongzhi = models.IntegerField(default=0, verbose_name='今月充值打手数量')
chongzhifenrun = models.DecimalField(max_digits=12, decimal_places=2, default=0.00, verbose_name='充值分佣总额')
@@ -293,6 +296,7 @@ class UserZuzhang(QModel):
jinyue_fenyong = models.DecimalField(max_digits=10, decimal_places=2, default=0.00, verbose_name='今月分佣(元)')
# 账号状态
zhuangtai = models.IntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='账号状态')
fengjin_yuanyin = models.CharField(max_length=200, blank=True, default='', verbose_name='封禁原因')
# 推广海报相对URL
haibao_url = models.CharField(max_length=500, null=True, blank=True, verbose_name='推广海报相对URL')
# 今日提现

View File

@@ -1897,6 +1897,9 @@ class ZuzhangXinxiView(APIView):
'ketixian': str(zuzhang.ketixian_jine),
'dongjie_yue': str(getattr(zuzhang, 'dongjie_yue', 0) or 0),
'guanshiCount': guanshi_count,
'fenhongZonge': str(zuzhang.fenyong_zonge)
'fenhongZonge': str(zuzhang.fenyong_zonge),
'zhuangtai': zuzhang.zhuangtai,
'zuzhangstatus': 1 if int(getattr(zuzhang, 'zhuangtai', 0) or 0) == 1 else 0,
'fengjin_yuanyin': getattr(zuzhang, 'fengjin_yuanyin', '') or '',
}
return Response({'code': 200, 'msg': 'success', 'data': data})

View File

@@ -403,6 +403,7 @@ class DashouXinxiAPIView(APIView):
data = {
'dashounicheng': dashou_profile.nicheng or '',
'zhanghaostatus': dashou_profile.zhanghaozhuangtai,
'fengjin_yuanyin': getattr(dashou_profile, 'fengjin_yuanyin', '') or '',
'zaixianzhuangtai': dashou_profile.zaixianzhuangtai,
'dashouzhuangtai': dashou_profile.zhuangtai,
'yongjin': str(dashou_profile.yue) if dashou_profile.yue is not None else '0.00',
@@ -416,6 +417,29 @@ class DashouXinxiAPIView(APIView):
'chenghao': dashou_profile.chenghao or '',
}
# 身份状态:下拉刷新可即时更新入口(仅正常态为 1
try:
gs = UserGuanshi.query.filter(user=current_user).first()
data['guanshistatus'] = 1 if gs and int(getattr(gs, 'zhuangtai', 0) or 0) == 1 else 0
data['guanshi_fengjin_yuanyin'] = (getattr(gs, 'fengjin_yuanyin', '') or '') if gs else ''
except Exception:
data['guanshistatus'] = 0
data['guanshi_fengjin_yuanyin'] = ''
try:
zz = UserZuzhang.query.filter(user=current_user).first()
data['zuzhangstatus'] = 1 if zz and int(getattr(zz, 'zhuangtai', 0) or 0) == 1 else 0
data['zuzhang_fengjin_yuanyin'] = (getattr(zz, 'fengjin_yuanyin', '') or '') if zz else ''
except Exception:
data['zuzhangstatus'] = 0
data['zuzhang_fengjin_yuanyin'] = ''
try:
sj = UserShangjia.query.filter(user=current_user).first()
data['shangjiastatus'] = 1 if sj and int(getattr(sj, 'zhuangtai', 0) or 0) == 1 else 0
data['shangjia_fengjin_yuanyin'] = (getattr(sj, 'fengjin_yuanyin', '') or '') if sj else ''
except Exception:
data['shangjiastatus'] = 0
data['shangjia_fengjin_yuanyin'] = ''
# 4. 查询会员信息(每次请求同步权益 + clumber体验=正式)
try:
from jituan.services.huiyuan_bundle import refresh_grab_pool_membership_state
@@ -665,6 +689,7 @@ class GuanshiXinxiView(APIView):
'msg': '获取成功',
'data': {
'gszhstatus': guanshi_profile.zhuangtai, # 管事账号状态
'fengjin_yuanyin': getattr(guanshi_profile, 'fengjin_yuanyin', '') or '',
'yaoqingzongshu': guanshi_profile.yaogingshuliang, # 邀请打手总数
'fenyongzonge': float(guanshi_profile.chongzhifenrun), # 充值分佣总额
'fenyongtixian': float(guanshi_profile.yue), # 可提现余额
@@ -719,6 +744,7 @@ class ShangJiaXinXiView(APIView):
response_data = {
'nicheng': shangjia.nicheng or '',
'sjzhzhuangtai': shangjia.zhuangtai, # 商家账号状态
'fengjin_yuanyin': getattr(shangjia, 'fengjin_yuanyin', '') or '',
'fadanzong': shangjia.fabu, # 发单总量(累计)
'fabu': shangjia.fabu,
'tuikuanzong': shangjia.tuikuan, # 退款总量(累计)