feat: 添加复查功能和批量审核操作
- 复查功能: PUT /assessment/:id/review * 支持调整最终总分 * 记录复查历史(reviewHistory) * 保存原始分数(originalScore) * 保留复查人、复查时间、复查意见 - 批量审核: POST /question-banks/:bankId/items/batch-review * 支持批量通过/拒绝题目 * 可添加审核意见 - AssessmentSession实体: 添加复查相关字段
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user