|
@@ -18,6 +18,7 @@ import java.text.ParseException;
|
|
|
import java.text.SimpleDateFormat;
|
|
|
import java.time.Instant;
|
|
|
import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
@Slf4j
|
|
|
@Service
|
|
@@ -72,12 +73,22 @@ public class RiskRuleConfigService {
|
|
|
long roomUpdateTime = roomInfo.getUpdateTime().getTime()/1000;
|
|
|
log.info("getFixedRulesForThisChat, roomId: {}, roomUpdateTime: {}", roomId, roomUpdateTime);
|
|
|
List<UserListFromAdPlatformModel.ChatMember> memberList = getUserListFromAdPlatform(chatId);
|
|
|
- if (memberList == null || memberList.isEmpty()) {
|
|
|
+ List<UserListFromAdPlatformModel.ChatMember> distinctMembers = memberList.stream()
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ UserListFromAdPlatformModel.ChatMember::getExternalId, // key: externalId
|
|
|
+ member -> member, // value: ChatMember 对象
|
|
|
+ (existing, replacement) -> // 合并策略:取 joinTime 更大的那条
|
|
|
+ existing.getJoinTime() > replacement.getJoinTime() ? existing : replacement
|
|
|
+ ))
|
|
|
+ .values() // 获取去重后的成员列表
|
|
|
+ .stream()
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ if (distinctMembers == null || distinctMembers.isEmpty()) {
|
|
|
log.error("checkIfOpenedForFixedRules, memberList is empty for chatId: {}", chatId);
|
|
|
return ruleResult;
|
|
|
} else {
|
|
|
// 打印所有成员的joinTime和roomUpdateTime用于调试
|
|
|
- memberList.forEach(member -> {
|
|
|
+ distinctMembers.forEach(member -> {
|
|
|
if (member.getJoinTime() != null) {
|
|
|
log.info(
|
|
|
"Member ID: " + member.getNickName() +
|
|
@@ -90,11 +101,11 @@ public class RiskRuleConfigService {
|
|
|
}
|
|
|
});
|
|
|
//开关开启后的加入的数量
|
|
|
- int size = (int) memberList.stream()
|
|
|
+ int size = (int) distinctMembers.stream()
|
|
|
.filter(member -> member.getJoinTime() != null && member.getJoinTime() > roomUpdateTime)
|
|
|
.count();;//群总数,包括异常和正常
|
|
|
//memberList中isAbnormal是0代表正常用户,判断joinTime是否大于updateTime
|
|
|
- int normalSize = (int) memberList.stream()
|
|
|
+ int normalSize = (int) distinctMembers.stream()
|
|
|
.filter(member -> member.getIsAbnormal() == 0).filter(
|
|
|
member -> member.getJoinTime() != null && member.getJoinTime() > roomUpdateTime)
|
|
|
.count();
|