修复了一些问题
This commit is contained in:
@@ -17,7 +17,7 @@ from backend.models import (
|
|||||||
LeaderDailyStats,
|
LeaderDailyStats,
|
||||||
MerchantDailyStats,
|
MerchantDailyStats,
|
||||||
)
|
)
|
||||||
from users.models import UserDashou, UserShangjia, UserBoss
|
from users.models import UserDashou, UserShangjia, UserBoss, UserGuanshi
|
||||||
from gvsdsdk.models import User
|
from gvsdsdk.models import User
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
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):
|
def _resolve_date_range(riqi: str):
|
||||||
"""根据前端 riqi 参数返回 (start_date, end_date) 闭区间。"""
|
"""根据前端 riqi 参数返回 (start_date, end_date) 闭区间。"""
|
||||||
@@ -187,11 +229,20 @@ class PhbHqsjView(APIView):
|
|||||||
return list(rows)
|
return list(rows)
|
||||||
|
|
||||||
if start_date == end_date:
|
if start_date == end_date:
|
||||||
|
# "今日"/"昨日" 单日查询 — 先查日统计表
|
||||||
qs = model.objects.filter(Date=start_date).order_by(f'-{sort_field}')[:MAX_RANK]
|
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}}
|
{id_field: getattr(r, id_field), **{f: getattr(r, f) for f in fields}}
|
||||||
for r in qs
|
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 = (
|
rows = (
|
||||||
model.objects
|
model.objects
|
||||||
@@ -202,6 +253,34 @@ class PhbHqsjView(APIView):
|
|||||||
)
|
)
|
||||||
return list(rows)
|
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):
|
def _load_user_display(self, rows, shenfen):
|
||||||
id_field = ROLE_CONFIG[shenfen]['id_field']
|
id_field = ROLE_CONFIG[shenfen]['id_field']
|
||||||
yonghuids = [r[id_field] for r in rows if r.get(id_field)]
|
yonghuids = [r[id_field] for r in rows if r.get(id_field)]
|
||||||
|
|||||||
Reference in New Issue
Block a user