diff --git a/users/paihang_views.py b/users/paihang_views.py index dc24aff..b850852 100644 --- a/users/paihang_views.py +++ b/users/paihang_views.py @@ -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)]