fix: 排行榜昵称与管事/组长统计字段对齐
管事/组长不再展示 openid,改读业务昵称;俱乐部榜补充无效/有效邀请与收益字段;管事按有效人数、组长按收益总额排序。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -19,6 +19,7 @@ from backend.models import (
|
||||
)
|
||||
from users.models import UserDashou, UserShangjia, UserGuanshi, UserZuzhang
|
||||
from users.business_models import User
|
||||
from rank.display_utils import load_rank_nicknames
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -96,18 +97,18 @@ TODAY_PROFILE_CONFIG = {
|
||||
'profile_model': UserGuanshi,
|
||||
'profile_sort_field': 'jinrichongzhi',
|
||||
'field_map': {
|
||||
'InvitedPlayerCount': None,
|
||||
'InvitedPlayerCount': 'yaogingshuliang',
|
||||
'RechargedPlayerCount': 'jinrichongzhi',
|
||||
'TotalIncome': None,
|
||||
'TotalIncome': 'chongzhifenrun',
|
||||
},
|
||||
},
|
||||
'zuzhang': {
|
||||
'profile_model': UserZuzhang,
|
||||
'profile_sort_field': 'jinri_fenyong',
|
||||
'profile_sort_field': 'fenyong_zonge',
|
||||
'field_map': {
|
||||
'InvitedManagerCount': None,
|
||||
'InvitedManagerCount': 'yaoqing_zongshu',
|
||||
'CommissionAmount': 'jinri_fenyong',
|
||||
'TotalIncome': 'jinri_fenyong',
|
||||
'TotalIncome': 'fenyong_zonge',
|
||||
},
|
||||
},
|
||||
'shangjia': {
|
||||
@@ -313,16 +314,5 @@ class PhbHqsjView(APIView):
|
||||
|
||||
users = User.objects.filter(UserUID__in=yonghuids)
|
||||
avatar_map = {u.UserUID: u.Avatar or '' for u in users}
|
||||
|
||||
nick_map = {u.UserUID: u.UserName or u.Phone or '用户' for u in users}
|
||||
|
||||
if shenfen == 'dashou':
|
||||
for p in UserDashou.objects.filter(user__UserUID__in=yonghuids).select_related('user'):
|
||||
if p.nicheng:
|
||||
nick_map[p.user.UserUID] = p.nicheng
|
||||
elif shenfen == 'shangjia':
|
||||
for p in UserShangjia.objects.filter(user__UserUID__in=yonghuids).select_related('user'):
|
||||
if p.nicheng:
|
||||
nick_map[p.user.UserUID] = p.nicheng
|
||||
|
||||
nick_map = load_rank_nicknames(shenfen, yonghuids)
|
||||
return nick_map, avatar_map
|
||||
|
||||
@@ -55,7 +55,7 @@ XZJ_ROLE_CONFIG = {
|
||||
'guanshi': {
|
||||
'model': ManagerDailyStats,
|
||||
'id_field': 'ManagerID',
|
||||
'sort_field': 'InvitedPlayerCount',
|
||||
'sort_field': 'RechargedPlayerCount',
|
||||
'fields': ('InvitedPlayerCount', 'RechargedPlayerCount', 'TotalIncome'),
|
||||
'int_fields': frozenset({'InvitedPlayerCount', 'RechargedPlayerCount'}),
|
||||
'response_field_map': {
|
||||
@@ -63,14 +63,14 @@ XZJ_ROLE_CONFIG = {
|
||||
'RechargedPlayerCount': 'chongzhi_dashou_shu',
|
||||
'TotalIncome': 'shouru_zonge',
|
||||
},
|
||||
'sort_response_key': 'yaoqing_dashou_shu',
|
||||
'sort_response_key': 'chongzhi_dashou_shu',
|
||||
'wuxiao_field': 'wuxiao_yaoqing_dashou_shu',
|
||||
'youxiao_field': 'chongzhi_dashou_shu',
|
||||
},
|
||||
'zuzhang': {
|
||||
'model': LeaderDailyStats,
|
||||
'id_field': 'LeaderID',
|
||||
'sort_field': 'InvitedManagerCount',
|
||||
'sort_field': 'TotalIncome',
|
||||
'fields': ('InvitedManagerCount', 'CommissionAmount', 'TotalIncome'),
|
||||
'int_fields': frozenset({'InvitedManagerCount'}),
|
||||
'response_field_map': {
|
||||
@@ -78,7 +78,7 @@ XZJ_ROLE_CONFIG = {
|
||||
'CommissionAmount': 'fenyong_jine',
|
||||
'TotalIncome': 'shouru_zonge',
|
||||
},
|
||||
'sort_response_key': 'yaoqing_guanshi_shu',
|
||||
'sort_response_key': 'shouru_zonge',
|
||||
'wuxiao_field': 'wuxiao_yaoqing_guanshi_shu',
|
||||
'youxiao_field': 'youxiao_guanshi_shu',
|
||||
},
|
||||
@@ -109,7 +109,7 @@ XZJ_TODAY_PROFILE = {
|
||||
},
|
||||
'guanshi': {
|
||||
'profile_model': UserGuanshi,
|
||||
'profile_sort_field': 'yaogingshuliang',
|
||||
'profile_sort_field': 'jinrichongzhi',
|
||||
'field_map': {
|
||||
'InvitedPlayerCount': 'yaogingshuliang',
|
||||
'RechargedPlayerCount': 'jinrichongzhi',
|
||||
@@ -118,11 +118,11 @@ XZJ_TODAY_PROFILE = {
|
||||
},
|
||||
'zuzhang': {
|
||||
'profile_model': UserZuzhang,
|
||||
'profile_sort_field': 'yaoqing_zongshu',
|
||||
'profile_sort_field': 'fenyong_zonge',
|
||||
'field_map': {
|
||||
'InvitedManagerCount': 'yaoqing_zongshu',
|
||||
'CommissionAmount': 'jinri_fenyong',
|
||||
'TotalIncome': 'jinri_fenyong',
|
||||
'TotalIncome': 'fenyong_zonge',
|
||||
},
|
||||
},
|
||||
'shangjia': {
|
||||
@@ -138,40 +138,11 @@ XZJ_TODAY_PROFILE = {
|
||||
# UserZuzhang 用于今日组长 profile 回退
|
||||
|
||||
|
||||
def _apply_guanshi_wuxiao(item):
|
||||
invited = int(item.get('yaoqing_dashou_shu') or 0)
|
||||
valid = int(item.get('chongzhi_dashou_shu') or 0)
|
||||
item['wuxiao_yaoqing_dashou_shu'] = max(0, invited - valid)
|
||||
return item
|
||||
|
||||
|
||||
def _count_youxiao_guanshi_for_zuzhang(zuzhang_uid, start_date=None, end_date=None):
|
||||
"""组长旗下有充值打手记录的管事人数。"""
|
||||
guanshi_uids = list(
|
||||
UserGuanshi.objects.filter(yaoqingren=zuzhang_uid)
|
||||
.values_list('user__UserUID', flat=True)
|
||||
)
|
||||
if not guanshi_uids:
|
||||
return 0
|
||||
qs = ManagerDailyStats.objects.filter(ManagerID__in=guanshi_uids)
|
||||
if start_date and end_date:
|
||||
qs = qs.filter(Date__gte=start_date, Date__lte=end_date)
|
||||
qs = (
|
||||
qs.values('ManagerID')
|
||||
.annotate(total_rc=Sum('RechargedPlayerCount'))
|
||||
.filter(total_rc__gt=0)
|
||||
)
|
||||
return qs.count()
|
||||
|
||||
|
||||
def _apply_zuzhang_wuxiao(item, start_date=None, end_date=None):
|
||||
zuzhang_uid = item.get('yonghuid')
|
||||
invited = int(item.get('yaoqing_guanshi_shu') or 0)
|
||||
youxiao = _count_youxiao_guanshi_for_zuzhang(zuzhang_uid, start_date, end_date)
|
||||
item['youxiao_guanshi_shu'] = youxiao
|
||||
item['wuxiao_yaoqing_guanshi_shu'] = max(0, invited - youxiao)
|
||||
return item
|
||||
|
||||
from rank.display_utils import (
|
||||
apply_guanshi_wuxiao_fields,
|
||||
apply_zuzhang_wuxiao_fields,
|
||||
load_rank_nicknames,
|
||||
)
|
||||
|
||||
class XzjPhbHqsjView(APIView):
|
||||
"""
|
||||
@@ -237,9 +208,9 @@ class XzjPhbHqsjView(APIView):
|
||||
item[response_key] = _fmt_value(row.get(field), field in int_fields)
|
||||
|
||||
if shenfen == 'guanshi':
|
||||
_apply_guanshi_wuxiao(item)
|
||||
apply_guanshi_wuxiao_fields(item)
|
||||
elif shenfen == 'zuzhang':
|
||||
_apply_zuzhang_wuxiao(item, start_date, end_date)
|
||||
apply_zuzhang_wuxiao_fields(item, yonghuid, start_date, end_date)
|
||||
|
||||
result_list.append(item)
|
||||
|
||||
@@ -324,16 +295,5 @@ class XzjPhbHqsjView(APIView):
|
||||
|
||||
users = User.objects.filter(UserUID__in=yonghuids)
|
||||
avatar_map = {u.UserUID: u.Avatar or '' for u in users}
|
||||
|
||||
nick_map = {}
|
||||
if shenfen == 'dashou':
|
||||
for p in UserDashou.objects.filter(user__UserUID__in=yonghuids).select_related('user'):
|
||||
nick_map[p.user.UserUID] = p.nicheng or '用户'
|
||||
elif shenfen == 'shangjia':
|
||||
for p in UserShangjia.objects.filter(user__UserUID__in=yonghuids).select_related('user'):
|
||||
nick_map[p.user.UserUID] = p.nicheng or '用户'
|
||||
else:
|
||||
for b in UserBoss.objects.filter(user__UserUID__in=yonghuids).select_related('user'):
|
||||
nick_map[b.user.UserUID] = b.nickname or '用户'
|
||||
|
||||
nick_map = load_rank_nicknames(shenfen, yonghuids)
|
||||
return nick_map, avatar_map
|
||||
|
||||
Reference in New Issue
Block a user