From 0ae11c76e628675ea7cd3aee532d10fd3bb1f8c9 Mon Sep 17 00:00:00 2001 From: tianfeng <769204422@qq.com> Date: Wed, 4 Feb 2026 21:43:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=87=E6=8D=A2=E5=BE=BD=E7=AB=A0=E9=80=BB?= =?UTF-8?q?=E8=BE=91=E9=87=8D=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../command/user/UserToggleBadgeCmdExe.java | 60 ++++++++++--------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/user/UserToggleBadgeCmdExe.java b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/user/UserToggleBadgeCmdExe.java index 99d4b904..0f64d9a9 100644 --- a/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/user/UserToggleBadgeCmdExe.java +++ b/rc-service/rc-service-other/other-application/src/main/java/com/red/circle/other/app/command/user/UserToggleBadgeCmdExe.java @@ -7,6 +7,8 @@ import com.red.circle.framework.core.asserts.ResponseAssert; import com.red.circle.framework.core.response.CommonErrorCode; import com.red.circle.other.app.dto.cmd.user.material.UserToggleBadgeCmd; import com.red.circle.other.domain.gateway.user.UserProfileGateway; +import com.red.circle.other.infra.common.props.UserBadgeCommon; +import com.red.circle.other.infra.database.mongo.service.user.profile.UserRunProfileService; import com.red.circle.other.infra.database.rds.entity.badge.BadgeBackpack; import com.red.circle.other.infra.database.rds.entity.badge.BadgeConfig; import com.red.circle.other.infra.database.rds.service.badge.BadgeBackpackService; @@ -32,45 +34,47 @@ public class UserToggleBadgeCmdExe { private final BadgeBackpackService badgeBackpackService; private final UserProfileGateway userProfileGateway; private final BadgeConfigService badgeConfigService; + private final UserRunProfileService userRunProfileService; + private final UserBadgeCommon userBadgeCommon; public void execute(UserToggleBadgeCmd cmd) { Long userId = cmd.getReqUserId(); Long badgeId = cmd.getBadgeId(); String sysOrigin = cmd.getReqSysOrigin().getOrigin(); - List badgeConfigs = badgeConfigService.listByIds(Collections.singletonList(badgeId)); - ResponseAssert.isFalse(CommonErrorCode.OPERATING_FAILURE, - badgeConfigs.isEmpty()); + // 验证徽章配置存在 + List badgeConfigs = badgeConfigService.listByIds(Collections.singletonList(badgeId)); + ResponseAssert.isFalse(CommonErrorCode.OPERATING_FAILURE, badgeConfigs.isEmpty()); - // 查询当前已佩戴的徽章 - List currentWearBadges = badgeBackpackService.listNotExpireTimeByUserIds(new HashSet<>(Collections.singletonList(userId))); + // 查询当前背包中的徽章 + List backpackList = badgeBackpackService.listNotExpireTimeByUserIds( + new HashSet<>(Collections.singletonList(userId)) + ); + ResponseAssert.isFalse(CommonErrorCode.OPERATING_FAILURE, CollectionUtils.isEmpty(backpackList)); - // 检查目标徽章是否已佩戴 - boolean isWearing = currentWearBadges.stream() - .anyMatch(badge -> badge.getBadgeId().equals(badgeId) && Boolean.TRUE.equals(badge.getUseProps())); + // 检查目标徽章是否在背包中 + Optional targetBadgeOpt = backpackList.stream() + .filter(badge -> badge.getBadgeId().equals(badgeId)) + .findFirst(); + ResponseAssert.isTrue(CommonErrorCode.NOT_FOUND_MAPPING_INFO, targetBadgeOpt.isPresent()); - List newBadgeIds; - if (isWearing) { - // 已佩戴 → 卸下该徽章 - newBadgeIds = currentWearBadges.stream() - .map(BadgeBackpack::getBadgeId) - .filter(id -> !id.equals(badgeId)) - .collect(Collectors.toList()); - } else { - // 未佩戴 → 佩戴该徽章 - newBadgeIds = currentWearBadges.stream() - .map(BadgeBackpack::getBadgeId) - .collect(Collectors.toList()); - newBadgeIds.add(badgeId); - } + // 切换徽章佩戴状态 + BadgeBackpack targetBadge = targetBadgeOpt.get(); + boolean currentUseStatus = targetBadge.getUseProps(); + badgeBackpackService.updateSelectiveById( + new BadgeBackpack() + .setId(targetBadge.getId()) + .setUseProps(!currentUseStatus) + ); - // 更新徽章佩戴状态 - if (CollectionUtils.isEmpty(newBadgeIds)) { - userProfileGateway.removeUserAllWearBadge(userId, sysOrigin); - } else { - userProfileGateway.updateUserWearBadge(userId, sysOrigin, newBadgeIds); - } + // 更新用户佩戴徽章覆盖层 + Set backpackBadgeSet = backpackList.stream() + .map(BadgeBackpack::getBadgeId) + .collect(Collectors.toSet()); + userRunProfileService.updateUserWearBadgesOverlay(userId, + userBadgeCommon.listUseBadge(userId, sysOrigin, backpackBadgeSet) + ); } }