财富魅力棒新增隐身效果
This commit is contained in:
parent
5c3fdc4108
commit
9c257eba1b
@ -27,6 +27,11 @@ public enum EnumConfigKey {
|
||||
*/
|
||||
DEFAULT_ROOM_COVER,
|
||||
|
||||
/**
|
||||
* 用户隐身图
|
||||
*/
|
||||
USER_YINSHEN_COVER,
|
||||
|
||||
/**
|
||||
* h5基础域名.
|
||||
*/
|
||||
|
||||
@ -4,10 +4,13 @@ import com.red.circle.common.business.dto.cmd.AppExtCommand;
|
||||
import com.red.circle.other.app.convertor.user.UserProfileAppConvertor;
|
||||
import com.red.circle.other.app.dto.clientobject.activity.ActivityLeaderboardCO;
|
||||
import com.red.circle.other.app.dto.clientobject.activity.ActivityLeaderboardCO.LeaderboardUserCO;
|
||||
import com.red.circle.other.domain.enums.VipAbilityType;
|
||||
import com.red.circle.other.domain.gateway.user.UserProfileGateway;
|
||||
import com.red.circle.other.infra.database.cache.service.other.EnumConfigCacheService;
|
||||
import com.red.circle.other.infra.database.mongo.entity.activity.RankQueenCount;
|
||||
import com.red.circle.other.infra.database.mongo.entity.activity.RankQueenType;
|
||||
import com.red.circle.other.infra.database.mongo.service.activity.RankCountService;
|
||||
import com.red.circle.other.inner.enums.config.EnumConfigKey;
|
||||
import com.red.circle.other.inner.model.dto.user.UserProfileDTO;
|
||||
import com.red.circle.tool.core.collection.CollectionUtils;
|
||||
import com.red.circle.tool.core.json.JacksonUtils;
|
||||
@ -32,6 +35,7 @@ public class GiftsReceivedLeaderboardQryExe {
|
||||
private final RankCountService rankCountService;
|
||||
private final UserProfileGateway userProfileGateway;
|
||||
private final UserProfileAppConvertor userProfileAppConvertor;
|
||||
private final EnumConfigCacheService enumConfigCacheService;
|
||||
|
||||
public ActivityLeaderboardCO execute(AppExtCommand cmd) {
|
||||
List<RankQueenCount> hours = getListRank(cmd, RankQueenType.CHARM_RANK_HOUR,50);
|
||||
@ -49,12 +53,13 @@ public class GiftsReceivedLeaderboardQryExe {
|
||||
Map<Long, UserProfileDTO> userProfileMap = userProfileAppConvertor.toMapUserProfileDTO(
|
||||
userProfileGateway.mapByUserIds(userIds)
|
||||
);
|
||||
Set<Long> invisibleUserIds = userProfileGateway.filterUsersByVipAbility(userIds, VipAbilityType.MYSTERIOUS_INVISIBILITY);
|
||||
|
||||
return new ActivityLeaderboardCO()
|
||||
.setHourly(toLeaderboardUserCO(hours, userProfileMap))
|
||||
.setDaily(toLeaderboardUserCO(days, userProfileMap))
|
||||
.setWeekly(toLeaderboardUserCO(weeks, userProfileMap))
|
||||
.setMonthly(toLeaderboardUserCO(months, userProfileMap))
|
||||
.setHourly(toLeaderboardUserCO(hours, userProfileMap, invisibleUserIds))
|
||||
.setDaily(toLeaderboardUserCO(days, userProfileMap, invisibleUserIds))
|
||||
.setWeekly(toLeaderboardUserCO(weeks, userProfileMap, invisibleUserIds))
|
||||
.setMonthly(toLeaderboardUserCO(months, userProfileMap, invisibleUserIds))
|
||||
;
|
||||
}
|
||||
|
||||
@ -74,31 +79,39 @@ public class GiftsReceivedLeaderboardQryExe {
|
||||
Map<Long, UserProfileDTO> userProfileMap = userProfileAppConvertor.toMapUserProfileDTO(
|
||||
userProfileGateway.mapByUserIds(userIds)
|
||||
);
|
||||
Set<Long> invisibleUserIds = userProfileGateway.filterUsersByVipAbility(userIds, VipAbilityType.MYSTERIOUS_INVISIBILITY);
|
||||
|
||||
List<RankQueenCount> emptyList = Collections.emptyList();
|
||||
return new ActivityLeaderboardCO()
|
||||
.setHourly(toLeaderboardUserCO(emptyList, userProfileMap))
|
||||
.setDaily(toLeaderboardUserCO(emptyList, userProfileMap))
|
||||
.setWeekly(toLeaderboardUserCO(weeks, userProfileMap))
|
||||
.setMonthly(toLeaderboardUserCO(emptyList, userProfileMap))
|
||||
.setHourly(toLeaderboardUserCO(emptyList, userProfileMap, invisibleUserIds))
|
||||
.setDaily(toLeaderboardUserCO(emptyList, userProfileMap, invisibleUserIds))
|
||||
.setWeekly(toLeaderboardUserCO(weeks, userProfileMap, invisibleUserIds))
|
||||
.setMonthly(toLeaderboardUserCO(emptyList, userProfileMap, invisibleUserIds))
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
private List<LeaderboardUserCO> toLeaderboardUserCO(List<RankQueenCount> list,
|
||||
Map<Long, UserProfileDTO> userProfileMap) {
|
||||
Map<Long, UserProfileDTO> userProfileMap, Set<Long> invisibleUserIds) {
|
||||
return list.stream().map(count -> {
|
||||
UserProfileDTO userProfile = userProfileMap.get(count.getBusinessId());
|
||||
if (Objects.isNull(userProfile)) {
|
||||
log.warn("数据错误,没有找到用户记录: {}", JacksonUtils.toJson(count));
|
||||
return null;
|
||||
}
|
||||
return new LeaderboardUserCO()
|
||||
.setId(userProfile.getId())
|
||||
.setAvatar(userProfile.getUserAvatar())
|
||||
.setNickname(userProfile.getUserNickname())
|
||||
LeaderboardUserCO co = new LeaderboardUserCO()
|
||||
.setQuantity(count.getQuantity())
|
||||
.setQuantityFormat(NumUtils.formatLong(count.getQuantity()));
|
||||
if (invisibleUserIds.contains(count.getBusinessId())) {
|
||||
co.setId(null);
|
||||
co.setNickname("****");
|
||||
co.setAvatar(enumConfigCacheService.getValue(EnumConfigKey.USER_YINSHEN_COVER, userProfile.getSysOriginChild()));
|
||||
} else {
|
||||
co.setId(userProfile.getId());
|
||||
co.setAvatar(userProfile.getUserAvatar());
|
||||
co.setNickname(userProfile.getUserNickname());
|
||||
}
|
||||
return co;
|
||||
}).filter(Objects::nonNull).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
|
||||
@ -4,10 +4,13 @@ import com.red.circle.common.business.dto.cmd.AppExtCommand;
|
||||
import com.red.circle.other.app.convertor.user.UserProfileAppConvertor;
|
||||
import com.red.circle.other.app.dto.clientobject.activity.ActivityLeaderboardCO;
|
||||
import com.red.circle.other.app.dto.clientobject.activity.ActivityLeaderboardCO.LeaderboardUserCO;
|
||||
import com.red.circle.other.domain.enums.VipAbilityType;
|
||||
import com.red.circle.other.domain.gateway.user.UserProfileGateway;
|
||||
import com.red.circle.other.infra.database.cache.service.other.EnumConfigCacheService;
|
||||
import com.red.circle.other.infra.database.mongo.entity.activity.RankQueenCount;
|
||||
import com.red.circle.other.infra.database.mongo.entity.activity.RankQueenType;
|
||||
import com.red.circle.other.infra.database.mongo.service.activity.RankCountService;
|
||||
import com.red.circle.other.inner.enums.config.EnumConfigKey;
|
||||
import com.red.circle.other.inner.model.dto.user.UserProfileDTO;
|
||||
import com.red.circle.tool.core.collection.CollectionUtils;
|
||||
import com.red.circle.tool.core.json.JacksonUtils;
|
||||
@ -35,6 +38,7 @@ public class GiftsSendLeaderboardQryExe {
|
||||
private final RankCountService rankCountService;
|
||||
private final UserProfileGateway userProfileGateway;
|
||||
private final UserProfileAppConvertor userProfileAppConvertor;
|
||||
private final EnumConfigCacheService enumConfigCacheService;
|
||||
|
||||
public ActivityLeaderboardCO execute(AppExtCommand cmd) {
|
||||
List<RankQueenCount> hours = getListRank(cmd, RankQueenType.WEALTH_RANK_HOUR,50);
|
||||
@ -49,12 +53,13 @@ public class GiftsSendLeaderboardQryExe {
|
||||
Map<Long, UserProfileDTO> userProfileMap = userProfileAppConvertor.toMapUserProfileDTO(
|
||||
userProfileGateway.mapByUserIds(userIds)
|
||||
);
|
||||
Set<Long> invisibleUserIds = userProfileGateway.filterUsersByVipAbility(userIds, VipAbilityType.MYSTERIOUS_INVISIBILITY);
|
||||
|
||||
return new ActivityLeaderboardCO()
|
||||
.setHourly(toLeaderboardUserCO(hours, userProfileMap))
|
||||
.setDaily(toLeaderboardUserCO(days, userProfileMap))
|
||||
.setWeekly(toLeaderboardUserCO(weeks, userProfileMap))
|
||||
.setMonthly(toLeaderboardUserCO(months, userProfileMap));
|
||||
.setHourly(toLeaderboardUserCO(hours, userProfileMap, invisibleUserIds))
|
||||
.setDaily(toLeaderboardUserCO(days, userProfileMap, invisibleUserIds))
|
||||
.setWeekly(toLeaderboardUserCO(weeks, userProfileMap, invisibleUserIds))
|
||||
.setMonthly(toLeaderboardUserCO(months, userProfileMap, invisibleUserIds));
|
||||
}
|
||||
|
||||
public ActivityLeaderboardCO executeApp(AppExtCommand cmd) {
|
||||
@ -70,11 +75,12 @@ public class GiftsSendLeaderboardQryExe {
|
||||
Map<Long, UserProfileDTO> userProfileMap = userProfileAppConvertor.toMapUserProfileDTO(
|
||||
userProfileGateway.mapByUserIds(userIds)
|
||||
);
|
||||
Set<Long> invisibleUserIds = userProfileGateway.filterUsersByVipAbility(userIds, VipAbilityType.MYSTERIOUS_INVISIBILITY);
|
||||
|
||||
return new ActivityLeaderboardCO()
|
||||
.setDaily(toLeaderboardUserCO(null, userProfileMap))
|
||||
.setWeekly(toLeaderboardUserCO(weeks, userProfileMap))
|
||||
.setMonthly(toLeaderboardUserCO(null, userProfileMap));
|
||||
.setDaily(toLeaderboardUserCO(null, userProfileMap, invisibleUserIds))
|
||||
.setWeekly(toLeaderboardUserCO(weeks, userProfileMap, invisibleUserIds))
|
||||
.setMonthly(toLeaderboardUserCO(null, userProfileMap, invisibleUserIds));
|
||||
}
|
||||
|
||||
private Set<Long> getAllUserIds(List<RankQueenCount> days, List<RankQueenCount> weeks,
|
||||
@ -95,7 +101,7 @@ public class GiftsSendLeaderboardQryExe {
|
||||
}
|
||||
|
||||
private List<LeaderboardUserCO> toLeaderboardUserCO(List<RankQueenCount> list,
|
||||
Map<Long, UserProfileDTO> userProfileMap) {
|
||||
Map<Long, UserProfileDTO> userProfileMap, Set<Long> invisibleUserIds) {
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
return CollectionUtils.newArrayList();
|
||||
}
|
||||
@ -105,12 +111,19 @@ public class GiftsSendLeaderboardQryExe {
|
||||
log.warn("数据异常,找不到用户记录: {}", JacksonUtils.toJson(count));
|
||||
return null;
|
||||
}
|
||||
return new LeaderboardUserCO()
|
||||
.setId(userProfile.getId())
|
||||
.setAvatar(userProfile.getUserAvatar())
|
||||
.setNickname(userProfile.getUserNickname())
|
||||
LeaderboardUserCO co = new LeaderboardUserCO()
|
||||
.setQuantity(count.getQuantity())
|
||||
.setQuantityFormat(NumUtils.formatLong(count.getQuantity()));
|
||||
if (invisibleUserIds.contains(count.getBusinessId())) {
|
||||
co.setId(null);
|
||||
co.setNickname("****");
|
||||
co.setAvatar(enumConfigCacheService.getValue(EnumConfigKey.USER_YINSHEN_COVER, userProfile.getSysOriginChild()));
|
||||
} else {
|
||||
co.setId(userProfile.getId());
|
||||
co.setAvatar(userProfile.getUserAvatar());
|
||||
co.setNickname(userProfile.getUserNickname());
|
||||
}
|
||||
return co;
|
||||
}).filter(Objects::nonNull).toList();
|
||||
}
|
||||
|
||||
|
||||
@ -13,10 +13,12 @@ import com.red.circle.other.domain.model.user.UserProfile;
|
||||
import com.red.circle.other.domain.ranking.RankingActivityType;
|
||||
import com.red.circle.other.domain.ranking.RankingCycleType;
|
||||
import com.red.circle.other.domain.ranking.RankingDimension;
|
||||
import com.red.circle.other.infra.database.cache.service.other.EnumConfigCacheService;
|
||||
import com.red.circle.other.infra.database.mongo.entity.activity.RankingActivityRecord;
|
||||
import com.red.circle.other.infra.database.mongo.entity.activity.WeekKingQueenCount;
|
||||
import com.red.circle.other.infra.gateway.RankingActivityGateway;
|
||||
import com.red.circle.other.inner.endpoint.sys.SysActivityConfigClient;
|
||||
import com.red.circle.other.inner.enums.config.EnumConfigKey;
|
||||
import com.red.circle.other.inner.model.dto.sys.ActivityConfigDTO;
|
||||
import com.red.circle.other.inner.model.dto.user.UserProfileDTO;
|
||||
import com.red.circle.tool.core.date.ZonedDateTimeAsiaRiyadhUtils;
|
||||
@ -42,13 +44,12 @@ import java.util.stream.IntStream;
|
||||
@RequiredArgsConstructor
|
||||
public class RankingListQryExe {
|
||||
|
||||
private static final String INVISIBLE_AVATAR = "https://tkm-likei.oss-ap-southeast-1.aliyuncs.com/default_avatar/yinshen.png";
|
||||
|
||||
private final RankingActivityGateway rankingActivityGateway;
|
||||
private final RankingActivityConvertor convertor;
|
||||
private final UserProfileGateway userProfileGateway;
|
||||
private final UserProfileAppConvertor userProfileAppConvertor;
|
||||
private final SysActivityConfigClient sysActivityConfigClient;
|
||||
private final EnumConfigCacheService enumConfigCacheService;
|
||||
|
||||
public RankingListCO execute(RankingListQueryCmd cmd) {
|
||||
// 获取枚举
|
||||
@ -89,8 +90,8 @@ public class RankingListQryExe {
|
||||
if (invisible) {
|
||||
co.setUserId(null);
|
||||
co.setAccount(null);
|
||||
co.setNickname(maskNickname(userProfileDTO.getUserNickname()));
|
||||
co.setAvatar(INVISIBLE_AVATAR);
|
||||
co.setNickname("****");
|
||||
co.setAvatar(enumConfigCacheService.getValue(EnumConfigKey.USER_YINSHEN_COVER, userProfileDTO.getSysOriginChild()));
|
||||
} else {
|
||||
co.setAccount(userProfileDTO.getAccount());
|
||||
co.setNickname(userProfileDTO.getUserNickname());
|
||||
|
||||
@ -9,10 +9,13 @@ import com.red.circle.other.app.command.activity.RechargeLeaderboardQryExe;
|
||||
import com.red.circle.other.app.command.activity.RoomGiftsLeaderboardQryExe;
|
||||
import com.red.circle.other.app.dto.clientobject.activity.ActivityLeaderboardCO;
|
||||
import com.red.circle.other.app.dto.clientobject.activity.ActivityLeaderboardListCO;
|
||||
import com.red.circle.other.domain.enums.VipAbilityType;
|
||||
import com.red.circle.other.domain.gateway.user.UserProfileGateway;
|
||||
import com.red.circle.other.domain.model.user.UserProfile;
|
||||
import com.red.circle.other.infra.database.cache.key.RankKey;
|
||||
import com.red.circle.other.infra.database.cache.service.other.EnumConfigCacheService;
|
||||
import com.red.circle.other.infra.database.cache.service.user.RankCacheService;
|
||||
import com.red.circle.other.inner.enums.config.EnumConfigKey;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -36,6 +39,7 @@ public class ActivityLeaderboardServiceImpl implements ActivityLeaderboardServic
|
||||
private final GiftsReceivedLeaderboardQryExe giftsReceivedLeaderboardQryExe;
|
||||
private final RankCacheService rankCacheService;
|
||||
private final UserProfileGateway userProfileGateway;
|
||||
private final EnumConfigCacheService enumConfigCacheService;
|
||||
|
||||
@Override
|
||||
public ActivityLeaderboardCO roomGiftsLeaderboard(AppExtCommand cmd) {
|
||||
@ -73,11 +77,9 @@ public class ActivityLeaderboardServiceImpl implements ActivityLeaderboardServic
|
||||
ActivityLeaderboardCO co = giftsSendLeaderboardQryExe.execute(cmd);
|
||||
Gson gson = new Gson();
|
||||
String jsonString = gson.toJson(co);
|
||||
//log.warn("礼物赠送排行榜:{}", jsonString);
|
||||
rankCacheService.add(jsonString, cmd.requireReqSysOrigin(), RankKey.GIFTS_SEND.name());
|
||||
return co;
|
||||
} else {
|
||||
//log.warn("礼物赠送排行榜,{}", rank);
|
||||
Gson gson = new Gson();
|
||||
Type listType = new TypeToken<ActivityLeaderboardCO>(){}.getType();
|
||||
ActivityLeaderboardCO activityLeaderboardCO = gson.fromJson(rank, listType);
|
||||
@ -245,6 +247,16 @@ public class ActivityLeaderboardServiceImpl implements ActivityLeaderboardServic
|
||||
|
||||
private ActivityLeaderboardCO.LeaderboardUserCO defaultRankInfo(Long userId) {
|
||||
UserProfile userProfile = userProfileGateway.getByUserId(userId);
|
||||
boolean vipAbility = userProfileGateway.getUserVipAbility(userId, VipAbilityType.MYSTERIOUS_INVISIBILITY);
|
||||
if (vipAbility) {
|
||||
return new ActivityLeaderboardCO.LeaderboardUserCO()
|
||||
.setId(null)
|
||||
.setAvatar(enumConfigCacheService.getValue(EnumConfigKey.USER_YINSHEN_COVER, userProfile.getSysOriginChild()))
|
||||
.setNickname("****")
|
||||
.setQuantity(0L)
|
||||
.setQuantityFormat("0");
|
||||
}
|
||||
|
||||
return new ActivityLeaderboardCO.LeaderboardUserCO()
|
||||
.setId(userProfile.getId())
|
||||
.setAvatar(userProfile.getUserAvatar())
|
||||
|
||||
@ -203,6 +203,11 @@ public interface UserProfileGateway {
|
||||
*/
|
||||
boolean getUserVipAbility(Long userId, VipAbilityType abilityType);
|
||||
|
||||
/**
|
||||
* 批量返回具有指定VIP权限的用户ID集合.
|
||||
*/
|
||||
Set<Long> filterUsersByVipAbility(Set<Long> userIds, VipAbilityType abilityType);
|
||||
|
||||
/**
|
||||
* 根据 userId 查询用户当前 VIP 等级
|
||||
*
|
||||
|
||||
@ -23,7 +23,7 @@ import java.util.concurrent.TimeUnit;
|
||||
public class RankCacheServiceImpl implements RankCacheService {
|
||||
|
||||
private final RedisService redisService;
|
||||
private static final long CACHE_TIME = 1;
|
||||
private static final long CACHE_TIME = 5;
|
||||
|
||||
@Override
|
||||
public void remove(String sysOrigin, String type) {
|
||||
|
||||
@ -512,6 +512,22 @@ public class UserProfileGatewayImpl implements UserProfileGateway {
|
||||
return hasVipLevel && switchOn;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<Long> filterUsersByVipAbility(Set<Long> userIds, VipAbilityType abilityType) {
|
||||
if (CollectionUtils.isEmpty(userIds)) {
|
||||
return Collections.emptySet();
|
||||
}
|
||||
Map<Long, UserProfile> profileMap = mapByUserIds(userIds);
|
||||
return profileMap.entrySet().stream()
|
||||
.filter(entry -> {
|
||||
String vipName = resolveVipNameFromProfile(entry.getValue());
|
||||
return abilityType.hasAbility(vipName)
|
||||
&& userVipAbilitySettingService.isEnabled(entry.getKey(), abilityType);
|
||||
})
|
||||
.map(Map.Entry::getKey)
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
private boolean inWhiteList(Long userId) {
|
||||
EnumConfigDTO configDTO = enumConfigCacheService.getByCode("LOGIN_WHITE_CONFIG", "LIKEI");
|
||||
String whiteConfig = Optional.ofNullable(configDTO).map(EnumConfigDTO::getVal).orElse(null);
|
||||
@ -535,7 +551,10 @@ public class UserProfileGatewayImpl implements UserProfileGateway {
|
||||
}
|
||||
|
||||
private String resolveUserVipName(Long userId) {
|
||||
UserProfile userProfile = getByUserId(userId);
|
||||
return resolveVipNameFromProfile(getByUserId(userId));
|
||||
}
|
||||
|
||||
private String resolveVipNameFromProfile(UserProfile userProfile) {
|
||||
if (Objects.isNull(userProfile) || CollectionUtils.isEmpty(userProfile.getUseProps())) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user