主管交接
考核進行中主管離職時,保留 ExamRecord 歷史 + 換 ExamParticipant 配置欄位。
由 ReviewerTransferService 處理。
兩種模式
模式 1:保留記錄換配置
- ExamRecord.ReviewerName 不動
- ExamParticipant.Reviewer1/2/Approver* 換新主管
- 適用:人離職但要繼續考核
模式 2:Shift 遞補(NewReviewerName 為空)
- 整關往前遞補
TotalReviewSteps -= 1- 適用:刪掉某層審核(例如把終審拿掉變五審)
API
POST /api/hr/participants/batch-transfer-reviewers
支援 DryRun: true —— 先預覽影響哪些人,不實際寫入。
前端入口
人員管理頁批次調整主管 Dialog → 切換「保留記錄 / 清空重評」兩模式。
孤立 ExamRecord 防護
當 TotalReviewSteps 減少時,可能產生 Step > TotalReviewSteps 的孤立 ExamRecord。三層防護:
UpdateReviewersAsync:減少關卡時自動刪除孤立 ExamRecord + ExamAnswers,重算 FinalScoreSubmitDepartmentAsync:提交前檢查並自動修復,記錄稽核日誌- 查詢規則:
validRecords過濾r.Step <= p.TotalReviewSteps
FinalScore 重算保護
孤立記錄清理後重算 FinalScore,必須優先使用 GradeAdjustment 調分值:
- 有 GradeAdjustment → 使用最後一筆的
AdjustedScore/AdjustedGrade - 沒有 → 從 ExamRecord 重算 ScoreD
跨 Controller 共用方法
| 方法 | 位置 | 用途 |
|---|---|---|
GetFinalScore(record, totalSteps, isMerged) | ReviewController (internal static) | 根據 TotalReviewSteps 取最終分數 |
CalculateGrade(score) | ReviewController (internal static) | 分數→等第(fallback,正路請用 GradingService) |
相關概念
強連結(原文明確提及)
- ReviewerTransferService — 服務層實作
- ReviewerAccountService — 帳號池生命週期
- 考核審核流程
- 退回流程
- GradeAdjustment — 重算 FinalScore 時優先參考
- GradingService
← 回到 wiki