fix:参赛选手加入编号
This commit is contained in:
@@ -158,14 +158,8 @@ public class GlobalAwardServiceImpl implements GlobalAwardService {
|
||||
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
if (existing == null) {
|
||||
// 生成唯一的参赛选手编号(从10000开始),使用数据库行锁保证并发安全与原子性
|
||||
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_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 {
|
||||
|
||||
Reference in New Issue
Block a user