新增 发送荣誉的时候 发送徽章
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.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;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user