修复结训:锁定参训记录避免结训并发竞态

This commit is contained in:
wangzhibiao committed 2026-09-21 21:43:52 +08:00
1 parent a7fe99f94d
commit 612f24d5f1
1 file changed
+4
@@ -41,6 +41,10 @@ public class EnrollmentPlanCompletionAdapter implements PlanEnrollmentCompletion
@Override
public void precheckCompletion(String planId)
{
// 按 enrollment_id 稳定升序锁定该计划下全部学员记录 (SELECT ... ORDER BY enrollment_id FOR UPDATE),
// 阻止结训与学员报到/状态修改之间的并发竞态与 TOCTOU 窗口
trainEnrollmentService.selectEnrollmentsForUpdateByPlanId(planId);
List<java.util.Map<String, Object>> stats = trainEnrollmentService.selectEnrollmentCompletionStatsByPlanId(planId);
int status0Waiting = 0;
int status1Reported = 0;