荣誉徽章消息加锁
This commit is contained in:
parent
c9112adab5
commit
ca1eefc8be
@ -9,6 +9,7 @@ import com.red.circle.component.mq.service.ConsumerMessage;
|
||||
import com.red.circle.component.mq.service.MessageListener;
|
||||
import com.red.circle.mq.business.model.event.BadgeOperateEvent;
|
||||
import com.red.circle.mq.rocket.business.streams.BadgeOperateSink;
|
||||
import com.red.circle.other.app.util.DistributedLockUtil;
|
||||
import com.red.circle.other.domain.gateway.user.UserProfileGateway;
|
||||
import com.red.circle.other.domain.model.user.UserProfile;
|
||||
import com.red.circle.other.infra.database.rds.entity.badge.BadgeBackpack;
|
||||
@ -42,6 +43,7 @@ public class BadgeOperateListener implements MessageListener {
|
||||
private final BadgeBackpackService badgeBackpackService;
|
||||
private final MessageEventProcess messageEventProcess;
|
||||
private final UserProfileGateway userProfileGateway;
|
||||
private final DistributedLockUtil distributedLockUtil;
|
||||
|
||||
@Override
|
||||
public Action consume(ConsumerMessage message) {
|
||||
@ -92,23 +94,27 @@ public class BadgeOperateListener implements MessageListener {
|
||||
* 佩戴徽章.
|
||||
*/
|
||||
private void handleWearBadge(Long userId, Long badgeId) {
|
||||
// 检查用户是否已经拥有该徽章(幂等处理)
|
||||
BadgeBackpack existBadge = badgeBackpackService.query()
|
||||
.eq(BadgeBackpack::getUserId, userId)
|
||||
.eq(BadgeBackpack::getBadgeId, badgeId)
|
||||
.getOne();
|
||||
String lockKey = "badge:operate:wear:" + userId + ":" + badgeId;
|
||||
|
||||
distributedLockUtil.executeWithLock(lockKey, () -> {
|
||||
// 检查用户是否已经拥有该徽章(幂等处理)
|
||||
BadgeBackpack existBadge = badgeBackpackService.query()
|
||||
.eq(BadgeBackpack::getUserId, userId)
|
||||
.eq(BadgeBackpack::getBadgeId, badgeId)
|
||||
.getOne();
|
||||
|
||||
if (existBadge != null) {
|
||||
log.warn("用户已拥有该徽章, 跳过发放, userId: {}, badgeId: {}", userId, badgeId);
|
||||
return;
|
||||
}
|
||||
|
||||
BadgeBackpack badgeBackpack = badgeBackpackService.getByUserIdByBadgeId(userId, badgeId);
|
||||
if (Objects.isNull(badgeBackpack)) {
|
||||
badgeBackpackService.save(buildSaveUserBadgeBackpack(badgeId, userId));
|
||||
userProfileGateway.removeCacheAll(userId);
|
||||
}
|
||||
if (existBadge != null) {
|
||||
log.warn("用户已拥有该徽章, 跳过发放, userId: {}, badgeId: {}", userId, badgeId);
|
||||
return null;
|
||||
}
|
||||
|
||||
BadgeBackpack badgeBackpack = badgeBackpackService.getByUserIdByBadgeId(userId, badgeId);
|
||||
if (Objects.isNull(badgeBackpack)) {
|
||||
badgeBackpackService.save(buildSaveUserBadgeBackpack(badgeId, userId));
|
||||
userProfileGateway.removeCacheAll(userId);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user