进行了 backend 的重构,实验中

This commit is contained in:
2026-06-18 04:15:23 +08:00
parent 54cc658f0b
commit 854c832c07
10 changed files with 1196 additions and 864 deletions

View File

@@ -12,10 +12,10 @@ from rest_framework.response import Response
from rest_framework.views import APIView
from backend.models import (
DashouRiTongji,
GuanshiRiTongji,
ZuzhangRiTongji,
ShangjiaRiTongji,
PlayerDailyStats,
ManagerDailyStats,
LeaderDailyStats,
MerchantDailyStats,
)
from users.models import UserDashou, UserShangjia, UserBoss
from gvsdsdk.models import User
@@ -29,28 +29,32 @@ SHENFEN_OPTIONS = frozenset({'dashou', 'guanshi', 'zuzhang', 'shangjia'})
ROLE_CONFIG = {
'dashou': {
'model': DashouRiTongji,
'sort_field': 'chengjiao_zonge',
'fields': ('jiedan_zongliang', 'chengjiao_zongliang', 'jiedan_zonge', 'chengjiao_zonge'),
'int_fields': frozenset({'jiedan_zongliang', 'chengjiao_zongliang'}),
'model': PlayerDailyStats,
'id_field': 'PlayerID',
'sort_field': 'CompletedAmount',
'fields': ('AcceptedOrderTotal', 'CompletedOrderTotal', 'AcceptedAmount', 'CompletedAmount'),
'int_fields': frozenset({'AcceptedOrderTotal', 'CompletedOrderTotal'}),
},
'guanshi': {
'model': GuanshiRiTongji,
'sort_field': 'shouru_zonge',
'fields': ('yaoqing_dashou_shu', 'chongzhi_dashou_shu', 'shouru_zonge'),
'int_fields': frozenset({'yaoqing_dashou_shu', 'chongzhi_dashou_shu'}),
'model': ManagerDailyStats,
'id_field': 'ManagerID',
'sort_field': 'TotalIncome',
'fields': ('InvitedPlayerCount', 'RechargedPlayerCount', 'TotalIncome'),
'int_fields': frozenset({'InvitedPlayerCount', 'RechargedPlayerCount'}),
},
'zuzhang': {
'model': ZuzhangRiTongji,
'sort_field': 'shouru_zonge',
'fields': ('yaoqing_guanshi_shu', 'fenyong_jine', 'shouru_zonge'),
'int_fields': frozenset({'yaoqing_guanshi_shu'}),
'model': LeaderDailyStats,
'id_field': 'LeaderID',
'sort_field': 'TotalIncome',
'fields': ('InvitedManagerCount', 'CommissionAmount', 'TotalIncome'),
'int_fields': frozenset({'InvitedManagerCount'}),
},
'shangjia': {
'model': ShangjiaRiTongji,
'sort_field': 'jiesuan_jine',
'fields': ('paifa_dingdan_shu', 'paifa_jine', 'jiesuan_dingdan_shu', 'jiesuan_jine'),
'int_fields': frozenset({'paifa_dingdan_shu', 'jiesuan_dingdan_shu'}),
'model': MerchantDailyStats,
'id_field': 'MerchantID',
'sort_field': 'SettledAmount',
'fields': ('AssignedOrderCount', 'AssignedAmount', 'SettledOrderCount', 'SettledAmount'),
'int_fields': frozenset({'AssignedOrderCount', 'SettledOrderCount'}),
},
}
@@ -137,10 +141,11 @@ class PhbHqsjView(APIView):
nick_map, avatar_map = self._load_user_display(rows, shenfen)
cfg = ROLE_CONFIG[shenfen]
int_fields = cfg['int_fields']
id_field = cfg['id_field']
result_list = []
for idx, row in enumerate(rows):
yonghuid = row['yonghuid']
yonghuid = row[id_field]
item = {
'mingci': idx + 1,
'yonghuid': yonghuid,
@@ -169,35 +174,37 @@ class PhbHqsjView(APIView):
model = cfg['model']
sort_field = cfg['sort_field']
fields = cfg['fields']
id_field = cfg['id_field']
annotate_kwargs = {f: Sum(f) for f in fields}
if all_time:
rows = (
model.objects
.values('yonghuid')
.values(id_field)
.annotate(**annotate_kwargs)
.order_by(f'-{sort_field}')[:MAX_RANK]
)
return list(rows)
if start_date == end_date:
qs = model.objects.filter(riqi=start_date).order_by(f'-{sort_field}')[:MAX_RANK]
qs = model.objects.filter(Date=start_date).order_by(f'-{sort_field}')[:MAX_RANK]
return [
{'yonghuid': r.yonghuid, **{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
]
rows = (
model.objects
.filter(riqi__gte=start_date, riqi__lte=end_date)
.values('yonghuid')
.filter(Date__gte=start_date, Date__lte=end_date)
.values(id_field)
.annotate(**annotate_kwargs)
.order_by(f'-{sort_field}')[:MAX_RANK]
)
return list(rows)
def _load_user_display(self, rows, shenfen):
yonghuids = [r['yonghuid'] for r in rows if r.get('yonghuid')]
id_field = ROLE_CONFIG[shenfen]['id_field']
yonghuids = [r[id_field] for r in rows if r.get(id_field)]
if not yonghuids:
return {}, {}