From 78a247acd500e9b15ae25eb21599ab0c209cd0f5 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Wed, 16 Oct 2024 18:27:07 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E6=95=B0=E6=8D=AE=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E6=B2=A1=E5=AE=8C=E6=88=90=E7=9A=84=E4=BA=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- submission/views/admin.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/submission/views/admin.py b/submission/views/admin.py index e65b8f5..f7249ac 100644 --- a/submission/views/admin.py +++ b/submission/views/admin.py @@ -50,11 +50,13 @@ class SubmissionStatisticsAPI(APIView): # 统计人数 person_count = 0 + all_persions = [] if username: submissions = submissions.filter(username__icontains=username) - person_count = User.objects.filter(username__icontains=username, + all_persions = User.objects.filter(username__icontains=username, is_disabled=False, - admin_type=AdminType.REGULAR_USER).count() + admin_type=AdminType.REGULAR_USER).values_list("username", flat=True) + person_count = all_persions.count() submission_count = submissions.count() accepted_count = submissions.filter(result=JudgeStatus.ACCEPTED).count() @@ -68,23 +70,25 @@ class SubmissionStatisticsAPI(APIView): accepted_count=Count("id", filter=Q(result=JudgeStatus.ACCEPTED), distinct=True), ).order_by("-submission_count") - data = [] + accepted = [] for item in counts: if item["accepted_count"] > 0: rate = round(item["accepted_count"]/item["submission_count"]*100, 2) item["correct_rate"] = f"{rate}%" - data.append(item) + accepted.append(item) + + unaccepted = list(set(all_persions) - set([item['username'] for item in accepted])) # 统计人数完成率 person_rate = 0 if person_count: - person_rate = round(len(data)/person_count*100, 2) + person_rate = round(len(accepted)/person_count*100, 2) # 下面是做一些超出 100% 的操作,比如有人已经删号了,但是提交记录还在 if person_rate >= 100: person_rate = 100 # 搜出来的人数比提交人数还多的情况 - if person_count < len(data): - person_count = len(data) + if person_count < len(accepted): + person_count = len(accepted) return self.success({ "submission_count": submission_count, @@ -92,6 +96,7 @@ class SubmissionStatisticsAPI(APIView): "correct_rate": f"{correct_rate}%", "person_count": person_count, "person_rate": f"{person_rate}%", - "data": data, + "data": accepted, + "data_unaccepted": unaccepted }) \ No newline at end of file