소스 검색

成员去重,多次加入会有多条,只取最新时间的一条

刘立冬 1 개월 전
부모
커밋
61459035ec
1개의 변경된 파일15개의 추가작업 그리고 4개의 파일을 삭제
  1. 15 4
      risk-control-core/src/main/java/com/tzld/piaoquan/risk/control/service/impl/RiskRuleConfigService.java

+ 15 - 4
risk-control-core/src/main/java/com/tzld/piaoquan/risk/control/service/impl/RiskRuleConfigService.java

@@ -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();