新增 发送荣誉的时候 发送徽章
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);
|
||||
giveAvatarFrameIfMapped(badgeKey, userId, 999);
|
||||
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);
|
||||
giveAvatarFrameIfMapped(badgeKey, userId, -999);
|
||||
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);
|
||||
}
|
||||
|
||||
@ -35,10 +35,10 @@ public class BadgeConfigServiceImpl extends BaseServiceImpl<BadgeConfigDAO, Badg
|
||||
@Override
|
||||
public List<BadgeConfig> listBadgeByType(SysBadgeConfigTypeEnum type) {
|
||||
List<BadgeConfig> badgeConfigs = query()
|
||||
.eq(BadgeConfig::getType, type)
|
||||
.eq(BadgeConfig::getDel, Boolean.FALSE)
|
||||
.orderByDesc(BadgeConfig::getId)
|
||||
.list();
|
||||
.eq(BadgeConfig::getType, type)
|
||||
.eq(BadgeConfig::getDel, Boolean.FALSE)
|
||||
.orderByDesc(BadgeConfig::getId)
|
||||
.list();
|
||||
|
||||
if (CollectionUtils.isEmpty(badgeConfigs)) {
|
||||
return Lists.newArrayList();
|
||||
@ -50,53 +50,53 @@ public class BadgeConfigServiceImpl extends BaseServiceImpl<BadgeConfigDAO, Badg
|
||||
@Override
|
||||
public Long getFreightBadgeId() {
|
||||
return Optional.ofNullable(
|
||||
query().select(BadgeConfig::getId)
|
||||
.eq(BadgeConfig::getType, BadgeConfigTypeEnum.HONOR_ADMIN)
|
||||
.eq(BadgeConfig::getBadgeKey, BadgeKeyEnum.RECHARGE_AGENCY)
|
||||
.eq(BadgeConfig::getDel, Boolean.FALSE)
|
||||
.last(PageConstant.LIMIT_ONE)
|
||||
.getOne())
|
||||
.map(BadgeConfig::getId)
|
||||
.orElse(null);
|
||||
query().select(BadgeConfig::getId)
|
||||
.eq(BadgeConfig::getType, BadgeConfigTypeEnum.HONOR_ADMIN)
|
||||
.eq(BadgeConfig::getBadgeKey, BadgeKeyEnum.RECHARGE_AGENCY)
|
||||
.eq(BadgeConfig::getDel, Boolean.FALSE)
|
||||
.last(PageConstant.LIMIT_ONE)
|
||||
.getOne())
|
||||
.map(BadgeConfig::getId)
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Long> listAdministratorIds() {
|
||||
return Optional.ofNullable(query().select(BadgeConfig::getId)
|
||||
.eq(BadgeConfig::getType, BadgeConfigTypeEnum.ADMINISTRATOR)
|
||||
.eq(BadgeConfig::getDel, Boolean.FALSE)
|
||||
.list())
|
||||
.map(badgeConfigs -> badgeConfigs.stream().map(BadgeConfig::getId).collect(
|
||||
Collectors.toList()))
|
||||
.orElse(null);
|
||||
.eq(BadgeConfig::getType, BadgeConfigTypeEnum.ADMINISTRATOR)
|
||||
.eq(BadgeConfig::getDel, Boolean.FALSE)
|
||||
.list())
|
||||
.map(badgeConfigs -> badgeConfigs.stream().map(BadgeConfig::getId).collect(
|
||||
Collectors.toList()))
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Long> listAdminBadgeIds() {
|
||||
return Optional.ofNullable(
|
||||
query().select(BadgeConfig::getId)
|
||||
.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(
|
||||
Collectors.toList()))
|
||||
.orElse(null);
|
||||
query().select(BadgeConfig::getId)
|
||||
.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(
|
||||
Collectors.toList()))
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BadgeConfig> listByBadgeKey(BadgeKeyEnum badgeKey) {
|
||||
return query().eq(BadgeConfig::getBadgeKey, badgeKey)
|
||||
.eq(BadgeConfig::getDel, Boolean.FALSE)
|
||||
.orderByAsc(BadgeConfig::getBadgeLevel)
|
||||
.list();
|
||||
.eq(BadgeConfig::getDel, Boolean.FALSE)
|
||||
.orderByAsc(BadgeConfig::getBadgeLevel)
|
||||
.list();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BadgeConfig> listBadgeConfig(BadgeConfigTypeEnum type) {
|
||||
if (type == BadgeConfigTypeEnum.ALL) {
|
||||
return query()
|
||||
.in(BadgeConfig::getType, Arrays.asList(BadgeConfigTypeEnum.ACTIVITY, BadgeConfigTypeEnum.ACHIEVEMENT, BadgeConfigTypeEnum.ADMINISTRATOR))
|
||||
.in(BadgeConfig::getType, Arrays.asList(BadgeConfigTypeEnum.ACTIVITY, BadgeConfigTypeEnum.ACHIEVEMENT, BadgeConfigTypeEnum.ADMINISTRATOR))
|
||||
.eq(BadgeConfig::getDel, Boolean.FALSE)
|
||||
.orderByAsc(BadgeConfig::getBadgeLevel)
|
||||
.last(PageConstant.formatLimit(300))
|
||||
@ -104,89 +104,89 @@ public class BadgeConfigServiceImpl extends BaseServiceImpl<BadgeConfigDAO, Badg
|
||||
}
|
||||
|
||||
return query().eq(BadgeConfig::getType, type)
|
||||
.eq(BadgeConfig::getDel, Boolean.FALSE)
|
||||
.orderByAsc(BadgeConfig::getBadgeLevel)
|
||||
.last(PageConstant.formatLimit(200)).list();
|
||||
.eq(BadgeConfig::getDel, Boolean.FALSE)
|
||||
.orderByAsc(BadgeConfig::getBadgeLevel)
|
||||
.last(PageConstant.formatLimit(200)).list();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BadgeConfig> listByIds(List<Long> ids) {
|
||||
return CollectionUtils.isEmpty(ids) ? CollectionUtils.newArrayList()
|
||||
: query().in(BadgeConfig::getId, ids).list();
|
||||
: query().in(BadgeConfig::getId, ids).list();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<Long, BadgeConfig> mapByIds(Set<Long> ids) {
|
||||
return CollectionUtils.isEmpty(ids)
|
||||
? CollectionUtils.newHashMap()
|
||||
: Optional.ofNullable(query().in(BadgeConfig::getId, ids).list2Map(BadgeConfig::getId))
|
||||
.orElseGet(CollectionUtils::newHashMap);
|
||||
? CollectionUtils.newHashMap()
|
||||
: Optional.ofNullable(query().in(BadgeConfig::getId, ids).list2Map(BadgeConfig::getId))
|
||||
.orElseGet(CollectionUtils::newHashMap);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<BadgeConfig> getGiveBadgePage(GiveBadgeConfigQryCmd query, Set<Long> collect) {
|
||||
return query()
|
||||
.eq(BadgeConfig::getDel, Boolean.FALSE)
|
||||
.in(BadgeConfig::getId, collect)
|
||||
.ne(BadgeConfig::getType, SysBadgeConfigTypeEnum.ACHIEVEMENT.getName())
|
||||
.ne(BadgeConfig::getType, SysBadgeConfigTypeEnum.FAMILY.getName())
|
||||
.ne(BadgeConfig::getType, SysBadgeConfigTypeEnum.ROOM_ACHIEVEMENT.getName())
|
||||
.orderByDesc(BadgeConfig::getCreateTime).page(query.getPageQuery());
|
||||
.eq(BadgeConfig::getDel, Boolean.FALSE)
|
||||
.in(BadgeConfig::getId, collect)
|
||||
.ne(BadgeConfig::getType, SysBadgeConfigTypeEnum.ACHIEVEMENT.getName())
|
||||
.ne(BadgeConfig::getType, SysBadgeConfigTypeEnum.FAMILY.getName())
|
||||
.ne(BadgeConfig::getType, SysBadgeConfigTypeEnum.ROOM_ACHIEVEMENT.getName())
|
||||
.orderByDesc(BadgeConfig::getCreateTime).page(query.getPageQuery());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BadgeConfig> listBadgeByIds(SysBadgeConfigTypeEnum type, Set<Long> collect) {
|
||||
return query().eq(BadgeConfig::getType, type)
|
||||
.in(BadgeConfig::getId, collect)
|
||||
.list();
|
||||
.in(BadgeConfig::getId, collect)
|
||||
.list();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteBadge(Long id) {
|
||||
update()
|
||||
.set(BadgeConfig::getDel, Boolean.TRUE)
|
||||
.eq(BadgeConfig::getId, id)
|
||||
.execute();
|
||||
.set(BadgeConfig::getDel, Boolean.TRUE)
|
||||
.eq(BadgeConfig::getId, id)
|
||||
.execute();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateBadgeConfig(BadgeConfig badgeConfig) {
|
||||
update()
|
||||
.set(BadgeConfig::getBadgeName, badgeConfig.getBadgeName())
|
||||
.set(BadgeConfig::getType, badgeConfig.getType())
|
||||
.set(BadgeConfig::getBadgeKey, badgeConfig.getBadgeKey())
|
||||
.set(BadgeConfig::getBadgeLevel, badgeConfig.getBadgeLevel())
|
||||
.set(BadgeConfig::getMilestone, badgeConfig.getMilestone())
|
||||
.eq(BadgeConfig::getId, badgeConfig.getId())
|
||||
.last(PageConstant.LIMIT_ONE)
|
||||
.execute();
|
||||
.set(BadgeConfig::getBadgeName, badgeConfig.getBadgeName())
|
||||
.set(BadgeConfig::getType, badgeConfig.getType())
|
||||
.set(BadgeConfig::getBadgeKey, badgeConfig.getBadgeKey())
|
||||
.set(BadgeConfig::getBadgeLevel, badgeConfig.getBadgeLevel())
|
||||
.set(BadgeConfig::getMilestone, badgeConfig.getMilestone())
|
||||
.eq(BadgeConfig::getId, badgeConfig.getId())
|
||||
.last(PageConstant.LIMIT_ONE)
|
||||
.execute();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<BadgeConfig> getBadgeConfig(SysBadgeConfigQryCmd query) {
|
||||
return query()
|
||||
.eq(BadgeConfig::getDel, Boolean.FALSE)
|
||||
.like(StringUtils.isNotBlank(query.getBadgeName()), BadgeConfig::getBadgeName,
|
||||
query.getBadgeName())
|
||||
.like(StringUtils.isNotBlank(query.getBadgeKey()), BadgeConfig::getBadgeKey,
|
||||
query.getBadgeKey())
|
||||
.eq(Objects.nonNull(query.getId()), BadgeConfig::getId, query.getId())
|
||||
.eq(StringUtils.isNotBlank(query.getType()), BadgeConfig::getType, query.getType())
|
||||
.orderByDesc(BadgeConfig::getCreateTime)
|
||||
.page(query.getPageQuery());
|
||||
.eq(BadgeConfig::getDel, Boolean.FALSE)
|
||||
.like(StringUtils.isNotBlank(query.getBadgeName()), BadgeConfig::getBadgeName,
|
||||
query.getBadgeName())
|
||||
.like(StringUtils.isNotBlank(query.getBadgeKey()), BadgeConfig::getBadgeKey,
|
||||
query.getBadgeKey())
|
||||
.eq(Objects.nonNull(query.getId()), BadgeConfig::getId, query.getId())
|
||||
.eq(StringUtils.isNotBlank(query.getType()), BadgeConfig::getType, query.getType())
|
||||
.orderByDesc(BadgeConfig::getCreateTime)
|
||||
.page(query.getPageQuery());
|
||||
}
|
||||
|
||||
@Override
|
||||
public Long getAdminBadgeId(String key) {
|
||||
return Optional.ofNullable(
|
||||
query().select(BadgeConfig::getId)
|
||||
.eq(BadgeConfig::getType, SysBadgeConfigTypeEnum.HONOR_ADMIN)
|
||||
.eq(BadgeConfig::getBadgeKey, key)
|
||||
.eq(BadgeConfig::getDel, Boolean.FALSE)
|
||||
.last(PageConstant.LIMIT_ONE)
|
||||
.getOne())
|
||||
.map(BadgeConfig::getId)
|
||||
.orElse(null);
|
||||
query().select(BadgeConfig::getId)
|
||||
.eq(BadgeConfig::getType, SysBadgeConfigTypeEnum.HONOR_ADMIN)
|
||||
.eq(BadgeConfig::getBadgeKey, key)
|
||||
.eq(BadgeConfig::getDel, Boolean.FALSE)
|
||||
.last(PageConstant.LIMIT_ONE)
|
||||
.getOne())
|
||||
.map(BadgeConfig::getId)
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -196,15 +196,25 @@ public class BadgeConfigServiceImpl extends BaseServiceImpl<BadgeConfigDAO, Badg
|
||||
|
||||
@Override
|
||||
public List<BadgeConfig> getBadgeConfigList(BadgeConfigTypeEnum type, String sysOrgin) {
|
||||
return baseDAO.getBadgeConfigList(type,sysOrgin);
|
||||
return baseDAO.getBadgeConfigList(type, sysOrgin);
|
||||
}
|
||||
|
||||
@Override
|
||||
public BadgeConfig getByBadgeKey(String badgeKey) {
|
||||
return query()
|
||||
.eq(BadgeConfig::getBadgeKey, badgeKey)
|
||||
.eq(BadgeConfig::getDel, Boolean.FALSE)
|
||||
.last(PageConstant.LIMIT_ONE)
|
||||
.getOne();
|
||||
.eq(BadgeConfig::getBadgeKey, badgeKey)
|
||||
.eq(BadgeConfig::getDel, Boolean.FALSE)
|
||||
.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