修复了一些问题
This commit is contained in:
@@ -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)]
|
||||
|
||||
Reference in New Issue
Block a user