fix:参赛选手加入编号

This commit is contained in:
litianxiang
2026-02-04 14:03:30 +08:00
parent b826f0bf39
commit d63b4b4e63

View File

@@ -158,14 +158,8 @@ public class GlobalAwardServiceImpl implements GlobalAwardService {
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
if (existing == null) { if (existing == null) {
// 生成唯一的参赛选手编号从10000开始使用数据库行锁保证并发安全与原子性 // 由数据库自增分配 contestant_number请确保数据库列为 AUTO_INCREMENT
QueryWrapper<Contestant> 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 toInsert = Contestant.builder() Contestant toInsert = Contestant.builder()
.contestantNumber(nextContestantNumber)
.email(request.getEmail()) .email(request.getEmail())
.firstName(request.getFirstName()) .firstName(request.getFirstName())
.lastName(request.getLastName()) .lastName(request.getLastName())
@@ -182,8 +176,11 @@ public class GlobalAwardServiceImpl implements GlobalAwardService {
.updatedAt(now) .updatedAt(now)
.build(); .build();
contestantMapper.insert(toInsert); contestantMapper.insert(toInsert);
// 重新查询以获取数据库分配的 contestant_number
Contestant saved = contestantMapper.selectById(toInsert.getId());
Integer assignedNumber = (saved == null) ? null : saved.getContestantNumber();
resp.put("success", true); resp.put("success", true);
resp.put("contestant_number", nextContestantNumber); resp.put("contestant_number", assignedNumber);
sendSiteMsg(toInsert.getId(), toInsert.getEmail()); sendSiteMsg(toInsert.getId(), toInsert.getEmail());
return resp; return resp;
} else { } else {