Revert "徽章存在存在则更新过期"

This reverts commit 807efc9fd6fd845a4bcd6894537e907b259f1e00.
This commit is contained in:
tianfeng 2025-12-18 23:44:45 +08:00
parent 586a461efa
commit be0ca33fc5

View File

@ -19,7 +19,6 @@ import com.red.circle.other.infra.database.rds.entity.badge.BadgeConfig;
import com.red.circle.other.infra.database.rds.service.badge.BadgeBackpackService; import com.red.circle.other.infra.database.rds.service.badge.BadgeBackpackService;
import com.red.circle.other.infra.database.rds.service.badge.BadgeConfigService; import com.red.circle.other.infra.database.rds.service.badge.BadgeConfigService;
import java.sql.Timestamp;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
@ -45,8 +44,8 @@ public class BadgeOperateListener implements MessageListener {
private final MessageEventProcess messageEventProcess; private final MessageEventProcess messageEventProcess;
private final UserRunProfileService userRunProfileService; private final UserRunProfileService userRunProfileService;
private final UserBadgeCommon userBadgeCommon; private final UserBadgeCommon userBadgeCommon;
private final UserProfileGateway userProfileGateway; private final UserProfileGateway userProfileGateway;
private final DistributedLockUtil distributedLockUtil; private final DistributedLockUtil distributedLockUtil;
@Override @Override
public Action consume(ConsumerMessage message) { public Action consume(ConsumerMessage message) {
@ -107,38 +106,22 @@ public class BadgeOperateListener implements MessageListener {
String lockKey = "badge:operate:wear:" + userId + ":" + badgeId; String lockKey = "badge:operate:wear:" + userId + ":" + badgeId;
distributedLockUtil.executeWithLock(lockKey, () -> { distributedLockUtil.executeWithLock(lockKey, () -> {
// 在锁内查询避免并发问题 BadgeBackpack existBadge = badgeBackpackService.query()
BadgeBackpack existBadge = badgeBackpackService.getByUserIdByBadgeId(userId, badgeId); .eq(BadgeBackpack::getUserId, userId)
.eq(BadgeBackpack::getBadgeId, badgeId)
.getOne();
if (existBadge != null) { if (existBadge != null) {
// 已存在徽章执行更新操作而不是跳过 log.warn("用户已拥有该徽章, 跳过发放, userId: {}, badgeId: {}", userId, badgeId);
Timestamp newExpireTime = calculateExpireTime(days); return null;
String expireType = (days != null && days > 0) }
? BadgeBackpackExpireTypeEnum.TEMPORARY.name()
: BadgeBackpackExpireTypeEnum.PERMANENT.name(); BadgeBackpack badgeBackpack = badgeBackpackService.getByUserIdByBadgeId(userId, badgeId);
if (Objects.isNull(badgeBackpack)) {
// 更新确保useProps=true 且更新过期时间
boolean updateCount = badgeBackpackService.update()
.set(BadgeBackpack::getUseProps, Boolean.TRUE)
.set(BadgeBackpack::getExpireTime, newExpireTime)
.set(BadgeBackpack::getExpireType, expireType)
.eq(BadgeBackpack::getId, existBadge.getId())
.execute();
if (updateCount) {
log.info("更新已存在的徽章, userId: {}, badgeId: {}, days: {}", userId, badgeId, days);
userProfileGateway.removeCacheAll(userId);
} else {
log.warn("更新徽章失败, userId: {}, badgeId: {}", userId, badgeId);
}
} else {
// 不存在则插入
badgeBackpackService.save(buildSaveUserBadgeBackpack(badgeId, userId, days)); badgeBackpackService.save(buildSaveUserBadgeBackpack(badgeId, userId, days));
log.info("新增徽章, userId: {}, badgeId: {}, days: {}", userId, badgeId, days);
userProfileGateway.removeCacheAll(userId); userProfileGateway.removeCacheAll(userId);
} }
return null;
return null;
}); });
} }
@ -161,18 +144,8 @@ public class BadgeOperateListener implements MessageListener {
Set<Long> saveWear = wearBadge.stream().map(UserUseBadgeDTO::getId) Set<Long> saveWear = wearBadge.stream().map(UserUseBadgeDTO::getId)
.filter(id -> !badgeId.equals(id)).collect(Collectors.toSet()); .filter(id -> !badgeId.equals(id)).collect(Collectors.toSet());
userRunProfileService.updateUserWearBadgesOverlay(userId, userRunProfileService.updateUserWearBadgesOverlay(userId,
userBadgeCommon.listUseBadge(userId, userProfile.getSysOriginChild(), saveWear)); userBadgeCommon.listUseBadge(userId, userProfile.getSysOriginChild(), saveWear)
} );
/**
* 计算过期时间.
*/
private Timestamp calculateExpireTime(Long days) {
if (days != null && days > 0) {
return TimestampUtils.nowPlusDays(days.intValue());
} else {
return TimestampUtils.now();
}
} }
private BadgeBackpack buildSaveUserBadgeBackpack(Long badgeId, Long userId, Long days) { private BadgeBackpack buildSaveUserBadgeBackpack(Long badgeId, Long userId, Long days) {