@@ -317,6 +317,7 @@ class KefuGetDashouDetailView(APIView):
|
|||||||
'zaixianzhuangtai': dashou.zaixianzhuangtai,
|
'zaixianzhuangtai': dashou.zaixianzhuangtai,
|
||||||
'zhanghaozhuangtai': dashou.zhanghaozhuangtai,
|
'zhanghaozhuangtai': dashou.zhanghaozhuangtai,
|
||||||
'zhuangtai': dashou.zhuangtai,
|
'zhuangtai': dashou.zhuangtai,
|
||||||
|
'fengjin_yuanyin': getattr(dashou, 'fengjin_yuanyin', '') or '',
|
||||||
'nicheng': dashou.nicheng or '',
|
'nicheng': dashou.nicheng or '',
|
||||||
'chenghao': dashou.chenghao or '',
|
'chenghao': dashou.chenghao or '',
|
||||||
'dianhua': dashou.dianhua or '',
|
'dianhua': dashou.dianhua or '',
|
||||||
@@ -585,20 +586,33 @@ class KefuUpdateDashouView(APIView):
|
|||||||
new_status = int(value)
|
new_status = int(value)
|
||||||
if new_status not in [0, 1]:
|
if new_status not in [0, 1]:
|
||||||
return Response({'code': 400, 'msg': '状态值无效(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.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 '封禁'
|
status_label = '正常' if new_status == 1 else '封禁'
|
||||||
old_label = '正常' if before['zhanghaozhuangtai'] == 1 else '封禁'
|
old_label = '正常' if before['zhanghaozhuangtai'] == 1 else '封禁'
|
||||||
|
reason_part = f',原因={yuanyin}' if (new_status == 0 and yuanyin) else ''
|
||||||
write_xiugai_log(
|
write_xiugai_log(
|
||||||
yonghuid=dashou_id,
|
yonghuid=dashou_id,
|
||||||
xiugaiid=kefu.user.Phone,
|
xiugaiid=kefu.user.Phone,
|
||||||
leixing=XIUGAI_LEIXING_DASHOU,
|
leixing=XIUGAI_LEIXING_DASHOU,
|
||||||
qitashuoming=(
|
qitashuoming=(
|
||||||
f'【后台】修改打手账号状态:{old_label} → {status_label},'
|
f'【后台】修改打手账号状态:{old_label} → {status_label}{reason_part},'
|
||||||
f'打手ID={dashou_id},操作人={kefu.user.Phone}'
|
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':
|
elif caozuo == 'gai_zaixianzhuangtai':
|
||||||
if '001ee' not in permissions:
|
if '001ee' not in permissions:
|
||||||
|
|||||||
33
users/migrations/0008_fengjin_yuanyin.py
Normal file
33
users/migrations/0008_fengjin_yuanyin.py
Normal 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='封禁原因'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -143,6 +143,7 @@ class UserDashou(QModel):
|
|||||||
zhuangtai = models.IntegerField(default=1, verbose_name='打手状态')
|
zhuangtai = models.IntegerField(default=1, verbose_name='打手状态')
|
||||||
zaixianzhuangtai = models.IntegerField(default=1, verbose_name='打手在线状态')
|
zaixianzhuangtai = models.IntegerField(default=1, verbose_name='打手在线状态')
|
||||||
zhanghaozhuangtai = 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='打手介绍')
|
jieshao = models.TextField(null=True, verbose_name='打手介绍')
|
||||||
jiedanzongliang = models.IntegerField(default=0, verbose_name='接单总量')
|
jiedanzongliang = models.IntegerField(default=0, verbose_name='接单总量')
|
||||||
chengjiaozongliang = 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='商家昵称')
|
nicheng = models.CharField(max_length=50, unique=True, db_index=True, verbose_name='商家昵称')
|
||||||
zhuangtai = models.IntegerField(choices=[(0, '待审核'), (1, '正常'), (2, '禁用')], default=1,
|
zhuangtai = models.IntegerField(choices=[(0, '待审核'), (1, '正常'), (2, '禁用')], default=1,
|
||||||
verbose_name='商家状态')
|
verbose_name='商家状态')
|
||||||
|
fengjin_yuanyin = models.CharField(max_length=200, blank=True, default='', verbose_name='封禁原因')
|
||||||
dianhua = models.CharField(max_length=20,null=True,verbose_name='商家电话')
|
dianhua = models.CharField(max_length=20,null=True,verbose_name='商家电话')
|
||||||
wechat = models.CharField(max_length=50, null=True, verbose_name='商家微信号')
|
wechat = models.CharField(max_length=50, null=True, verbose_name='商家微信号')
|
||||||
fabu = models.IntegerField(default=0, 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='管事微信号')
|
wechat = models.CharField(max_length=50,null=True, verbose_name='管事微信号')
|
||||||
yaogingshuliang = models.IntegerField(default=0, verbose_name='邀请打手总数')
|
yaogingshuliang = models.IntegerField(default=0, verbose_name='邀请打手总数')
|
||||||
zhuangtai = models.IntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, 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='今日充值打手数量')
|
jinrichongzhi = models.IntegerField(default=0, verbose_name='今日充值打手数量')
|
||||||
jinyuechongzhi = 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='充值分佣总额')
|
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='今月分佣(元)')
|
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='账号状态')
|
zhuangtai = models.IntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='账号状态')
|
||||||
|
fengjin_yuanyin = models.CharField(max_length=200, blank=True, default='', verbose_name='封禁原因')
|
||||||
# 推广海报相对URL
|
# 推广海报相对URL
|
||||||
haibao_url = models.CharField(max_length=500, null=True, blank=True, verbose_name='推广海报相对URL')
|
haibao_url = models.CharField(max_length=500, null=True, blank=True, verbose_name='推广海报相对URL')
|
||||||
# 今日提现
|
# 今日提现
|
||||||
|
|||||||
@@ -1897,6 +1897,9 @@ class ZuzhangXinxiView(APIView):
|
|||||||
'ketixian': str(zuzhang.ketixian_jine),
|
'ketixian': str(zuzhang.ketixian_jine),
|
||||||
'dongjie_yue': str(getattr(zuzhang, 'dongjie_yue', 0) or 0),
|
'dongjie_yue': str(getattr(zuzhang, 'dongjie_yue', 0) or 0),
|
||||||
'guanshiCount': guanshi_count,
|
'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})
|
return Response({'code': 200, 'msg': 'success', 'data': data})
|
||||||
|
|||||||
@@ -403,6 +403,7 @@ class DashouXinxiAPIView(APIView):
|
|||||||
data = {
|
data = {
|
||||||
'dashounicheng': dashou_profile.nicheng or '',
|
'dashounicheng': dashou_profile.nicheng or '',
|
||||||
'zhanghaostatus': dashou_profile.zhanghaozhuangtai,
|
'zhanghaostatus': dashou_profile.zhanghaozhuangtai,
|
||||||
|
'fengjin_yuanyin': getattr(dashou_profile, 'fengjin_yuanyin', '') or '',
|
||||||
'zaixianzhuangtai': dashou_profile.zaixianzhuangtai,
|
'zaixianzhuangtai': dashou_profile.zaixianzhuangtai,
|
||||||
'dashouzhuangtai': dashou_profile.zhuangtai,
|
'dashouzhuangtai': dashou_profile.zhuangtai,
|
||||||
'yongjin': str(dashou_profile.yue) if dashou_profile.yue is not None else '0.00',
|
'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 '',
|
'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,体验=正式)
|
# 4. 查询会员信息(每次请求同步权益 + clumber,体验=正式)
|
||||||
try:
|
try:
|
||||||
from jituan.services.huiyuan_bundle import refresh_grab_pool_membership_state
|
from jituan.services.huiyuan_bundle import refresh_grab_pool_membership_state
|
||||||
@@ -665,6 +689,7 @@ class GuanshiXinxiView(APIView):
|
|||||||
'msg': '获取成功',
|
'msg': '获取成功',
|
||||||
'data': {
|
'data': {
|
||||||
'gszhstatus': guanshi_profile.zhuangtai, # 管事账号状态
|
'gszhstatus': guanshi_profile.zhuangtai, # 管事账号状态
|
||||||
|
'fengjin_yuanyin': getattr(guanshi_profile, 'fengjin_yuanyin', '') or '',
|
||||||
'yaoqingzongshu': guanshi_profile.yaogingshuliang, # 邀请打手总数
|
'yaoqingzongshu': guanshi_profile.yaogingshuliang, # 邀请打手总数
|
||||||
'fenyongzonge': float(guanshi_profile.chongzhifenrun), # 充值分佣总额
|
'fenyongzonge': float(guanshi_profile.chongzhifenrun), # 充值分佣总额
|
||||||
'fenyongtixian': float(guanshi_profile.yue), # 可提现余额
|
'fenyongtixian': float(guanshi_profile.yue), # 可提现余额
|
||||||
@@ -719,6 +744,7 @@ class ShangJiaXinXiView(APIView):
|
|||||||
response_data = {
|
response_data = {
|
||||||
'nicheng': shangjia.nicheng or '',
|
'nicheng': shangjia.nicheng or '',
|
||||||
'sjzhzhuangtai': shangjia.zhuangtai, # 商家账号状态
|
'sjzhzhuangtai': shangjia.zhuangtai, # 商家账号状态
|
||||||
|
'fengjin_yuanyin': getattr(shangjia, 'fengjin_yuanyin', '') or '',
|
||||||
'fadanzong': shangjia.fabu, # 发单总量(累计)
|
'fadanzong': shangjia.fabu, # 发单总量(累计)
|
||||||
'fabu': shangjia.fabu,
|
'fabu': shangjia.fabu,
|
||||||
'tuikuanzong': shangjia.tuikuan, # 退款总量(累计)
|
'tuikuanzong': shangjia.tuikuan, # 退款总量(累计)
|
||||||
|
|||||||
Reference in New Issue
Block a user