mirror of
https://gitcode.com/gh_mirrors/hy/Hydro.git
synced 2026-10-17 17:36:08 +08:00
core: fix strictioi stat (#605)
This commit is contained in:
1 parent
3e49c5bf7b
commit
bd95b9bd83
2 files changed
+20
-6
No files matched your search
@@ -386,15 +386,15 @@ const strictioi = buildContestRule({
|
||||
stat(tdoc, journal) {
|
||||
const detail = {};
|
||||
let score = 0;
|
||||
const subtasks: Record<number, SubtaskResult> = {};
|
||||
const subtasks: Record<number, Record<number, SubtaskResult>> = {};
|
||||
for (const j of journal.filter((i) => tdoc.pids.includes(i.pid))) {
|
||||
subtasks[j.pid] ||= {};
|
||||
for (const i in j.subtasks) {
|
||||
if (!subtasks[i] || subtasks[i].score < j.subtasks[i].score) subtasks[i] = j.subtasks[i];
|
||||
if (!subtasks[j.pid][i] || subtasks[j.pid][i].score < j.subtasks[i].score) subtasks[j.pid][i] = j.subtasks[i];
|
||||
}
|
||||
j.score = sumBy(Object.values(subtasks), 'score');
|
||||
j.status = Math.max(...Object.values(subtasks).map((i) => i.status));
|
||||
j.subtasks = subtasks;
|
||||
if (!detail[j.pid] || detail[j.pid].score < j.score) detail[j.pid] = j;
|
||||
j.score = sumBy(Object.values(subtasks[j.pid]), 'score');
|
||||
j.status = Math.max(...Object.values(subtasks[j.pid]).map((i) => i.status));
|
||||
if (!detail[j.pid] || detail[j.pid].score < j.score) detail[j.pid] = { ...j, subtasks: subtasks[j.pid] };
|
||||
}
|
||||
for (const i in detail) score += detail[i].score;
|
||||
return { score, detail };
|
||||
|
||||
@@ -602,6 +602,20 @@ const scripts: UpgradeScript[] = [
|
||||
await document.coll.updateMany({ docType: document.TYPE_CONTEST, assign: null }, { $set: { assign: [] } });
|
||||
return true;
|
||||
},
|
||||
async function _83_84() {
|
||||
const tdocs = await document.coll.find({ docType: document.TYPE_CONTEST, rule: 'strictioi' }).toArray();
|
||||
for (const tdoc of tdocs) {
|
||||
logger.info(tdoc.domainId, tdoc.title);
|
||||
const rdocs = await RecordModel.coll.find({ domainId: tdoc.domainId, contest: tdoc.docId }).toArray();
|
||||
for (const rdoc of rdocs) {
|
||||
await document.revPushStatus(tdoc.domainId, document.TYPE_CONTEST, tdoc.docId, rdoc.uid, 'journal', {
|
||||
rid: rdoc._id, pid: rdoc.pid, status: rdoc.status, score: rdoc.score, subtasks: rdoc.subtasks,
|
||||
}, 'rid');
|
||||
}
|
||||
await contest.recalcStatus(tdoc.domainId, tdoc.docId);
|
||||
}
|
||||
return true;
|
||||
},
|
||||
];
|
||||
|
||||
export default scripts;
|
||||
Reference in new issue
Block a user