南亚区国家区分处理
This commit is contained in:
parent
8eff471204
commit
6a1385fc99
@ -10,8 +10,10 @@ import com.red.circle.other.app.common.room.RoomVoiceProfileCommon;
|
|||||||
import com.red.circle.other.app.dto.clientobject.room.RoomVoiceProfileCO;
|
import com.red.circle.other.app.dto.clientobject.room.RoomVoiceProfileCO;
|
||||||
import com.red.circle.other.app.service.game.GameLudoService;
|
import com.red.circle.other.app.service.game.GameLudoService;
|
||||||
import com.red.circle.other.app.service.room.RocketStatusCacheService;
|
import com.red.circle.other.app.service.room.RocketStatusCacheService;
|
||||||
|
import com.red.circle.other.domain.gateway.user.UserProfileGateway;
|
||||||
import com.red.circle.other.domain.gateway.user.ability.UserRegionGateway;
|
import com.red.circle.other.domain.gateway.user.ability.UserRegionGateway;
|
||||||
import com.red.circle.other.domain.gateway.user.ability.UserSVipGateway;
|
import com.red.circle.other.domain.gateway.user.ability.UserSVipGateway;
|
||||||
|
import com.red.circle.other.domain.model.user.UserProfile;
|
||||||
import com.red.circle.other.domain.rocket.RocketStatus;
|
import com.red.circle.other.domain.rocket.RocketStatus;
|
||||||
import com.red.circle.other.infra.database.cache.service.user.RegionRoomCacheService;
|
import com.red.circle.other.infra.database.cache.service.user.RegionRoomCacheService;
|
||||||
import com.red.circle.other.infra.database.mongo.entity.live.ActiveVoiceRoom;
|
import com.red.circle.other.infra.database.mongo.entity.live.ActiveVoiceRoom;
|
||||||
@ -60,6 +62,7 @@ public class RoomVoiceDiscoverQryExe {
|
|||||||
private final RedisTemplate<String, Object> redisTemplate;
|
private final RedisTemplate<String, Object> redisTemplate;
|
||||||
private final RocketStatusCacheService rocketStatusCacheService;
|
private final RocketStatusCacheService rocketStatusCacheService;
|
||||||
private final GameLudoService gameLudoService;
|
private final GameLudoService gameLudoService;
|
||||||
|
private final UserProfileGateway userProfileGateway;
|
||||||
|
|
||||||
private static final String EMPTY_ROOM_CACHE_KEY = "empty_room_cache:*";
|
private static final String EMPTY_ROOM_CACHE_KEY = "empty_room_cache:*";
|
||||||
|
|
||||||
@ -71,6 +74,7 @@ public class RoomVoiceDiscoverQryExe {
|
|||||||
|
|
||||||
public List<RoomVoiceProfileCO> execute(AppExtCommand cmd) {
|
public List<RoomVoiceProfileCO> execute(AppExtCommand cmd) {
|
||||||
String region = cmd.isAllRegion() ? "ALL" : userRegionGateway.getRegionCode(cmd.requiredReqUserId());
|
String region = cmd.isAllRegion() ? "ALL" : userRegionGateway.getRegionCode(cmd.requiredReqUserId());
|
||||||
|
UserProfile userProfile = userProfileGateway.getByUserId(cmd.requiredReqUserId());
|
||||||
|
|
||||||
String key = cmd.requireReqSysOrigin() + region;
|
String key = cmd.requireReqSysOrigin() + region;
|
||||||
String regionsRoom = regionRoomCacheService.getRegionsRoom(key);
|
String regionsRoom = regionRoomCacheService.getRegionsRoom(key);
|
||||||
@ -79,28 +83,24 @@ public class RoomVoiceDiscoverQryExe {
|
|||||||
return roomList;
|
return roomList;
|
||||||
}
|
}
|
||||||
|
|
||||||
List<ActiveVoiceRoom> activeVoiceRooms = activeVoiceRoomService.listDiscover(cmd.requireReqSysOrigin(), cmd.isAllRegion(), region, 50);
|
String userCountryCode = userProfile != null ? userProfile.getCountryCode() : null;
|
||||||
|
List<ActiveVoiceRoom> activeVoiceRooms = activeVoiceRoomService.listDiscover(cmd.requireReqSysOrigin(), cmd.isAllRegion(), region, userCountryCode, 50);
|
||||||
|
|
||||||
// 查询没人的房间缓存,加入进去
|
// 查询没人的房间缓存,加入进去
|
||||||
List<ActiveVoiceRoom> emptyRooms = getEmptyRoomsFromCache();
|
List<ActiveVoiceRoom> emptyRooms = getEmptyRoomsFromCache();
|
||||||
if (CollectionUtils.isNotEmpty(emptyRooms)) {
|
if (CollectionUtils.isNotEmpty(emptyRooms)) {
|
||||||
// 按照listDiscover的过滤规则过滤空房间
|
List<ActiveVoiceRoom> matchedEmptyRooms = filterEmptyRoomsByRegion(emptyRooms, cmd.requireReqSysOrigin(), cmd.isAllRegion(), region, userCountryCode);
|
||||||
List<ActiveVoiceRoom> matchedEmptyRooms = filterEmptyRoomsByRegion(emptyRooms, cmd.requireReqSysOrigin(), cmd.isAllRegion(), region);
|
|
||||||
if (CollectionUtils.isNotEmpty(matchedEmptyRooms)) {
|
if (CollectionUtils.isNotEmpty(matchedEmptyRooms)) {
|
||||||
// 创建新的可修改列表,合并活跃房间和空房间,并去重
|
|
||||||
List<ActiveVoiceRoom> allRooms = new ArrayList<>(activeVoiceRooms);
|
List<ActiveVoiceRoom> allRooms = new ArrayList<>(activeVoiceRooms);
|
||||||
// 获取已存在的房间ID
|
|
||||||
Set<Long> existingRoomIds = activeVoiceRooms.stream()
|
Set<Long> existingRoomIds = activeVoiceRooms.stream()
|
||||||
.map(ActiveVoiceRoom::getId)
|
.map(ActiveVoiceRoom::getId)
|
||||||
.collect(Collectors.toSet());
|
.collect(Collectors.toSet());
|
||||||
// 只添加不存在的空房间
|
|
||||||
matchedEmptyRooms.stream()
|
matchedEmptyRooms.stream()
|
||||||
.filter(room -> !existingRoomIds.contains(room.getId()))
|
.filter(room -> !existingRoomIds.contains(room.getId()))
|
||||||
.forEach(allRooms::add);
|
.forEach(allRooms::add);
|
||||||
activeVoiceRooms = allRooms;
|
activeVoiceRooms = allRooms;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
log.info("activeVoiceRooms:{}", JSON.toJSONString(activeVoiceRooms));
|
|
||||||
List<RoomVoiceProfileCO> roomList = roomVoiceProfileCommon.toListRoomVoiceProfileCO(activeVoiceRooms);
|
List<RoomVoiceProfileCO> roomList = roomVoiceProfileCommon.toListRoomVoiceProfileCO(activeVoiceRooms);
|
||||||
|
|
||||||
if (CollectionUtils.isEmpty(roomList)) {
|
if (CollectionUtils.isEmpty(roomList)) {
|
||||||
@ -249,10 +249,11 @@ public class RoomVoiceDiscoverQryExe {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<ActiveVoiceRoom> filterEmptyRoomsByRegion(List<ActiveVoiceRoom> emptyRooms, String sysOrigin, boolean isAllRegion, String region) {
|
private List<ActiveVoiceRoom> filterEmptyRoomsByRegion(List<ActiveVoiceRoom> emptyRooms, String sysOrigin, boolean isAllRegion, String region, String userCountryCode) {
|
||||||
return emptyRooms.stream()
|
return emptyRooms.stream()
|
||||||
.filter(room -> Objects.equals(sysOrigin, room.getSysOrigin()) &&
|
.filter(room -> Objects.equals(sysOrigin, room.getSysOrigin()) &&
|
||||||
(isAllRegion || shouldShowRoom(region, room.getRegion())))
|
(isAllRegion || shouldShowRoom(region, room.getRegion())) &&
|
||||||
|
(!SA_REGIONS.contains(region) || userCountryCode == null || userCountryCode.equals(room.getCountryCode())))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -37,7 +37,7 @@ public class EmptyRoomCleanTask {
|
|||||||
public void cleanEmptyRooms() {
|
public void cleanEmptyRooms() {
|
||||||
try {
|
try {
|
||||||
// 获取所有活跃房间
|
// 获取所有活跃房间
|
||||||
List<ActiveVoiceRoom> allRooms = activeVoiceRoomService.listDiscover(SysOriginPlatformEnum.LIKEI.name(),true,"",200);
|
List<ActiveVoiceRoom> allRooms = activeVoiceRoomService.listDiscover(SysOriginPlatformEnum.LIKEI.name(),true,"",null,200);
|
||||||
if (CollectionUtils.isEmpty(allRooms)) {
|
if (CollectionUtils.isEmpty(allRooms)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -65,7 +65,7 @@ public interface ActiveVoiceRoomService {
|
|||||||
/**
|
/**
|
||||||
* 获取发现页数据.
|
* 获取发现页数据.
|
||||||
*/
|
*/
|
||||||
List<ActiveVoiceRoom> listDiscover(String sysOrigin, boolean isAllRegion, String region, Integer limit);
|
List<ActiveVoiceRoom> listDiscover(String sysOrigin, boolean isAllRegion, String region, String countryCode, Integer limit);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取区域房间.
|
* 获取区域房间.
|
||||||
|
|||||||
@ -133,7 +133,7 @@ public class ActiveVoiceRoomServiceImpl implements ActiveVoiceRoomService {
|
|||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<ActiveVoiceRoom> listDiscover(String sysOrigin, boolean isAllRegion, String region, Integer limit) {
|
public List<ActiveVoiceRoom> listDiscover(String sysOrigin, boolean isAllRegion, String region, String countryCode, Integer limit) {
|
||||||
// 区域隔离
|
// 区域隔离
|
||||||
Set<String> userRegionGroup = getRegionGroup(region);
|
Set<String> userRegionGroup = getRegionGroup(region);
|
||||||
Set<String> excludeRegions = userRegionGroup == null ? ALL_SPECIAL_REGIONS : getExcludeRegionsForGroup(userRegionGroup);
|
Set<String> excludeRegions = userRegionGroup == null ? ALL_SPECIAL_REGIONS : getExcludeRegionsForGroup(userRegionGroup);
|
||||||
@ -148,6 +148,10 @@ public class ActiveVoiceRoomServiceImpl implements ActiveVoiceRoomService {
|
|||||||
if (userRegionGroup == null && !isAllRegion) {
|
if (userRegionGroup == null && !isAllRegion) {
|
||||||
criteria.and("region").nin(excludeRegions);
|
criteria.and("region").nin(excludeRegions);
|
||||||
}
|
}
|
||||||
|
// SA_REGIONS 用户只能看到相同国家的房间
|
||||||
|
if (SA_REGIONS.contains(region) && !isAllRegion && StringUtils.isNotBlank(countryCode)) {
|
||||||
|
criteria.and("countryCode").is(countryCode);
|
||||||
|
}
|
||||||
Aggregation aggregation = Aggregation.newAggregation(
|
Aggregation aggregation = Aggregation.newAggregation(
|
||||||
// 1. 匹配国家(可选条件)
|
// 1. 匹配国家(可选条件)
|
||||||
Aggregation.match(criteria),
|
Aggregation.match(criteria),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user