feat: 添加复查功能和批量审核操作

- 复查功能: PUT /assessment/:id/review
  * 支持调整最终总分
  * 记录复查历史(reviewHistory)
  * 保存原始分数(originalScore)
  * 保留复查人、复查时间、复查意见

- 批量审核: POST /question-banks/:bankId/items/batch-review
  * 支持批量通过/拒绝题目
  * 可添加审核意见

- AssessmentSession实体: 添加复查相关字段
This commit is contained in:
Developer
2026-05-13 23:06:40 +08:00
parent 332b14454b
commit 649844a657
7 changed files with 149 additions and 0 deletions
@@ -1438,4 +1438,53 @@ const initialState: Partial<EvaluationState> = {
recentRecords,
};
}
async reviewAssessment(
sessionId: string,
newScore: number,
comment: string | undefined,
reviewerId: string,
tenantId: string,
): Promise<AssessmentSession> {
const session = await this.sessionRepository.findOne({
where: { id: sessionId },
});
if (!session) {
throw new NotFoundException('Assessment session not found');
}
if (session.status !== AssessmentStatus.COMPLETED) {
throw new ForbiddenException('Can only review completed assessments');
}
const reviewRecord = {
reviewedBy: reviewerId,
reviewedAt: new Date().toISOString(),
originalScore: session.finalScore,
newScore: newScore,
comment: comment || '',
};
const reviewHistory = session.reviewHistory || [];
reviewHistory.push(reviewRecord);
if (!session.originalScore) {
session.originalScore = session.finalScore;
}
session.finalScore = newScore;
session.reviewedBy = reviewerId;
session.reviewedAt = new Date();
session.reviewComment = comment || null;
session.reviewHistory = reviewHistory;
await this.sessionRepository.save(session);
this.logger.log(
`[reviewAssessment] Session ${sessionId} reviewed by ${reviewerId}, score changed from ${reviewRecord.originalScore} to ${newScore}`,
);
return session;
}
}