主播 代理 管理员 BD BDLEADER 身份变更荣誉徽章处理

This commit is contained in:
tianfeng 2025-11-21 18:07:47 +08:00
parent ca1eefc8be
commit 7d4ab3e68a
7 changed files with 93 additions and 57 deletions

View File

@ -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<RoomBdLeadCO> 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

View File

@ -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);
}
/**

View File

@ -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;
}

View File

@ -54,8 +54,8 @@ public class BadgeConfigServiceImpl extends BaseServiceImpl<BadgeConfigDAO, Badg
public Long getFreightBadgeId() {
return Optional.ofNullable(
query().select(BadgeConfig::getId)
.eq(BadgeConfig::getType, BadgeConfigTypeEnum.ADMINISTRATOR)
.eq(BadgeConfig::getBadgeKey, "shipping_agent")
.eq(BadgeConfig::getType, BadgeConfigTypeEnum.HONOR_ADMIN)
.eq(BadgeConfig::getBadgeKey, BadgeKeyEnum.RECHARGE_AGENCY)
.eq(BadgeConfig::getDel, Boolean.FALSE)
.last(PageConstant.LIMIT_ONE)
.getOne())
@ -78,7 +78,8 @@ public class BadgeConfigServiceImpl extends BaseServiceImpl<BadgeConfigDAO, Badg
public List<Long> 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<BadgeConfigDAO, Badg
public Long getAdminBadgeId(String key) {
return Optional.ofNullable(
query().select(BadgeConfig::getId)
.eq(BadgeConfig::getType, SysBadgeConfigTypeEnum.ADMINISTRATOR)
.eq(BadgeConfig::getType, SysBadgeConfigTypeEnum.HONOR_ADMIN)
.eq(BadgeConfig::getBadgeKey, key)
.eq(BadgeConfig::getDel, Boolean.FALSE)
.last(PageConstant.LIMIT_ONE)

View File

@ -103,21 +103,6 @@ public class BadgeBackpackClientServiceImpl implements BadgeBackpackClientServic
@Override
public void deleteBadge(Collection<Long> userIds, Collection<Long> badgeIds) {
badgeBackpackService.deleteBadge(userIds, badgeIds);
// for (Long userId : userIds) {
// UserProfile userProfile = userProfileGateway.getByUserId(userId);
// if (Objects.isNull(userProfile)) {
// continue;
// }
// List<UserUseBadgeDTO> wearBadge = userProfile.getWearBadge();
// if (CollectionUtils.isEmpty(wearBadge)) {
// continue;
// }
// //过滤需要删除的 wearBadge id
// Set<Long> 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<Long> ids) {
badgeBackpackService.removeWearByIds(ids);
}
@ -252,7 +237,7 @@ public class BadgeBackpackClientServiceImpl implements BadgeBackpackClientServic
.setExpireTime(TimestampUtils.now())
);
userProfileGateway.removeCache(userId);
userProfileGateway.removeCacheAll(userId);
}
@Override

View File

@ -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());
}
}
}

View File

@ -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<TeamProfileDTO> listByIds(Set<Long> 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<Long> bdUserIds = getBdUserIdsByTeamIds(teamIds);