diff --git a/contest/views.py b/contest/views.py index ef616f1a..f945b41f 100644 --- a/contest/views.py +++ b/contest/views.py @@ -390,10 +390,10 @@ def _cmp(x, y): def contest_rank_page(request, contest_id): contest = Contest.objects.get(id=contest_id) contest_problems = ContestProblem.objects.filter(contest=contest).order_by("sort_index") - result = ContestSubmission.objects.values("user_id").annotate(total_submit=Count("user_id")) + result = ContestSubmission.objects.filter(contest=contest).values("user_id").annotate(total_submit=Sum("total_submission_number")) for i in range(0, len(result)): # 这个人所有的提交 - submissions = ContestSubmission.objects.filter(user_id=result[i]["user_id"]) + submissions = ContestSubmission.objects.filter(user_id=result[i]["user_id"], contest_id=contest_id) result[i]["submissions"] = {} for item in submissions: result[i]["submissions"][item.problem_id] = item diff --git a/mq/scripts/info.py b/mq/scripts/info.py index 6634b5b3..119845c0 100644 --- a/mq/scripts/info.py +++ b/mq/scripts/info.py @@ -52,6 +52,8 @@ class MessageQueue(object): try: contest_submission = ContestSubmission.objects.get(user_id=submission.user_id, contest=contest, problem_id=contest_problem.id) + # 提交次数加1 + contest_submission.total_submission_number += 1 if submission.result == result["accepted"]: @@ -65,13 +67,10 @@ class MessageQueue(object): contest_submission.total_time += int((submission.create_time - contest.start_time).total_seconds() / 60) # 标记为已经通过 contest_submission.ac = True - # 提交次数加1 - contest_submission.total_submission_number += 1 # contest problem ac 计数器加1 contest_problem.total_accepted_number += 1 else: # 如果这个提交是错误的,就罚时20分钟 - contest_submission.ac = False contest_submission.total_time += 20 contest_submission.save() contest_problem.save() diff --git a/problem/views.py b/problem/views.py index 6052ea90..b73085fd 100644 --- a/problem/views.py +++ b/problem/views.py @@ -185,8 +185,12 @@ class TestCaseUploadAPIView(APIView): os.mkdir(test_case_dir) for name in l: f = open(test_case_dir + name, "wb") - f.write(test_case_file.read(name).replace("\r\n", "\n")) - f.close() + try: + f.write(test_case_file.read(name).replace("\r\n", "\n")) + except MemoryError: + return error_response(u"单个测试数据体积过大!") + finally: + f.close() l.sort() file_info = {"test_case_number": len(l) / 2, "test_cases": {}}