diff --git a/src/main/java/com/ai/da/service/impl/GlobalAwardServiceImpl.java b/src/main/java/com/ai/da/service/impl/GlobalAwardServiceImpl.java index d29d4d9d..307b84e1 100644 --- a/src/main/java/com/ai/da/service/impl/GlobalAwardServiceImpl.java +++ b/src/main/java/com/ai/da/service/impl/GlobalAwardServiceImpl.java @@ -158,14 +158,8 @@ public class GlobalAwardServiceImpl implements GlobalAwardService { LocalDateTime now = LocalDateTime.now(); if (existing == null) { - // 生成唯一的参赛选手编号(从10000开始),使用数据库行锁保证并发安全与原子性 - QueryWrapper numQw = new QueryWrapper<>(); - numQw.isNotNull("contestant_number").orderByDesc("contestant_number").last("FOR UPDATE"); - Contestant maxRow = contestantMapper.selectOne(numQw); - Integer nextContestantNumber = (maxRow == null || maxRow.getContestantNumber() == null) ? 10000 : maxRow.getContestantNumber() + 1; - + // 由数据库自增分配 contestant_number(请确保数据库列为 AUTO_INCREMENT) Contestant toInsert = Contestant.builder() - .contestantNumber(nextContestantNumber) .email(request.getEmail()) .firstName(request.getFirstName()) .lastName(request.getLastName()) @@ -182,8 +176,11 @@ public class GlobalAwardServiceImpl implements GlobalAwardService { .updatedAt(now) .build(); contestantMapper.insert(toInsert); + // 重新查询以获取数据库分配的 contestant_number + Contestant saved = contestantMapper.selectById(toInsert.getId()); + Integer assignedNumber = (saved == null) ? null : saved.getContestantNumber(); resp.put("success", true); - resp.put("contestant_number", nextContestantNumber); + resp.put("contestant_number", assignedNumber); sendSiteMsg(toInsert.getId(), toInsert.getEmail()); return resp; } else {