From 7a7ec382ea014d19426c3b92102c3905be2c7661 Mon Sep 17 00:00:00 2001 From: tianfeng <769204422@qq.com> Date: Mon, 26 Jan 2026 18:30:43 +0800 Subject: [PATCH] =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=BD=A9=E6=88=B4=E5=8B=8B?= =?UTF-8?q?=E7=AB=A0=E6=93=8D=E4=BD=9C=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/listener/BadgeOperateListener.java | 60 ++++++++++++------- 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/BadgeOperateListener.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/BadgeOperateListener.java index 078b3d04..8bbe5fd3 100644 --- a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/BadgeOperateListener.java +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/listener/BadgeOperateListener.java @@ -1,6 +1,5 @@ package com.red.circle.other.app.listener; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.google.common.collect.Sets; import com.red.circle.component.mq.MessageEventProcess; 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.BadgeConfigService; +import java.util.Collections; import java.util.List; -import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; 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.date.TimestampUtils; import lombok.RequiredArgsConstructor; @@ -117,23 +116,21 @@ public class BadgeOperateListener implements MessageListener { BadgeBackpack badgeBackpack = new BadgeBackpack(); badgeBackpack.setId(existBadge.getId()); badgeBackpack.setUseProps(Boolean.TRUE); + + if (days != null && days > 0) { + badgeBackpack.setExpireTime(TimestampUtils.nowPlusDays(days.intValue())); + badgeBackpack.setExpireType(BadgeBackpackExpireTypeEnum.TEMPORARY.name()); + } + badgeBackpackService.updateSelectiveById(badgeBackpack); - return null; - } - - BadgeBackpack badgeBackpack = badgeBackpackService.getByUserIdByBadgeId(userId, badgeId); - if (Objects.isNull(badgeBackpack)) { + } else { badgeBackpackService.save(buildSaveUserBadgeBackpack(badgeId, userId, days)); - - // 我的勋章 - Set 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::getUseProps, Boolean.TRUE) .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) { - 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 badgeIdSet = getUseBadgeIdSet(userId); - UserProfile userProfile = userProfileGateway.getByUserId(userId); - userRunProfileService.updateUserWearBadgesOverlay(userId, - userBadgeCommon.listUseBadge(userId, userProfile.getSysOriginChild(), badgeIdSet) + + if (userProfile == null) { + log.warn("用户信息不存在, userId: {}", userId); + return; + } + + List useBadgeDTOList = userBadgeCommon.listUseBadge(userId, userProfile.getSysOriginChild(), badgeIdSet); + userRunProfileService.updateUserWearBadgesOverlay( + userId, + CollectionUtils.isNotEmpty(useBadgeDTOList) ? useBadgeDTOList : Collections.emptyList() ); }