进行了 backend 的重构,实验中
This commit is contained in:
@@ -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 {}, {}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user