diff --git a/packages/hydrooj/src/handler/judge.ts b/packages/hydrooj/src/handler/judge.ts index 08c600e99..716d1572e 100644 --- a/packages/hydrooj/src/handler/judge.ts +++ b/packages/hydrooj/src/handler/judge.ts @@ -102,7 +102,7 @@ export async function postJudge(rdoc: RecordDoc) { status: STATUS.STATUS_ACCEPTED, contest: { $ne: new ObjectID('0'.repeat(24)) }, }).project({ _id: 1, contest: 1 }).toArray(); - const priority = await record.submissionPriority(rdoc.uid, -rdocs.length * 5 - 50); + const priority = await record.submissionPriority(rdoc.uid, -5000 - rdocs.length * 5 - 50); await Promise.all(rdocs.map( (r) => record.judge(rdoc.domainId, r._id, priority, r.contest ? { detail: false } : {}, { hackRejudge: input }), )); diff --git a/packages/hydrooj/src/handler/problem.ts b/packages/hydrooj/src/handler/problem.ts index b4b7b102c..b21cbf751 100644 --- a/packages/hydrooj/src/handler/problem.ts +++ b/packages/hydrooj/src/handler/problem.ts @@ -445,7 +445,7 @@ export class ProblemDetailHandler extends ContestDetailBaseHandler { contest: { $ne: new ObjectID('0'.repeat(24)) }, 'files.hack': { $exists: false }, }).project({ _id: 1, contest: 1 }).toArray(); - const priority = await record.submissionPriority(this.user._id, -rdocs.length * 5 - 50); + const priority = await record.submissionPriority(this.user._id, -10000 - rdocs.length * 5 - 50); await Promise.all(rdocs.map( (doc) => record.reset(domainId, doc._id, true) .then(() => record.judge(domainId, doc._id, priority, doc.contest ? { detail: false } : {})), diff --git a/packages/hydrooj/src/model/record.ts b/packages/hydrooj/src/model/record.ts index feb31caed..dde34d8c4 100644 --- a/packages/hydrooj/src/model/record.ts +++ b/packages/hydrooj/src/model/record.ts @@ -33,7 +33,7 @@ export default class RecordModel { const pending = timeRecent.filter((i) => [ STATUS.STATUS_WAITING, STATUS.STATUS_FETCHED, STATUS.STATUS_COMPILING, STATUS.STATUS_JUDGING, ].includes(i.status)).length; - return base - ((pending * 1000 + 1) * (sum(timeRecent.map((i) => i.time || 0)) / 10000) + 1); + return base - (pending * 1000 + 1) * (sum(timeRecent.map((i) => i.time || 0)) / 10000 + 1); } static async get(_id: ObjectID): Promise; @@ -197,7 +197,7 @@ export default class RecordModel { return res.modifiedCount; } - static reset(domainId: string, rid: MaybeArray, isRejudge: boolean) { + static async reset(domainId: string, rid: MaybeArray, isRejudge: boolean) { const upd: any = { score: 0, status: STATUS.STATUS_WAITING, @@ -210,6 +210,7 @@ export default class RecordModel { judger: null, }; if (isRejudge) upd.rejudged = true; + await task.deleteMany(rid instanceof Array ? { rid: { $in: rid } } : { rid }); return RecordModel.update(domainId, rid, upd); }