From 1746fe7184346d3fb3fceed709f4dbc72bc6f9a5 Mon Sep 17 00:00:00 2001 From: virusdefender <1670873886@qq.com> Date: Tue, 25 Aug 2015 15:45:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E6=9C=AC=E5=AE=8C=E6=88=90=E6=AF=94?= =?UTF-8?q?=E8=B5=9B=E6=8E=92=E5=90=8D=E7=9A=84=E5=8A=9F=E8=83=BD=E5=92=8C?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contest/views.py | 33 ++++++------------------- mq/scripts/info.py | 3 +++ template/oj/contest/contest_rank.html | 35 ++++++++++++++++++++++++--- utils/templatetags/submission.py | 22 ++++++++++++++++- 4 files changed, 64 insertions(+), 29 deletions(-) diff --git a/contest/views.py b/contest/views.py index 92cbd78..6720193 100644 --- a/contest/views.py +++ b/contest/views.py @@ -300,7 +300,7 @@ def contest_problem_page(request, contest_id, contest_problem_id): contest_problem = ContestProblem.objects.get(id=contest_problem_id, visible=True) except ContestProblem.DoesNotExist: return error_page(request, u"比赛题目不存在") - warning = u"您已经提交过本题的正确答案!" + warning = u"您已经提交过本题的正确答案,重复提交可能造成时间累计。" show_warning = False try: submission = ContestSubmission.objects.get(user=request.user, contest=contest, problem=contest_problem) @@ -394,39 +394,22 @@ def _cmp(x, y): @check_user_contest_permission 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")) for i in range(0, len(result)): # 这个人所有的提交 submissions = ContestSubmission.objects.filter(user_id=result[i]["user_id"]) + result[i]["submissions"] = {} + for item in submissions: + result[i]["submissions"][item.problem_id] = item result[i]["total_ac"] = submissions.filter(ac=True).count() result[i]["user"] = User.objects.get(id=result[i]["user_id"]) - result[i]["submissions"] = submissions.order_by("problem__sort_index") result[i]["total_time"] = submissions.filter(ac=True).aggregate(total_time=Sum("total_time"))["total_time"] - print result - return render(request, "oj/contest/contest_rank.html") - # - # - # return - # contest = Contest.objects.get(id=contest_id) - # contest_submissions = ContestSubmission.objects.filter(contest=contest) - # result = {} - # # 先把数据按照用户id 为 key 整理一下 - # # {1: {"submissions": [], "total_time": 0, "total_ac": 0}} - # for item in contest_submissions: - # if item.user.id not in contest_submissions: - # result[item.user.id] = {"user": {"id": item.user.id, "username": item.user.username, - # "real_name": item.user.real_name}, - # "submissions": [], "total_time": 0, "total_ac": 0} - # result[item.user.id]["submissions"].append(ContestSubmissionSerializer(item).data) - # if item.ac: - # result[item.user.id]["total_time"] += item.total_time - # result[item.user.id]["total_ac"] += 1 - # l = [] - # for k, v in result.iteritems(): - # l.append(v) - # print sorted(l, cmp=_cmp, reverse=True) + return render(request, "oj/contest/contest_rank.html", + {"contest": contest, "contest_problems": contest_problems, "result": sorted(result, cmp=_cmp, reverse=True)}) diff --git a/mq/scripts/info.py b/mq/scripts/info.py index 661c3ff..6634b5b 100644 --- a/mq/scripts/info.py +++ b/mq/scripts/info.py @@ -61,9 +61,12 @@ class MessageQueue(object): logger.debug(contest.start_time) logger.debug(submission.create_time) logger.debug((submission.create_time - contest.start_time).total_seconds()) + logger.debug(int((submission.create_time - contest.start_time).total_seconds() / 60)) 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: diff --git a/template/oj/contest/contest_rank.html b/template/oj/contest/contest_rank.html index 89d1e40..823b021 100644 --- a/template/oj/contest/contest_rank.html +++ b/template/oj/contest/contest_rank.html @@ -1,10 +1,10 @@ {% extends "oj_base.html" %} {% block body %} - {% load contest %} + {% load submission %}
+ + + + + + + + {% for item in contest_problems %} + + {% endfor %} + + + + {% for item in result %} + + + + + + {% for problem in contest_problems %} + + {% endfor %} + + {% endfor %} + +
#用户名AC / 总提交用时 + 罚时{{ item.sort_index }} +
{{ forloop.counter }}{{ item.user.username }}{{ item.total_ac }} / {{ item.total_submit }}{% if item.total_time %}{{ item.total_time }} min{% else %}--{% endif %} + {% submission_problem problem item.submissions %} +
diff --git a/utils/templatetags/submission.py b/utils/templatetags/submission.py index a80c25e..b1f43d2 100644 --- a/utils/templatetags/submission.py +++ b/utils/templatetags/submission.py @@ -29,7 +29,27 @@ def translate_result_class(value): return "danger" +def get_contest_submission_problem_detail(contest_problem, my_submission): + if contest_problem.id in my_submission: + submission = my_submission[contest_problem.id] + if submission.ac: + return u"\n 时间: " + str(submission.total_time) + u" min" + return "" + + +def get_submission_problem_result_class(contest_problem, my_submission): + if contest_problem.id in my_submission: + submission = my_submission[contest_problem.id] + if submission.ac: + return "success" + else: + return "danger" + else: + return "" + register = template.Library() register.filter("translate_result", translate_result) register.filter("translate_language", translate_language) -register.filter("translate_result_class", translate_result_class) \ No newline at end of file +register.filter("translate_result_class", translate_result_class) +register.simple_tag(get_contest_submission_problem_detail, name="submission_problem") +register.simple_tag(get_submission_problem_result_class, name="submission_problem_result_class") \ No newline at end of file