From 7d4ab3e68a836a5ddca0842966b9452f29805a64 Mon Sep 17 00:00:00 2001 From: tianfeng <769204422@qq.com> Date: Fri, 21 Nov 2025 18:07:47 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BB=E6=92=AD=20=E4=BB=A3=E7=90=86=20?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=91=98=20BD=20BDLEADER=20=E8=BA=AB?= =?UTF-8?q?=E4=BB=BD=E5=8F=98=E6=9B=B4=E8=8D=A3=E8=AA=89=E5=BE=BD=E7=AB=A0?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/team/bd/TeamLeaderBDServiceImpl.java | 10 +++ .../user/UserFreightBalanceServiceImpl.java | 19 ++---- .../common/team/decay/TeamMemberAddDecay.java | 6 ++ .../badge/impl/BadgeConfigServiceImpl.java | 9 +-- .../impl/BadgeBackpackClientServiceImpl.java | 19 +----- .../impl/AdministratorClientServiceImpl.java | 67 +++++++++++++------ .../impl/TeamProfileClientServiceImpl.java | 20 ++++++ 7 files changed, 93 insertions(+), 57 deletions(-) diff --git a/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/team/bd/TeamLeaderBDServiceImpl.java b/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/team/bd/TeamLeaderBDServiceImpl.java index 9d3026ad..14ea8e71 100644 --- a/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/team/bd/TeamLeaderBDServiceImpl.java +++ b/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/team/bd/TeamLeaderBDServiceImpl.java @@ -10,12 +10,15 @@ import com.red.circle.console.inner.error.ConsoleErrorCode; import com.red.circle.framework.core.asserts.ResponseAssert; import com.red.circle.framework.core.response.CommonErrorCode; import com.red.circle.framework.dto.PageResult; +import com.red.circle.mq.business.model.event.BadgeOperateEvent; +import com.red.circle.mq.rocket.business.producer.UserMqMessageService; import com.red.circle.other.inner.asserts.team.TeamErrorCode; import com.red.circle.other.inner.endpoint.team.bd.BdTeamInfoClient; import com.red.circle.other.inner.endpoint.team.bd.BdTeamLeaderClient; import com.red.circle.other.inner.endpoint.team.logs.TeamImportanceLogClient; import com.red.circle.other.inner.endpoint.team.logs.TeamProcessApprovalClient; import com.red.circle.other.inner.endpoint.team.target.UserHistoryIdentityClient; +import com.red.circle.other.inner.enums.material.BadgeKeyEnum; import com.red.circle.other.inner.model.cmd.team.BdTeamInfoCmd; import com.red.circle.other.inner.model.cmd.team.bd.BdTeamLeaderAddCmd; import com.red.circle.other.inner.model.cmd.team.bd.BdTeamLeaderOpsPageQryCmd; @@ -56,6 +59,7 @@ public class TeamLeaderBDServiceImpl implements TeamLeaderBDService { private final TeamImportanceLogClient teamImportanceLogClient; private final TeamProcessApprovalClient teamProcessApprovalClient; private final UserHistoryIdentityClient userHistoryIdentityClient; + private final UserMqMessageService userMqMessageService; @Override public PageResult pageOps(BdTeamLeaderOpsPageQryCmd qryCmd) { @@ -166,6 +170,9 @@ public class TeamLeaderBDServiceImpl implements TeamLeaderBDService { .setCreateUser(cmd.getUpdateUser()) .setBdLeadUserId(cmd.getUserId()) ); + + userMqMessageService.sendBadgeOperateEvent(cmd.getUserId(), BadgeKeyEnum.BD.name(), BadgeOperateEvent.OperationType.WEAR.name()); + userMqMessageService.sendBadgeOperateEvent(cmd.getUserId(), BadgeKeyEnum.BD_LEADER.name(), BadgeOperateEvent.OperationType.WEAR.name()); } @Override @@ -206,6 +213,9 @@ public class TeamLeaderBDServiceImpl implements TeamLeaderBDService { .setCreateUser(updateUser) .setCreateUserOrigin(1) ); + + userMqMessageService.sendBadgeOperateEvent(roomBdLead.getUserId(), BadgeKeyEnum.BD_LEADER.name(), BadgeOperateEvent.OperationType.REMOVE.name()); + } @Override diff --git a/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/user/UserFreightBalanceServiceImpl.java b/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/user/UserFreightBalanceServiceImpl.java index 395d0329..4947d71d 100644 --- a/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/user/UserFreightBalanceServiceImpl.java +++ b/rc-service/rc-service-console/console-application/src/main/java/com/red/circle/console/app/service/app/user/UserFreightBalanceServiceImpl.java @@ -154,7 +154,7 @@ public class UserFreightBalanceServiceImpl implements BigDecimal amount = userFreightRechargeRecordClient.inrNowMonthAmount(cmd.getUserId(), ArithmeticUtils.lteZero(cmd.getAmount()) ? BigDecimal.ZERO : cmd.getAmount()) .getBody(); - sendFreightShipBadge(cmd.getUserId(), amount); +// sendFreightShipBadge(cmd.getUserId(), amount); } } finally { redisService.unlock(lockKey); @@ -214,9 +214,7 @@ public class UserFreightBalanceServiceImpl implements return; } - sendFreightShipBadge(balance.getUserId(), - userFreightRechargeRecordClient.countAmount(balance.getUserId()) - .getBody()); + sendFreightShipBadge(balance.getUserId()); } private Long getFreightBadgeId() { @@ -506,23 +504,14 @@ public class UserFreightBalanceServiceImpl implements * 余额如果大于1250则发送货运代理徽章. * * @param userId 代理用户id. - * @param balance 代理余额. */ - public void sendFreightShipBadge(Long userId, BigDecimal balance) { - - if (Objects.isNull(balance)) { - return; - } - + public void sendFreightShipBadge(Long userId) { Long freightBadgeId = getFreightBadgeId(); if (Objects.isNull(freightBadgeId)) { return; } - if (balance.compareTo(BigDecimal.valueOf(500)) < 0) { - return; - } - badgeBackpackClient.giveBadgePermanent(freightBadgeId, userId); + badgeBackpackClient.giveBadgePermanent(freightBadgeId, userId); } /** diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/common/team/decay/TeamMemberAddDecay.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/common/team/decay/TeamMemberAddDecay.java index a2d79cbc..4a990e71 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/common/team/decay/TeamMemberAddDecay.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/common/team/decay/TeamMemberAddDecay.java @@ -2,6 +2,8 @@ package com.red.circle.other.infra.common.team.decay; import com.red.circle.framework.core.asserts.ResponseAssert; import com.red.circle.framework.core.response.CommonErrorCode; +import com.red.circle.mq.business.model.event.BadgeOperateEvent; +import com.red.circle.mq.rocket.business.producer.UserMqMessageService; import com.red.circle.other.domain.gateway.user.UserProfileGateway; import com.red.circle.other.domain.gateway.user.ability.RegisterDeviceGateway; import com.red.circle.other.domain.model.user.UserProfile; @@ -14,6 +16,7 @@ import com.red.circle.other.infra.database.mongo.service.team.team.TeamProfileSe import com.red.circle.other.infra.database.rds.service.team.UserHistoryIdentityService; import com.red.circle.other.inner.asserts.user.UserErrorCode; import com.red.circle.other.inner.asserts.team.TeamErrorCode; +import com.red.circle.other.inner.enums.material.BadgeKeyEnum; import com.red.circle.other.inner.model.cmd.team.TeamMemberAddCmd; import com.red.circle.other.inner.enums.team.TeamAppProcessApprovalReason; import com.red.circle.other.inner.enums.team.TeamApplicationType; @@ -40,6 +43,7 @@ public class TeamMemberAddDecay { private final UserHistoryIdentityService historyIdentityService; private final TeamApplicationProcessApprovalService applicationProcessApprovalService; private final RegisterDeviceGateway registerDeviceGateway; + private final UserMqMessageService userMqMessageService; /** * 添加成员. @@ -89,6 +93,8 @@ public class TeamMemberAddDecay { ); historyIdentityService.saveHost(param.getMemberUserId()); + + userMqMessageService.sendBadgeOperateEvent(param.getMemberUserId(), BadgeKeyEnum.HOST.name(), BadgeOperateEvent.OperationType.WEAR.name()); return teamProfile; } diff --git a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/badge/impl/BadgeConfigServiceImpl.java b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/badge/impl/BadgeConfigServiceImpl.java index 2df07069..32cfd3c6 100644 --- a/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/badge/impl/BadgeConfigServiceImpl.java +++ b/rc-service/rc-service-other/other-infrastructure/src/main/java/com/red/circle/other/infra/database/rds/service/badge/impl/BadgeConfigServiceImpl.java @@ -54,8 +54,8 @@ public class BadgeConfigServiceImpl extends BaseServiceImpl listAdminBadgeIds() { return Optional.ofNullable( query().select(BadgeConfig::getId) - .eq(BadgeConfig::getType, SysBadgeConfigTypeEnum.ADMINISTRATOR) + .eq(BadgeConfig::getType, SysBadgeConfigTypeEnum.HONOR_ADMIN) + .likeLeft(BadgeConfig::getBadgeKey, BadgeKeyEnum.ADMIN) .eq(BadgeConfig::getDel, Boolean.FALSE) .list()) .map(sysBadgeConfigs -> sysBadgeConfigs.stream().map(BadgeConfig::getId).collect( @@ -173,7 +174,7 @@ public class BadgeConfigServiceImpl extends BaseServiceImpl userIds, Collection badgeIds) { badgeBackpackService.deleteBadge(userIds, badgeIds); -// for (Long userId : userIds) { -// UserProfile userProfile = userProfileGateway.getByUserId(userId); -// if (Objects.isNull(userProfile)) { -// continue; -// } -// List wearBadge = userProfile.getWearBadge(); -// if (CollectionUtils.isEmpty(wearBadge)) { -// continue; -// } -// //过滤需要删除的 wearBadge id -// Set saveWear = wearBadge.stream().map(UserUseBadgeDTO::getId) -// .filter(id -> !badgeIds.contains(id)).collect(Collectors.toSet()); -// userProfileGateway.updateUserWearBadge(userId, userProfile.getOriginSys(), -// saveWear); -// } } @Override @@ -163,7 +148,7 @@ public class BadgeBackpackClientServiceImpl implements BadgeBackpackClientServic userProfileGateway.updateUserWearBadge(userId, userProfile.getOriginSys(),saveWear); } - @Override + @Override public void removeWearByIds(Set ids) { badgeBackpackService.removeWearByIds(ids); } @@ -252,7 +237,7 @@ public class BadgeBackpackClientServiceImpl implements BadgeBackpackClientServic .setExpireTime(TimestampUtils.now()) ); - userProfileGateway.removeCache(userId); + userProfileGateway.removeCacheAll(userId); } @Override diff --git a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/sys/impl/AdministratorClientServiceImpl.java b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/sys/impl/AdministratorClientServiceImpl.java index 0db7de30..39f6d281 100644 --- a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/sys/impl/AdministratorClientServiceImpl.java +++ b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/sys/impl/AdministratorClientServiceImpl.java @@ -3,6 +3,8 @@ package com.red.circle.other.app.inner.service.sys.impl; import com.red.circle.framework.core.asserts.ResponseAssert; import com.red.circle.framework.core.response.CommonErrorCode; import com.red.circle.framework.dto.PageResult; +import com.red.circle.mq.business.model.event.BadgeOperateEvent; +import com.red.circle.mq.rocket.business.producer.UserMqMessageService; import com.red.circle.other.app.inner.convertor.sys.AdministratorInnerConvertor; import com.red.circle.other.app.inner.service.material.props.BadgeBackpackClientService; import com.red.circle.other.app.inner.service.sys.AdministratorClientService; @@ -13,6 +15,8 @@ import com.red.circle.other.infra.database.rds.entity.sys.AdministratorAuth; import com.red.circle.other.infra.database.rds.service.sys.AdministratorAuthResourceService; import com.red.circle.other.infra.database.rds.service.sys.AdministratorAuthService; import com.red.circle.other.infra.database.rds.service.sys.AdministratorService; +import com.red.circle.other.inner.enums.material.BadgeKeyEnum; +import com.red.circle.other.inner.enums.sys.appmanager.RoomRolesEnum; import com.red.circle.other.inner.model.cmd.sys.AddSysAdministratorCmd; import com.red.circle.other.inner.model.cmd.sys.AppUserDetailsQryCmd; import com.red.circle.other.inner.model.cmd.sys.SysAdministratorAuthCmd; @@ -22,10 +26,8 @@ import com.red.circle.other.inner.model.dto.sys.AdministratorDTO; import com.red.circle.other.inner.model.dto.sys.SysAdministratorAuthResourceDTO; import com.red.circle.other.inner.model.dto.sys.SysAdministratorInfoDTO; import com.red.circle.tool.core.text.StringUtils; -import java.util.Collections; -import java.util.List; -import java.util.Objects; -import java.util.Set; + +import java.util.*; import java.util.stream.Collectors; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -46,6 +48,7 @@ public class AdministratorClientServiceImpl implements AdministratorClientServic private final BadgeBackpackClientService badgeBackpackClientService; private final AdministratorInnerConvertor administratorInnerConvertor; private final AdministratorAuthResourceService administratorAuthResourceService; + private final UserMqMessageService userMqMessageService; @Override public AdministratorDTO getByUserId(Long userId) { @@ -122,20 +125,11 @@ public class AdministratorClientServiceImpl implements AdministratorClientServic } administratorService.removeById(id); - deleteUserAdminBadge(sysAdministrator.getUserId()); + userMqMessageService.sendBadgeOperateEvent(sysAdministrator.getUserId(), BadgeKeyEnum.SUPER_ADMIN.name(), BadgeOperateEvent.OperationType.REMOVE.name()); + userMqMessageService.sendBadgeOperateEvent(sysAdministrator.getUserId(), BadgeKeyEnum.ADMIN.name(), BadgeOperateEvent.OperationType.REMOVE.name()); userProfileGateway.removeCache(sysAdministrator.getUserId()); } - private void deleteUserAdminBadge(Long userId) { - if (Objects.isNull(userId)) { - return; - } - badgeBackpackClientService.deleteBadge( - Collections.singleton(userId), - badgeConfigClientService.listAdminBadgeIds() - ); - } - @Override public void changeStatusAdministrator(SysAdministratorChangeStatusCmd param) { Administrator administrator = administratorService.getById(param.getId()); @@ -154,7 +148,17 @@ public class AdministratorClientServiceImpl implements AdministratorClientServic } if (param.isDisable()) { - deleteUserAdminBadge(administrator.getUserId()); + if (Arrays.asList(RoomRolesEnum.SUPER_ADMIN.name(), + RoomRolesEnum.MANAGER.name()).contains(administrator.getRoles())) { + userMqMessageService.sendBadgeOperateEvent(administrator.getUserId(), BadgeKeyEnum.SUPER_ADMIN.name(), BadgeOperateEvent.OperationType.REMOVE.name()); + } + userMqMessageService.sendBadgeOperateEvent(administrator.getUserId(), BadgeKeyEnum.ADMIN.name(), BadgeOperateEvent.OperationType.REMOVE.name()); + }else { + if (Arrays.asList(RoomRolesEnum.SUPER_ADMIN.name(), + RoomRolesEnum.MANAGER.name()).contains(administrator.getRoles())) { + userMqMessageService.sendBadgeOperateEvent(administrator.getUserId(), BadgeKeyEnum.SUPER_ADMIN.name(), BadgeOperateEvent.OperationType.WEAR.name()); + } + userMqMessageService.sendBadgeOperateEvent(administrator.getUserId(), BadgeKeyEnum.ADMIN.name(), BadgeOperateEvent.OperationType.WEAR.name()); } userProfileGateway.removeCache(administrator.getUserId()); @@ -164,11 +168,6 @@ public class AdministratorClientServiceImpl implements AdministratorClientServic public void changeRoles(Long id, String roles) { Administrator administrator = administratorService.getById(id); ResponseAssert.notNull(CommonErrorCode.NOT_FOUND_RECORD_INFO, administrator); -// Long badgeId = badgeConfigClientService.getAdminBadgeId(roles); -// ResponseAssert.notNull(CommonErrorCode.NOT_FOUND_RECORD_INFO, badgeId); - - deleteUserAdminBadge(administrator.getUserId()); - userProfileGateway.removeCache(administrator.getUserId()); administratorService.update() @@ -176,5 +175,31 @@ public class AdministratorClientServiceImpl implements AdministratorClientServic .eq(Administrator::getId, id) .execute(); + // 处理勋章 + if (StringUtils.isBlank(roles) || !Boolean.TRUE.equals(administrator.getStatus())) { + return; + } + + Long userId = administrator.getUserId(); + + if (RoomRolesEnum.ADMIN.name().equals(roles)) { + // 发送ADMIN勋章 + userMqMessageService.sendBadgeOperateEvent(userId, BadgeKeyEnum.ADMIN.name(), + BadgeOperateEvent.OperationType.WEAR.name()); + // 清除SUPER_ADMIN勋章 + userMqMessageService.sendBadgeOperateEvent(userId, BadgeKeyEnum.SUPER_ADMIN.name(), + BadgeOperateEvent.OperationType.REMOVE.name()); + } else if (RoomRolesEnum.SUPER_ADMIN.name().equals(roles)) { + userMqMessageService.sendBadgeOperateEvent(userId, BadgeKeyEnum.SUPER_ADMIN.name(), + BadgeOperateEvent.OperationType.WEAR.name()); + userMqMessageService.sendBadgeOperateEvent(userId, BadgeKeyEnum.ADMIN.name(), + BadgeOperateEvent.OperationType.WEAR.name()); + } else if (RoomRolesEnum.MANAGER.name().equals(roles)) { + userMqMessageService.sendBadgeOperateEvent(userId, BadgeKeyEnum.SUPER_ADMIN.name(), + BadgeOperateEvent.OperationType.WEAR.name()); + userMqMessageService.sendBadgeOperateEvent(userId, BadgeKeyEnum.ADMIN.name(), + BadgeOperateEvent.OperationType.WEAR.name()); + } + } } diff --git a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/team/impl/TeamProfileClientServiceImpl.java b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/team/impl/TeamProfileClientServiceImpl.java index 1790e7f4..dd591b2d 100644 --- a/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/team/impl/TeamProfileClientServiceImpl.java +++ b/rc-service/rc-service-other/other-inner-endpoint/src/main/java/com/red/circle/other/app/inner/service/team/impl/TeamProfileClientServiceImpl.java @@ -11,7 +11,9 @@ import com.red.circle.component.redis.service.RedisService; import com.red.circle.framework.core.asserts.ResponseAssert; import com.red.circle.framework.core.response.CommonErrorCode; import com.red.circle.framework.dto.PageResult; +import com.red.circle.mq.business.model.event.BadgeOperateEvent; import com.red.circle.mq.business.model.event.team.TeamSalaryCountEvent; +import com.red.circle.mq.rocket.business.producer.UserMqMessageService; import com.red.circle.mq.rocket.business.streams.TeamSalaryCountSink; import com.red.circle.other.app.inner.service.team.TeamProfileClientService; import com.red.circle.other.domain.gateway.user.UserProfileGateway; @@ -40,6 +42,7 @@ import com.red.circle.other.infra.database.rds.entity.team.BusinessDevelopmentTe import com.red.circle.other.infra.database.rds.service.team.*; import com.red.circle.other.inner.asserts.team.TeamErrorCode; import com.red.circle.other.inner.asserts.user.UserErrorCode; +import com.red.circle.other.inner.enums.material.BadgeKeyEnum; import com.red.circle.other.inner.enums.team.TeamAppProcessApprovalReason; import com.red.circle.other.inner.enums.team.TeamApplicationType; import com.red.circle.other.inner.enums.team.TeamMemberRole; @@ -119,6 +122,7 @@ public class TeamProfileClientServiceImpl implements TeamProfileClientService { private final BillDiamondBalanceService billDiamondBalanceService; private final BillDiamondBalanceDetailsService billDiamondBalanceDetailsService; private final RegisterDeviceGateway registerDeviceGateway; + private final UserMqMessageService userMqMessageService; @Override public List listByIds(Set ids) { @@ -324,6 +328,11 @@ public class TeamProfileClientServiceImpl implements TeamProfileClientService { // 标记身份 userHistoryIdentityService.saveAgentAndHost(userProfile.getId()); + + // 佩戴主播和代理徽章 + userMqMessageService.sendBadgeOperateEvent(userProfile.getId(), BadgeKeyEnum.AGENCY.name(), BadgeOperateEvent.OperationType.WEAR.name()); + userMqMessageService.sendBadgeOperateEvent(userProfile.getId(), BadgeKeyEnum.HOST.name(), BadgeOperateEvent.OperationType.WEAR.name()); + redisService.unlock(key); } @@ -434,6 +443,17 @@ public class TeamProfileClientServiceImpl implements TeamProfileClientService { activityAgentAnchorCountService.initZeroTeam(teamId); activityAgentAnchorCountService .initZeroMember(teamMemberService.getMemberIdsByTeamId(teamId)); + + teamMemberService.listByTeamId(teamId).forEach(teamMember -> { + // 移除主播和代理徽章 + if (teamMember.getRole() == TeamMemberRole.OWN) { + userMqMessageService.sendBadgeOperateEvent(teamMember.getMemberId(), BadgeKeyEnum.AGENCY.name(), + BadgeOperateEvent.OperationType.REMOVE.name()); + } + userMqMessageService.sendBadgeOperateEvent(teamMember.getMemberId(), BadgeKeyEnum.HOST.name(), + BadgeOperateEvent.OperationType.REMOVE.name()); + }); + }); Set bdUserIds = getBdUserIdsByTeamIds(teamIds);