fix(aihr): make daily drill completion race-safe

This commit is contained in:
2026-07-14 11:24:46 +08:00
parent 83161569d1
commit ab0be6b876
3 changed files with 6 additions and 2 deletions
@@ -1926,7 +1926,7 @@ public class AihrPracticeSeedService {
Long audioOssId = request == null ? null : request.audioOssId();
DailyDrillScore score = scoreDailyDrill(answer, parts.referenceAnswer());
LocalDateTime now = LocalDateTime.now();
jdbcTemplate.update("""
int updated = jdbcTemplate.update("""
UPDATE aihr_practice_assignment
SET status = '已完成',
answer_text = ?,
@@ -1948,6 +1948,9 @@ public class AihrPracticeSeedService {
tenantId(),
id
);
if (updated == 0) {
return null;
}
return new DailyDrillAnswerResponse(id, "已完成", score.correct(), score.score(), score.feedback(), parts.referenceAnswer(), audioUrl, audioOssId);
}
@@ -131,6 +131,7 @@ public class AihrPracticeSeedServiceTest {
String statusGuard = "status = '待训练'";
assertTrue(method.contains("AND " + statusGuard));
assertTrue(method.indexOf("AND " + statusGuard) != method.lastIndexOf("AND " + statusGuard));
assertTrue(method.contains("if (updated == 0)"));
}
@Test