fix: use stable rtc active bitmap offset
This commit is contained in:
parent
f6995c519a
commit
2ec48cab6b
@ -26,11 +26,11 @@ import com.red.circle.tool.core.date.DateUtils;
|
|||||||
import com.red.circle.tool.core.date.TimestampUtils;
|
import com.red.circle.tool.core.date.TimestampUtils;
|
||||||
import com.red.circle.tool.core.parse.DataTypeUtils;
|
import com.red.circle.tool.core.parse.DataTypeUtils;
|
||||||
import com.red.circle.tool.core.sequence.IdWorkerUtils;
|
import com.red.circle.tool.core.sequence.IdWorkerUtils;
|
||||||
import com.red.circle.wallet.inner.endpoint.wallet.WalletGoldClient;
|
import com.red.circle.wallet.inner.endpoint.wallet.WalletGoldClient;
|
||||||
import java.sql.Timestamp;
|
import java.sql.Timestamp;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
@ -108,21 +108,59 @@ public class OnlineStatusUploadListener implements MessageListener {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void countActiveUser(UserProfile userProfile) {
|
private void countActiveUser(UserProfile userProfile) {
|
||||||
long account = Objects.hash(userProfile.getAccount());
|
Long bitmapOffset = resolveActiveUserBitmapOffset(userProfile);
|
||||||
if (userProfileGateway.checkTeamMember(userProfile.getId())) {
|
if (Objects.isNull(bitmapOffset) || bitmapOffset <= 0) {
|
||||||
countUserActiveIndexService.countAnchorActiveUser(account);
|
log.warn("[在线状态]跳过活跃bitmap统计, userId={}, account={}, actualAccount={}",
|
||||||
countUserActiveIndexService.countAnchorActiveUser(userProfile.getOriginSys(), account);
|
userProfile.getId(),
|
||||||
return;
|
userProfile.getAccount(),
|
||||||
}
|
userProfile.getActualAccount());
|
||||||
|
return;
|
||||||
countUserActiveIndexService.countOrdinaryActiveUser(account);
|
}
|
||||||
countUserActiveIndexService.countOrdinaryActiveUser(userProfile.getOriginSys(), account);
|
if (userProfileGateway.checkTeamMember(userProfile.getId())) {
|
||||||
}
|
countUserActiveIndexService.countAnchorActiveUser(bitmapOffset);
|
||||||
|
countUserActiveIndexService.countAnchorActiveUser(userProfile.getOriginSys(), bitmapOffset);
|
||||||
private void addOnlineUser(UserOnlineStatusEvent event, UserProfile userProfile) {
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
countUserActiveIndexService.countOrdinaryActiveUser(bitmapOffset);
|
||||||
|
countUserActiveIndexService.countOrdinaryActiveUser(userProfile.getOriginSys(), bitmapOffset);
|
||||||
|
}
|
||||||
|
|
||||||
|
static Long resolveActiveUserBitmapOffset(UserProfile userProfile) {
|
||||||
|
if (Objects.isNull(userProfile)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
Long offset = parsePositiveLong(userProfile.getAccount());
|
||||||
|
if (Objects.nonNull(offset)) {
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
offset = parsePositiveLong(userProfile.getActualAccount());
|
||||||
|
if (Objects.nonNull(offset)) {
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Optional.ofNullable(userProfile.getId())
|
||||||
|
.filter(id -> id > 0)
|
||||||
|
.orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Long parsePositiveLong(String value) {
|
||||||
|
if (StringUtils.isBlank(value)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
long parsed = Long.parseLong(value.trim());
|
||||||
|
return parsed > 0 ? parsed : null;
|
||||||
|
} catch (NumberFormatException ignore) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addOnlineUser(UserOnlineStatusEvent event, UserProfile userProfile) {
|
||||||
if (StringUtils.isBlank(event.getSessionId())) {
|
if (StringUtils.isBlank(event.getSessionId())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,52 @@
|
|||||||
|
package com.red.circle.other.app.listener.user;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||||
|
|
||||||
|
import com.red.circle.other.domain.model.user.OwnSpecialId;
|
||||||
|
import com.red.circle.other.domain.model.user.UserProfile;
|
||||||
|
import com.red.circle.tool.core.date.TimestampUtils;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
class OnlineStatusUploadListenerTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void resolveActiveUserBitmapOffset_shouldUseNumericAccount() {
|
||||||
|
UserProfile profile = new UserProfile();
|
||||||
|
profile.setId(9988L);
|
||||||
|
profile.setAccount("123456");
|
||||||
|
|
||||||
|
assertEquals(123456L, OnlineStatusUploadListener.resolveActiveUserBitmapOffset(profile));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void resolveActiveUserBitmapOffset_shouldFallbackToNumericSpecialAccount() {
|
||||||
|
UserProfile profile = new UserProfile();
|
||||||
|
profile.setId(9988L);
|
||||||
|
profile.setAccount("abc");
|
||||||
|
OwnSpecialId ownSpecialId = new OwnSpecialId();
|
||||||
|
ownSpecialId.setAccount("654321");
|
||||||
|
ownSpecialId.setExpiredTime(TimestampUtils.nowPlusDays(1));
|
||||||
|
profile.setOwnSpecialId(ownSpecialId);
|
||||||
|
|
||||||
|
assertEquals(654321L, OnlineStatusUploadListener.resolveActiveUserBitmapOffset(profile));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void resolveActiveUserBitmapOffset_shouldFallbackToUserIdWhenAccountIsNotNumeric() {
|
||||||
|
UserProfile profile = new UserProfile();
|
||||||
|
profile.setId(9988L);
|
||||||
|
profile.setAccount("abc");
|
||||||
|
|
||||||
|
assertEquals(9988L, OnlineStatusUploadListener.resolveActiveUserBitmapOffset(profile));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void resolveActiveUserBitmapOffset_shouldReturnNullWhenNoPositiveCandidateExists() {
|
||||||
|
UserProfile profile = new UserProfile();
|
||||||
|
profile.setId(0L);
|
||||||
|
profile.setAccount("abc");
|
||||||
|
|
||||||
|
assertNull(OnlineStatusUploadListener.resolveActiveUserBitmapOffset(profile));
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user