Browse Source

Change submission count calculation logic.

pull/6/head
t123yh 7 years ago
parent
commit
f01acc5739
  1. 25
      models/judge_state.js
  2. 8
      models/problem.js

25
models/judge_state.js

@ -136,19 +136,10 @@ class JudgeState extends Model {
await syzoj.utils.lock(['JudgeState::updateRelatedInfo', 'problem', this.problem_id], async () => { await syzoj.utils.lock(['JudgeState::updateRelatedInfo', 'problem', this.problem_id], async () => {
await syzoj.utils.lock(['JudgeState::updateRelatedInfo', 'user', this.user_id], async () => { await syzoj.utils.lock(['JudgeState::updateRelatedInfo', 'user', this.user_id], async () => {
if (this.type === 0) { if (this.type === 0) {
if (newSubmission) { await this.loadRelationships();
await this.loadRelationships(); await this.user.refreshSubmitInfo();
await this.user.refreshSubmitInfo(); await this.user.save();
this.problem.submit_num++; await this.problem.resetSubmissionCount();
await this.user.save();
await this.problem.save();
} else if (this.status === 'Accepted') {
await this.loadRelationships();
await this.user.refreshSubmitInfo();
this.problem.ac_num++;
await this.user.save();
await this.problem.save();
}
} else if (this.type === 1) { } else if (this.type === 1) {
let contest = await Contest.fromID(this.type_info); let contest = await Contest.fromID(this.type_info);
await contest.newSubmission(this); await contest.newSubmission(this);
@ -186,17 +177,13 @@ class JudgeState extends Model {
await waiting_judge.save(); await waiting_judge.save();
*/ */
await this.problem.resetSubmissionCount();
if (oldStatus === 'Accepted') { if (oldStatus === 'Accepted') {
await this.user.refreshSubmitInfo(); await this.user.refreshSubmitInfo();
await this.user.save(); await this.user.save();
} }
if (this.type === 0) { if (this.type === 1) {
if (oldStatus === 'Accepted') {
this.problem.ac_num--;
await this.problem.save();
}
} else if (this.type === 1) {
let contest = await Contest.fromID(this.type_info); let contest = await Contest.fromID(this.type_info);
await contest.newSubmission(this); await contest.newSubmission(this);
} }

8
models/problem.js

@ -498,9 +498,11 @@ class Problem extends Model {
} }
async resetSubmissionCount() { async resetSubmissionCount() {
this.submit_num = await JudgeState.count({ score: { $not: null }, problem_id: this.id }); await syzoj.utils.lock(['Problem::resetSubmissionCount', this.id], async () => {
this.ac_num = await JudgeState.count({ score: 100, problem_id: this.id }); this.submit_num = await JudgeState.count({ score: { $not: null }, problem_id: this.id, type: { $not: 1 } });
await this.save(); this.ac_num = await JudgeState.count({ score: 100, problem_id: this.id, $type: { $not: 1 } });
await this.save();
});
} }
// type: fastest / slowest / shortest / longest / earliest // type: fastest / slowest / shortest / longest / earliest

Loading…
Cancel
Save