fix:参赛选手加入编号
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user