From d63b4b4e63aeb9b6f5c4692de3b39e2e1df11b2a Mon Sep 17 00:00:00 2001 From: litianxiang Date: Wed, 4 Feb 2026 14:03:30 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E5=8F=82=E8=B5=9B=E9=80=89=E6=89=8B?= =?UTF-8?q?=E5=8A=A0=E5=85=A5=E7=BC=96=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ai/da/service/impl/GlobalAwardServiceImpl.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) 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 {