修复了一些问题

This commit is contained in:
2026-06-19 16:41:01 +08:00
parent 15381c3051
commit 0ff82d1bac

View File

@@ -17,7 +17,7 @@ from backend.models import (
LeaderDailyStats,
MerchantDailyStats,
)
from users.models import UserDashou, UserShangjia, UserBoss
from users.models import UserDashou, UserShangjia, UserBoss, UserGuanshi
from gvsdsdk.models import User
logger = logging.getLogger(__name__)
@@ -58,6 +58,48 @@ ROLE_CONFIG = {
},
}
# "今日"实时数据 — 从用户Profile表读取jinri系列字段
TODAY_PROFILE_CONFIG = {
'dashou': {
'profile_model': UserDashou,
'profile_sort_field': 'jinrishouyi',
'field_map': {
'AcceptedOrderTotal': 'jinrijiedan',
'CompletedOrderTotal': 'jinrijiedan',
'AcceptedAmount': 'jinrishouyi',
'CompletedAmount': 'jinrishouyi',
},
},
'guanshi': {
'profile_model': UserGuanshi,
'profile_sort_field': 'jinrichongzhi',
'field_map': {
'InvitedPlayerCount': None,
'RechargedPlayerCount': 'jinrichongzhi',
'TotalIncome': None,
},
},
'zuzhang': {
'profile_model': UserBoss,
'profile_sort_field': 'jinri_fenyong',
'field_map': {
'InvitedManagerCount': None,
'CommissionAmount': 'jinri_fenyong',
'TotalIncome': 'jinri_fenyong',
},
},
'shangjia': {
'profile_model': UserShangjia,
'profile_sort_field': 'jinriliushui',
'field_map': {
'AssignedOrderCount': 'jinridingdan',
'AssignedAmount': 'jinriliushui',
'SettledOrderCount': None,
'SettledAmount': None,
},
},
}
def _resolve_date_range(riqi: str):
"""根据前端 riqi 参数返回 (start_date, end_date) 闭区间。"""
@@ -187,11 +229,20 @@ class PhbHqsjView(APIView):
return list(rows)
if start_date == end_date:
# "今日"/"昨日" 单日查询 — 先查日统计表
qs = model.objects.filter(Date=start_date).order_by(f'-{sort_field}')[:MAX_RANK]
return [
rows = [
{id_field: getattr(r, id_field), **{f: getattr(r, f) for f in fields}}
for r in qs
]
# 如果日统计表有数据,直接返回
if rows:
return rows
# 日统计表无数据 — 对于"今日"回退到用户Profile实时字段
today = date.today()
if start_date == today:
return self._query_today_from_profiles(shenfen)
return rows
rows = (
model.objects
@@ -202,6 +253,34 @@ class PhbHqsjView(APIView):
)
return list(rows)
def _query_today_from_profiles(self, shenfen):
"""从用户Profile表读取今日实时数据jinri系列字段"""
cfg = ROLE_CONFIG[shenfen]
today_cfg = TODAY_PROFILE_CONFIG[shenfen]
profile_model = today_cfg['profile_model']
profile_sort = today_cfg['profile_sort_field']
field_map = today_cfg['field_map']
id_field = cfg['id_field']
fields = cfg['fields']
# 查询今日有数据的用户,按排序字段降序
qs = profile_model.objects.filter(
**{f'{profile_sort}__gt': 0}
).select_related('user').order_by(f'-{profile_sort}')[:MAX_RANK]
rows = []
for p in qs:
uid = p.user.UserUID
row = {id_field: uid}
for f in fields:
profile_field = field_map.get(f)
if profile_field:
row[f] = getattr(p, profile_field)
else:
row[f] = 0
rows.append(row)
return rows
def _load_user_display(self, rows, shenfen):
id_field = ROLE_CONFIG[shenfen]['id_field']
yonghuids = [r[id_field] for r in rows if r.get(id_field)]