新增 发送荣誉的时候 发送徽章
This commit is contained in:
parent
c10b7dc378
commit
78b17b991a
@ -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.inner.endpoint.material.props.PropsBackpackClient;
|
||||
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.ConsolePropsTypeEnum;
|
||||
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)
|
||||
.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 BadgeBackpackService badgeBackpackService;
|
||||
private final MessageEventProcess messageEventProcess;
|
||||
@ -91,8 +103,13 @@ public class BadgeOperateListener implements MessageListener {
|
||||
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 (badgeKey == null) {
|
||||
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) {
|
||||
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;
|
||||
|
||||
distributedLockUtil.executeWithLock(lockKey, () -> {
|
||||
@ -143,7 +186,9 @@ public class BadgeOperateListener implements MessageListener {
|
||||
}
|
||||
|
||||
refreshUserWearBadges(userId);
|
||||
if (giveAvatarFrame) {
|
||||
giveAvatarFrameIfMapped(badgeKey, userId, 999);
|
||||
}
|
||||
|
||||
return null;
|
||||
});
|
||||
@ -165,12 +210,18 @@ public class BadgeOperateListener implements MessageListener {
|
||||
* 移除徽章.
|
||||
*/
|
||||
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;
|
||||
|
||||
distributedLockUtil.executeWithLock(lockKey, () -> {
|
||||
badgeBackpackService.deleteBadges(userId, Sets.newHashSet(badgeId));
|
||||
refreshUserWearBadges(userId);
|
||||
if (giveAvatarFrame) {
|
||||
giveAvatarFrameIfMapped(badgeKey, userId, -999);
|
||||
}
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
@ -126,4 +126,13 @@ public interface BadgeConfigService extends BaseService<BadgeConfig> {
|
||||
* @return 徽章配置
|
||||
*/
|
||||
BadgeConfig getByBadgeKey(String badgeKey);
|
||||
|
||||
/**
|
||||
* 根据类型和徽章Key查询徽章配置.
|
||||
*
|
||||
* @param type 徽章类型
|
||||
* @param badgeKey 徽章Key
|
||||
* @return 徽章配置
|
||||
*/
|
||||
BadgeConfig getByTypeAndBadgeKey(String type, String badgeKey);
|
||||
}
|
||||
|
||||
@ -207,4 +207,14 @@ public class BadgeConfigServiceImpl extends BaseServiceImpl<BadgeConfigDAO, Badg
|
||||
.last(PageConstant.LIMIT_ONE)
|
||||
.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();
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user