重复插入问题修复

This commit is contained in:
张松
2025-03-01 15:16:37 +08:00
parent 23247138e1
commit f092995e02
2 changed files with 20 additions and 13 deletions

View File

@@ -176,7 +176,7 @@ public class ApiAccessLimitUtil {
boolean lock = Boolean.TRUE.equals(redisUtils.setIfAbsent(lockKey, clientId, seconds)); boolean lock = Boolean.TRUE.equals(redisUtils.setIfAbsent(lockKey, clientId, seconds));
int count = 0; int count = 0;
while (!lock) { while (!lock) {
if (count++ > 100) { if (count++ > 1000) {
throw new RuntimeException("系统繁忙, 稍后再试"); throw new RuntimeException("系统繁忙, 稍后再试");
} }
Thread.sleep(20); Thread.sleep(20);

View File

@@ -9,7 +9,9 @@ import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.sqx.common.utils.ApiAccessLimitUtil;
import com.sqx.common.utils.DateUtils; import com.sqx.common.utils.DateUtils;
import com.sqx.common.utils.RedisKeys;
import com.sqx.modules.app.entity.*; import com.sqx.modules.app.entity.*;
import com.sqx.modules.app.service.*; import com.sqx.modules.app.service.*;
import com.sqx.modules.common.service.CommonInfoService; import com.sqx.modules.common.service.CommonInfoService;
@@ -173,18 +175,23 @@ public class TempOrdersTask {
} }
// UserEntity byUser = userService.queryByInvitationCode(user.getInviterCode()); // UserEntity byUser = userService.queryByInvitationCode(user.getInviterCode());
if (byUser != null) { if (byUser != null) {
InviteAchievement inviteAchievement = inviteAchievementService.getByUserId(user.getUserId()); ApiAccessLimitUtil.runFunAndCheckKey(() -> {
if (inviteAchievement == null) { InviteAchievement inviteAchievement = inviteAchievementService.getByUserId(user.getUserId());
inviteAchievement = new InviteAchievement(); if (inviteAchievement == null) {
inviteAchievement.setState(0);
inviteAchievement.setCount(1); inviteAchievement = new InviteAchievement();
inviteAchievement.setCreateTime(DateUtil.date()); inviteAchievement.setState(0);
inviteAchievement.setTargetUserId(user.getUserId()); inviteAchievement.setCount(1);
inviteAchievement.setUserId(byUser.getUserId()); inviteAchievement.setCreateTime(DateUtil.date());
inviteAchievementService.save(inviteAchievement); inviteAchievement.setTargetUserId(user.getUserId());
} else { inviteAchievement.setUserId(byUser.getUserId());
inviteAchievementService.incrCount(inviteAchievement.getId(), inviteAchievement.getUserId(), 1); inviteAchievementService.save(inviteAchievement);
} } else {
inviteAchievementService.incrCount(inviteAchievement.getId(), inviteAchievement.getUserId(), 1);
}
return null;
}, RedisKeys.getLockKey("insert_invite_achievement_lock", user.getUserId()), 30);
} }
if (byUser != null && !byUser.getUserId().equals(1L)) { if (byUser != null && !byUser.getUserId().equals(1L)) {
if (user.getUserId().equals(14244L)) { if (user.getUserId().equals(14244L)) {