diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index a89d63350..6b1f8cdbb 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.13.48", + "version": "2.13.49", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/handler/problem.ts b/packages/hydrooj/src/handler/problem.ts index e940ef06d..4dc695178 100644 --- a/packages/hydrooj/src/handler/problem.ts +++ b/packages/hydrooj/src/handler/problem.ts @@ -230,7 +230,7 @@ export class ProblemDetailHandler extends ProblemHandler { // TODO maybe async? await record.getMulti(domainId, { pid }).forEach(async (doc) => { await record.reset(domainId, doc._id, true); - await record.judge(domainId, doc._id); + await record.judge(domainId, doc._id, -1); }); this.back(); } diff --git a/packages/hydrooj/src/handler/record.ts b/packages/hydrooj/src/handler/record.ts index 76b26dfc4..5df3b214e 100644 --- a/packages/hydrooj/src/handler/record.ts +++ b/packages/hydrooj/src/handler/record.ts @@ -99,7 +99,7 @@ class RecordDetailHandler extends RecordHandler { const rdoc = await record.get(domainId, rid); if (rdoc) { await record.reset(domainId, rid, true); - await record.judge(domainId, rid); + await record.judge(domainId, rid, 0); } this.back(); } @@ -165,7 +165,7 @@ class RecordRejudgeHandler extends Handler { const rdoc = await record.get(domainId, rid); if (rdoc) { await record.reset(domainId, rid, true); - await record.judge(domainId, rid); + await record.judge(domainId, rid, 0); } this.back(); } diff --git a/packages/hydrooj/src/model/record.ts b/packages/hydrooj/src/model/record.ts index f656f613d..4d40848d8 100644 --- a/packages/hydrooj/src/model/record.ts +++ b/packages/hydrooj/src/model/record.ts @@ -54,7 +54,7 @@ export async function get(domainId: string, _id: ObjectID): Promise return null; } -export async function judge(domainId: string, rid: ObjectID) { +export async function judge(domainId: string, rid: ObjectID, priority = 1) { const rdoc = await get(domainId, rid); let config: RunConfig | ProblemConfig = rdoc.config; let data; @@ -66,6 +66,7 @@ export async function judge(domainId: string, rid: ObjectID) { delete rdoc._id; await task.add({ ...rdoc, + priority, type: 'judge', rid, domainId, diff --git a/packages/hydrooj/src/model/task.ts b/packages/hydrooj/src/model/task.ts index 85ee6045f..21f71bce7 100644 --- a/packages/hydrooj/src/model/task.ts +++ b/packages/hydrooj/src/model/task.ts @@ -10,8 +10,8 @@ const coll = db.collection('task'); export async function add(task: Partial & { type: string }) { const t: Task = { ...task, - count: task.count || 1, - priority: task.priority || 1, + count: task.count ?? 1, + priority: task.priority ?? 1, executeAfter: task.executeAfter || new Date(), _id: new ObjectID(), }; @@ -34,7 +34,7 @@ export function del(_id: ObjectID) { export async function getFirst(query: FilterQuery) { const q = { ...query }; q.executeAfter = q.executeAfter || { $lt: new Date() }; - const res = await coll.findOneAndDelete(q); + const res = await coll.findOneAndDelete(q, { sort: { priority: -1 } }); if (res.value) { logger.debug('%o', res.value); if (res.value.interval) {