新增 发送荣誉的时候 发送徽章

This commit is contained in:
tianfeng 2026-05-28 18:33:28 +08:00
parent c10b7dc378
commit 78b17b991a
3 changed files with 151 additions and 81 deletions

View File

@ -22,6 +22,7 @@ import com.red.circle.other.infra.database.rds.service.badge.BadgeBackpackServic
import com.red.circle.other.infra.database.rds.service.badge.BadgeConfigService; import com.red.circle.other.infra.database.rds.service.badge.BadgeConfigService;
import com.red.circle.other.inner.endpoint.material.props.PropsBackpackClient; import com.red.circle.other.inner.endpoint.material.props.PropsBackpackClient;
import com.red.circle.other.inner.enums.material.BadgeBackpackExpireTypeEnum; import com.red.circle.other.inner.enums.material.BadgeBackpackExpireTypeEnum;
import com.red.circle.other.inner.enums.material.BadgeConfigTypeEnum;
import com.red.circle.other.inner.enums.material.BadgeKeyEnum; import com.red.circle.other.inner.enums.material.BadgeKeyEnum;
import com.red.circle.other.inner.enums.material.ConsolePropsTypeEnum; import com.red.circle.other.inner.enums.material.ConsolePropsTypeEnum;
import com.red.circle.other.inner.model.cmd.material.GivePropsBackpackCmd; import com.red.circle.other.inner.model.cmd.material.GivePropsBackpackCmd;
@ -56,6 +57,17 @@ public class BadgeOperateListener implements MessageListener {
.put(BadgeKeyEnum.RECHARGE_AGENCY.name(), 2054123011514957825L) .put(BadgeKeyEnum.RECHARGE_AGENCY.name(), 2054123011514957825L)
.build(); .build();
/** ADMINISTRATOR 类型的 badgeKey 集合. */
private static final Set<String> ADMINISTRATOR_BADGE_KEYS = Sets.newHashSet(
BadgeKeyEnum.BD.name(),
BadgeKeyEnum.HOST.name(),
BadgeKeyEnum.SUPER_ADMIN.name(),
BadgeKeyEnum.AGENCY.name(),
BadgeKeyEnum.ADMIN.name(),
BadgeKeyEnum.MANAGER.name(),
BadgeKeyEnum.RECHARGE_AGENCY.name()
);
private final BadgeConfigService badgeConfigService; private final BadgeConfigService badgeConfigService;
private final BadgeBackpackService badgeBackpackService; private final BadgeBackpackService badgeBackpackService;
private final MessageEventProcess messageEventProcess; private final MessageEventProcess messageEventProcess;
@ -91,8 +103,13 @@ public class BadgeOperateListener implements MessageListener {
return; return;
} }
Long finalBadgeId = badgeId; // badgeKey 属于 ADMINISTRATOR_BADGE_KEYS同时操作 ADMINISTRATOR HONOR_ADMIN 两个徽章
if (badgeId == null && badgeKey != null && ADMINISTRATOR_BADGE_KEYS.contains(badgeKey)) {
handleDualTypeBadgeOperate(userId, badgeKey, operationType, event.getDays());
return;
}
Long finalBadgeId = badgeId;
if (finalBadgeId == null) { if (finalBadgeId == null) {
if (badgeKey == null) { if (badgeKey == null) {
log.warn("徽章操作事件缺少badgeKey和badgeId, userId: {}", userId); log.warn("徽章操作事件缺少badgeKey和badgeId, userId: {}", userId);
@ -115,10 +132,36 @@ public class BadgeOperateListener implements MessageListener {
} }
} }
/**
* ADMINISTRATOR_BADGE_KEYS 类型的 badgeKey 同时操作 ADMINISTRATOR HONOR_ADMIN 两个徽章.
*/
private void handleDualTypeBadgeOperate(Long userId, String badgeKey, String operationType, Long days) {
List<String> types = List.of(BadgeConfigTypeEnum.ADMINISTRATOR.name(), BadgeConfigTypeEnum.HONOR_ADMIN.name());
for (String type : types) {
BadgeConfig badgeConfig = badgeConfigService.getByTypeAndBadgeKey(type, badgeKey);
if (badgeConfig == null) {
log.warn("徽章配置不存在, type: {}, badgeKey: {}", type, badgeKey);
continue;
}
if (BadgeOperateEvent.OperationType.WEAR.name().equals(operationType)) {
handleWearBadge(userId, badgeConfig.getId(), badgeKey, days, false);
} else if (BadgeOperateEvent.OperationType.REMOVE.name().equals(operationType)) {
handleRemoveBadge(userId, badgeConfig.getId(), badgeKey, false);
}
}
// 头像框只操作一次
int avatarFrameDays = BadgeOperateEvent.OperationType.WEAR.name().equals(operationType) ? 999 : -999;
giveAvatarFrameIfMapped(badgeKey, userId, avatarFrameDays);
}
/** /**
* 佩戴徽章. * 佩戴徽章.
*/ */
private void handleWearBadge(Long userId, Long badgeId, String badgeKey, Long days) { private void handleWearBadge(Long userId, Long badgeId, String badgeKey, Long days) {
handleWearBadge(userId, badgeId, badgeKey, days, true);
}
private void handleWearBadge(Long userId, Long badgeId, String badgeKey, Long days, boolean giveAvatarFrame) {
String lockKey = "badge:operate:wear:" + userId + ":" + badgeId; String lockKey = "badge:operate:wear:" + userId + ":" + badgeId;
distributedLockUtil.executeWithLock(lockKey, () -> { distributedLockUtil.executeWithLock(lockKey, () -> {
@ -143,7 +186,9 @@ public class BadgeOperateListener implements MessageListener {
} }
refreshUserWearBadges(userId); refreshUserWearBadges(userId);
if (giveAvatarFrame) {
giveAvatarFrameIfMapped(badgeKey, userId, 999); giveAvatarFrameIfMapped(badgeKey, userId, 999);
}
return null; return null;
}); });
@ -165,12 +210,18 @@ public class BadgeOperateListener implements MessageListener {
* 移除徽章. * 移除徽章.
*/ */
private void handleRemoveBadge(Long userId, Long badgeId, String badgeKey) { private void handleRemoveBadge(Long userId, Long badgeId, String badgeKey) {
handleRemoveBadge(userId, badgeId, badgeKey, true);
}
private void handleRemoveBadge(Long userId, Long badgeId, String badgeKey, boolean giveAvatarFrame) {
String lockKey = "badge:operate:remove:" + userId + ":" + badgeId; String lockKey = "badge:operate:remove:" + userId + ":" + badgeId;
distributedLockUtil.executeWithLock(lockKey, () -> { distributedLockUtil.executeWithLock(lockKey, () -> {
badgeBackpackService.deleteBadges(userId, Sets.newHashSet(badgeId)); badgeBackpackService.deleteBadges(userId, Sets.newHashSet(badgeId));
refreshUserWearBadges(userId); refreshUserWearBadges(userId);
if (giveAvatarFrame) {
giveAvatarFrameIfMapped(badgeKey, userId, -999); giveAvatarFrameIfMapped(badgeKey, userId, -999);
}
return null; return null;
}); });
} }

View File

@ -126,4 +126,13 @@ public interface BadgeConfigService extends BaseService<BadgeConfig> {
* @return 徽章配置 * @return 徽章配置
*/ */
BadgeConfig getByBadgeKey(String badgeKey); BadgeConfig getByBadgeKey(String badgeKey);
/**
* 根据类型和徽章Key查询徽章配置.
*
* @param type 徽章类型
* @param badgeKey 徽章Key
* @return 徽章配置
*/
BadgeConfig getByTypeAndBadgeKey(String type, String badgeKey);
} }

View File

@ -196,7 +196,7 @@ public class BadgeConfigServiceImpl extends BaseServiceImpl<BadgeConfigDAO, Badg
@Override @Override
public List<BadgeConfig> getBadgeConfigList(BadgeConfigTypeEnum type, String sysOrgin) { public List<BadgeConfig> getBadgeConfigList(BadgeConfigTypeEnum type, String sysOrgin) {
return baseDAO.getBadgeConfigList(type,sysOrgin); return baseDAO.getBadgeConfigList(type, sysOrgin);
} }
@Override @Override
@ -207,4 +207,14 @@ public class BadgeConfigServiceImpl extends BaseServiceImpl<BadgeConfigDAO, Badg
.last(PageConstant.LIMIT_ONE) .last(PageConstant.LIMIT_ONE)
.getOne(); .getOne();
} }
@Override
public BadgeConfig getByTypeAndBadgeKey(String type, String badgeKey) {
return query()
.eq(BadgeConfig::getType, type)
.eq(BadgeConfig::getBadgeKey, badgeKey)
.eq(BadgeConfig::getDel, Boolean.FALSE)
.last(PageConstant.LIMIT_ONE)
.getOne();
}
} }