fix: 排行榜按方案档位展示各名次预计奖金
This commit is contained in:
@@ -16,6 +16,7 @@ from rank.reward_services import (
|
||||
list_my_pending_claims,
|
||||
query_club_rank_rows,
|
||||
query_group_rank_rows,
|
||||
resolve_sort_field_for_display,
|
||||
sort_field_options_for_shenfen,
|
||||
)
|
||||
from users.business_models import User
|
||||
@@ -31,10 +32,10 @@ def _resolve_club_id(request, data_club_id=''):
|
||||
from jituan.services.club_context import resolve_club_id_from_request
|
||||
cid = (data_club_id or '').strip()
|
||||
if not cid:
|
||||
cid = get_user_club_id(request.user) or getattr(request.user, 'ClubID', None) or ''
|
||||
cid = resolve_club_id_from_request(request) or ''
|
||||
if not cid:
|
||||
cid = resolve_club_id_from_request(request) or 'xq'
|
||||
return cid
|
||||
cid = get_user_club_id(request.user) or getattr(request.user, 'ClubID', None) or ''
|
||||
return cid or 'xq'
|
||||
|
||||
|
||||
def _load_display_maps(yonghuids, shenfen):
|
||||
@@ -80,14 +81,12 @@ def _format_rank_list(rows, shenfen, sort_field, sort_label):
|
||||
'touxiang': avatar_map.get(uid, '') or '',
|
||||
'club_id': cid,
|
||||
'club_name': club_names.get(cid, cid),
|
||||
'sort_field': sort_field,
|
||||
'metric_value': int(metric) if is_int else float(metric),
|
||||
'metric_label': sort_label,
|
||||
'metric_is_int': is_int,
|
||||
}
|
||||
# 兼容 fighter-rank 现有字段
|
||||
if is_int:
|
||||
item['chengjiao_zongliang'] = int(metric)
|
||||
else:
|
||||
item['chengjiao_zonge'] = float(metric)
|
||||
item[sort_field] = item['metric_value']
|
||||
result.append(item)
|
||||
return result
|
||||
|
||||
@@ -169,30 +168,15 @@ class PhbJlPhbView(APIView):
|
||||
if riqi not in RIQI_OPTIONS:
|
||||
return Response({'code': 400, 'msg': '周期参数错误', 'data': {'list': []}})
|
||||
|
||||
from rank.reward_models import RankRewardScheme
|
||||
from rank.reward_services import RIQI_TO_PERIOD, SORT_FIELD_REGISTRY
|
||||
from rank.reward_services import SORT_FIELD_REGISTRY
|
||||
|
||||
scheme_sort, sort_label = resolve_sort_field_for_display(club_id, shenfen, riqi)
|
||||
if not sort_field:
|
||||
period_type = RIQI_TO_PERIOD.get(riqi)
|
||||
if period_type and fanwei == 'club':
|
||||
scheme = RankRewardScheme.query.filter(
|
||||
club_id=club_id, shenfen=shenfen, period_type=period_type, enabled=True,
|
||||
).first()
|
||||
if scheme:
|
||||
sort_field = scheme.sort_field
|
||||
if not sort_field:
|
||||
defaults = {
|
||||
'dashou': 'chengjiao_zongliang',
|
||||
'guanshi': 'chongzhi_dashou_shu',
|
||||
'zuzhang': 'yaoqing_guanshi_shu',
|
||||
'shangjia': 'jiesuan_jine',
|
||||
}
|
||||
sort_field = defaults.get(shenfen, 'chengjiao_zongliang')
|
||||
|
||||
if sort_field not in (SORT_FIELD_REGISTRY.get(shenfen) or {}):
|
||||
sort_field = scheme_sort
|
||||
elif sort_field not in (SORT_FIELD_REGISTRY.get(shenfen) or {}):
|
||||
return Response({'code': 400, 'msg': '排序指标无效', 'data': {'list': []}})
|
||||
|
||||
sort_label = SORT_FIELD_LABELS.get(sort_field, sort_field)
|
||||
else:
|
||||
sort_label = SORT_FIELD_LABELS.get(sort_field, sort_field)
|
||||
|
||||
if fanwei == 'club':
|
||||
rows = query_club_rank_rows(club_id, shenfen, sort_field, riqi)
|
||||
@@ -204,9 +188,14 @@ class PhbJlPhbView(APIView):
|
||||
|
||||
# 仅俱乐部榜展示各行奖金(集团总榜名次与俱乐部分奖名次不同,不可混用)
|
||||
rank_rewards = reward.get('rank_rewards') or {}
|
||||
if fanwei == 'club':
|
||||
tier_rewards = reward.get('tier_rewards') or {}
|
||||
if fanwei == 'club' and reward.get('scheme_enabled'):
|
||||
for item in result_list:
|
||||
item['reward_amount'] = rank_rewards.get(item['mingci'], 0)
|
||||
mc = item['mingci']
|
||||
settled = rank_rewards.get(mc)
|
||||
preview = tier_rewards.get(mc, 0)
|
||||
item['reward_amount'] = settled if settled else preview
|
||||
item['reward_is_preview'] = not settled and preview > 0
|
||||
|
||||
return Response({
|
||||
'code': 200,
|
||||
|
||||
Reference in New Issue
Block a user