diff --git a/app/service/admin.js b/app/service/admin.js index 86ae9a6..e9145e4 100644 --- a/app/service/admin.js +++ b/app/service/admin.js @@ -442,9 +442,8 @@ class AdminService extends Service { answeredCount, totalQuestions: answeredCount, autoScore, - examScore: c.exam_score ?? 0, wordScore: c.word_score ?? 0, - // 总分 = 客观题自动评分合计 + Word 阅卷分(与卷面分/Word 分口径一致); + // 总分 = 客观题自动评分合计 + 综合大题阅卷分(与「卷面分 / 大题分」口径一致); // 不读 contestants.score(未人工评分时恒为 0,会导致"客观题有分但总分=0")。 totalScore: autoScore + (c.word_score ?? 0), hasWordFile: hasWord, @@ -452,7 +451,9 @@ class AdminService extends Service { wordFileName: (wordSub && wordSub.word_file_name) || null, submitted: !!formalSubmitTime || answeredCount > 0, submitTime: formalSubmitTime || (subs.length > 0 ? subs[0].created_at : null), - // 卷面分(客观分)统一取客观题自动评分合计,与成绩管理表口径一致 + // 卷面分(客观分)统一取客观题自动评分合计,与成绩管理表口径一致。 + // ⚠️ 此前本行与上方 `examScore: c.exam_score ?? 0` 重复定义(对象字面量重复键,后者静默胜出); + // 虽因 updateScores 会同步写 exam_score 而「结果碰巧一致」,但属隐患,故删除上方那条只留本条。 examScore: autoScore, }; }); @@ -629,8 +630,10 @@ class AdminService extends Service { let csvContent = ''; if (isExam) { - // 中职/高职组:客观题(系统) + Word(人工) - csvContent = '选手ID,身份证号,姓名,手机号,是否提交,客观题分,Word分,总分\n'; + // 中职/高职组:客观题(系统自动评分) + 综合大题(人工阅卷) + // 说明:大题分落库列名为 contestants.word_score(历史沿用,语义已变为「综合大题得分」), + // 故此处取 item.wordScore,仅表头文案按现行口径显示为「大题分」。 + csvContent = '选手ID,身份证号,姓名,手机号,是否提交,客观题分,大题分,总分\n'; for (const item of submissions) { csvContent += [ item.contestantId,