南亚区国家区分处理
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.service.game.GameLudoService;
|
||||
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.UserSVipGateway;
|
||||
import com.red.circle.other.domain.model.user.UserProfile;
|
||||
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.mongo.entity.live.ActiveVoiceRoom;
|
||||
@ -60,6 +62,7 @@ public class RoomVoiceDiscoverQryExe {
|
||||
private final RedisTemplate<String, Object> redisTemplate;
|
||||
private final RocketStatusCacheService rocketStatusCacheService;
|
||||
private final GameLudoService gameLudoService;
|
||||
private final UserProfileGateway userProfileGateway;
|
||||
|
||||
private static final String EMPTY_ROOM_CACHE_KEY = "empty_room_cache:*";
|
||||
|
||||
@ -71,6 +74,7 @@ public class RoomVoiceDiscoverQryExe {
|
||||
|
||||
public List<RoomVoiceProfileCO> execute(AppExtCommand cmd) {
|
||||
String region = cmd.isAllRegion() ? "ALL" : userRegionGateway.getRegionCode(cmd.requiredReqUserId());
|
||||
UserProfile userProfile = userProfileGateway.getByUserId(cmd.requiredReqUserId());
|
||||
|
||||
String key = cmd.requireReqSysOrigin() + region;
|
||||
String regionsRoom = regionRoomCacheService.getRegionsRoom(key);
|
||||
@ -79,28 +83,24 @@ public class RoomVoiceDiscoverQryExe {
|
||||
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();
|
||||
if (CollectionUtils.isNotEmpty(emptyRooms)) {
|
||||
// 按照listDiscover的过滤规则过滤空房间
|
||||
List<ActiveVoiceRoom> matchedEmptyRooms = filterEmptyRoomsByRegion(emptyRooms, cmd.requireReqSysOrigin(), cmd.isAllRegion(), region);
|
||||
List<ActiveVoiceRoom> matchedEmptyRooms = filterEmptyRoomsByRegion(emptyRooms, cmd.requireReqSysOrigin(), cmd.isAllRegion(), region, userCountryCode);
|
||||
if (CollectionUtils.isNotEmpty(matchedEmptyRooms)) {
|
||||
// 创建新的可修改列表,合并活跃房间和空房间,并去重
|
||||
List<ActiveVoiceRoom> allRooms = new ArrayList<>(activeVoiceRooms);
|
||||
// 获取已存在的房间ID
|
||||
Set<Long> existingRoomIds = activeVoiceRooms.stream()
|
||||
.map(ActiveVoiceRoom::getId)
|
||||
.collect(Collectors.toSet());
|
||||
// 只添加不存在的空房间
|
||||
matchedEmptyRooms.stream()
|
||||
.filter(room -> !existingRoomIds.contains(room.getId()))
|
||||
.forEach(allRooms::add);
|
||||
activeVoiceRooms = allRooms;
|
||||
}
|
||||
}
|
||||
log.info("activeVoiceRooms:{}", JSON.toJSONString(activeVoiceRooms));
|
||||
List<RoomVoiceProfileCO> roomList = roomVoiceProfileCommon.toListRoomVoiceProfileCO(activeVoiceRooms);
|
||||
|
||||
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()
|
||||
.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());
|
||||
}
|
||||
|
||||
|
||||
@ -37,7 +37,7 @@ public class EmptyRoomCleanTask {
|
||||
public void cleanEmptyRooms() {
|
||||
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)) {
|
||||
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
|
||||
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> excludeRegions = userRegionGroup == null ? ALL_SPECIAL_REGIONS : getExcludeRegionsForGroup(userRegionGroup);
|
||||
@ -148,6 +148,10 @@ public class ActiveVoiceRoomServiceImpl implements ActiveVoiceRoomService {
|
||||
if (userRegionGroup == null && !isAllRegion) {
|
||||
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(
|
||||
// 1. 匹配国家(可选条件)
|
||||
Aggregation.match(criteria),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user