用户佩戴勋章操作逻辑优化

This commit is contained in:
tianfeng 2026-01-26 18:30:43 +08:00
parent ecfb0bdc31
commit 7a7ec382ea

View File

@ -1,6 +1,5 @@
package com.red.circle.other.app.listener; package com.red.circle.other.app.listener;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.red.circle.component.mq.MessageEventProcess; import com.red.circle.component.mq.MessageEventProcess;
import com.red.circle.component.mq.MessageEventProcessDescribe; import com.red.circle.component.mq.MessageEventProcessDescribe;
@ -20,13 +19,13 @@ 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.util.Collections;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.red.circle.other.inner.enums.material.BadgeBackpackExpireTypeEnum; import com.red.circle.other.inner.enums.material.BadgeBackpackExpireTypeEnum;
import com.red.circle.other.inner.model.dto.user.props.UserUseBadgeDTO; import com.red.circle.other.inner.model.dto.material.UseBadgeDTO;
import com.red.circle.tool.core.collection.CollectionUtils; import com.red.circle.tool.core.collection.CollectionUtils;
import com.red.circle.tool.core.date.TimestampUtils; import com.red.circle.tool.core.date.TimestampUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@ -117,23 +116,21 @@ public class BadgeOperateListener implements MessageListener {
BadgeBackpack badgeBackpack = new BadgeBackpack(); BadgeBackpack badgeBackpack = new BadgeBackpack();
badgeBackpack.setId(existBadge.getId()); badgeBackpack.setId(existBadge.getId());
badgeBackpack.setUseProps(Boolean.TRUE); badgeBackpack.setUseProps(Boolean.TRUE);
if (days != null && days > 0) {
badgeBackpack.setExpireTime(TimestampUtils.nowPlusDays(days.intValue()));
badgeBackpack.setExpireType(BadgeBackpackExpireTypeEnum.TEMPORARY.name());
}
badgeBackpackService.updateSelectiveById(badgeBackpack); badgeBackpackService.updateSelectiveById(badgeBackpack);
return null; } else {
}
BadgeBackpack badgeBackpack = badgeBackpackService.getByUserIdByBadgeId(userId, badgeId);
if (Objects.isNull(badgeBackpack)) {
badgeBackpackService.save(buildSaveUserBadgeBackpack(badgeId, userId, days)); badgeBackpackService.save(buildSaveUserBadgeBackpack(badgeId, userId, days));
// 我的勋章
Set<Long> badgeIdSet = getUseBadgeIdSet(userId);
UserProfile userProfile = userProfileGateway.getByUserId(userId);
userRunProfileService.updateUserWearBadgesOverlay(userId,
userBadgeCommon.listUseBadge(userId, userProfile.getSysOriginChild(), badgeIdSet)
);
} }
return null;
// 刷新用户佩戴的勋章
refreshUserWearBadges(userId);
return null;
}); });
} }
@ -143,20 +140,39 @@ public class BadgeOperateListener implements MessageListener {
.eq(BadgeBackpack::getUserId, userId) .eq(BadgeBackpack::getUserId, userId)
.eq(BadgeBackpack::getUseProps, Boolean.TRUE) .eq(BadgeBackpack::getUseProps, Boolean.TRUE)
.list(); .list();
return ownBadgeList.stream().map(BadgeBackpack::getBadgeId).collect(Collectors.toSet()); if (CollectionUtils.isEmpty(ownBadgeList)) {
return Collections.emptySet();
}
return ownBadgeList.stream().map(BadgeBackpack::getBadgeId).collect(Collectors.toSet());
} }
/** /**
* 移除徽章. * 移除徽章.
*/ */
private void handleRemoveBadge(Long userId, Long badgeId) { private void handleRemoveBadge(Long userId, Long badgeId) {
badgeBackpackService.deleteBadges(userId, Sets.newHashSet(badgeId)); String lockKey = "badge:operate:remove:" + userId + ":" + badgeId;
distributedLockUtil.executeWithLock(lockKey, () -> {
badgeBackpackService.deleteBadges(userId, Sets.newHashSet(badgeId));
// 刷新用户佩戴的勋章
refreshUserWearBadges(userId);
return null;
});
}
private void refreshUserWearBadges(Long userId) {
Set<Long> badgeIdSet = getUseBadgeIdSet(userId); Set<Long> badgeIdSet = getUseBadgeIdSet(userId);
UserProfile userProfile = userProfileGateway.getByUserId(userId); UserProfile userProfile = userProfileGateway.getByUserId(userId);
userRunProfileService.updateUserWearBadgesOverlay(userId,
userBadgeCommon.listUseBadge(userId, userProfile.getSysOriginChild(), badgeIdSet) if (userProfile == null) {
log.warn("用户信息不存在, userId: {}", userId);
return;
}
List<UseBadgeDTO> useBadgeDTOList = userBadgeCommon.listUseBadge(userId, userProfile.getSysOriginChild(), badgeIdSet);
userRunProfileService.updateUserWearBadgesOverlay(
userId,
CollectionUtils.isNotEmpty(useBadgeDTOList) ? useBadgeDTOList : Collections.emptyList()
); );
} }