Browse Source

企业黑名单同步

yaodaoseng 2 weeks ago
parent
commit
812801d301

+ 1 - 1
risk-control-core/src/main/java/com/tzld/piaoquan/risk/control/service/sync/job/BlacklistSyncJobHandler.java → risk-control-core/src/main/java/com/tzld/piaoquan/risk/control/job/BlacklistSyncJobHandler.java

@@ -1,4 +1,4 @@
-package com.tzld.piaoquan.risk.control.service.sync.job;
+package com.tzld.piaoquan.risk.control.job;
 
 import com.tzld.piaoquan.risk.control.service.sync.BlacklistSyncService;
 import com.tzld.piaoquan.risk.control.service.sync.config.ApolloConfigService;

+ 7 - 0
risk-control-core/src/main/java/com/tzld/piaoquan/risk/control/service/CorpBlacklistService.java

@@ -55,4 +55,11 @@ public interface CorpBlacklistService {
      * @return true表示移除成功,false表示用户不在黑名单中
      */
     boolean removeFromCorpBlacklist(Long vid, Long corpId);
+
+    /**
+     * 根据uuid查询corp_id
+     * @param uuid
+     * @return
+     */
+    Long getCorpIdByUuid(String uuid);
 }

+ 49 - 11
risk-control-core/src/main/java/com/tzld/piaoquan/risk/control/service/impl/CorpBlacklistServiceImpl.java

@@ -1,8 +1,11 @@
 package com.tzld.piaoquan.risk.control.service.impl;
 
 import com.tzld.piaoquan.risk.control.dao.mapper.QywxCorpBlacklistUserMapper;
+import com.tzld.piaoquan.risk.control.dao.mapper.UserBaseMapper;
 import com.tzld.piaoquan.risk.control.model.po.QywxCorpBlacklistUser;
 import com.tzld.piaoquan.risk.control.model.po.QywxCorpBlacklistUserExample;
+import com.tzld.piaoquan.risk.control.model.po.UserBase;
+import com.tzld.piaoquan.risk.control.model.po.UserBaseExample;
 import com.tzld.piaoquan.risk.control.service.CorpBlacklistService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -26,6 +29,9 @@ public class CorpBlacklistServiceImpl implements CorpBlacklistService {
     
     @Autowired
     private QywxCorpBlacklistUserMapper corpBlacklistUserMapper;
+
+    @Autowired
+    private UserBaseMapper userBaseMapper;
     
     /**
      * 根据vid和corpId查询拉黑时间
@@ -53,15 +59,14 @@ public class CorpBlacklistServiceImpl implements CorpBlacklistService {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void addToCorpBlacklist(Long vid, Long corpId) {
-        if (vid == null || corpId == null) {
-            throw new IllegalArgumentException("用户VID和企业ID不能为空");
-        }
-        
-        if (vid <= 0 || corpId <= 0) {
-            throw new IllegalArgumentException("用户VID和企业ID必须是有效的正数");
-        }
-        
         try {
+            if (vid == null || corpId == null) {
+                throw new IllegalArgumentException("用户VID和企业ID不能为空");
+            }
+
+            if (vid <= 0 || corpId <= 0) {
+                throw new IllegalArgumentException("用户VID和企业ID必须是有效的正数");
+            }
             // 检查是否已存在
             if (isInCorpBlacklist(vid, corpId)) {
                 throw new RuntimeException("用户已在该企业黑名单中,VID: " + vid + ", CorpId: " + corpId);
@@ -83,11 +88,8 @@ public class CorpBlacklistServiceImpl implements CorpBlacklistService {
                 throw new RuntimeException("添加用户到企业黑名单失败,数据库操作无效");
             }
             
-        } catch (RuntimeException e) {
-            throw e;
         } catch (Exception e) {
             log.error("Unexpected error while adding user to corp blacklist, vid: {}, corpId: {}", vid, corpId, e);
-            throw new RuntimeException("添加用户到企业黑名单时发生系统异常", e);
         }
     }
     
@@ -179,4 +181,40 @@ public class CorpBlacklistServiceImpl implements CorpBlacklistService {
             throw new RuntimeException("从企业黑名单移除用户失败", e);
         }
     }
+
+    /**
+     * 根据uuid查询corp_id
+     * @param uuid
+     * @return
+     */
+    @Override
+    public Long getCorpIdByUuid(String uuid) {
+        // 从qywx_user_base表根据uuid查询corp_id
+        if (uuid == null || uuid.trim().isEmpty()) {
+            log.warn("getCorpIdByUuid called with null or empty uuid");
+            return null;
+        }
+
+        try {
+            UserBaseExample example = new UserBaseExample();
+            example.createCriteria().andUuidEqualTo(uuid);
+
+            List<UserBase> users = userBaseMapper.selectByExample(example);
+
+            if (users.isEmpty()) {
+                log.warn("No user found for uuid: {}", uuid);
+                return null;
+            }
+
+            UserBase user = users.get(0);
+            Long corpId = user.getCorpId();
+
+            log.debug("Found corpId: {} for uuid: {}", corpId, uuid);
+            return corpId;
+
+        } catch (Exception e) {
+            log.error("Failed to get corpId for uuid: {}", uuid, e);
+            return null;
+        }
+    }
 }

+ 8 - 0
risk-control-core/src/main/java/com/tzld/piaoquan/risk/control/service/impl/RiskUserHandleService.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.TypeReference;
 import com.tzld.piaoquan.risk.control.config.QywxConfig;
 import com.tzld.piaoquan.risk.control.model.po.UserBase;
 import com.tzld.piaoquan.risk.control.model.qywx.*;
+import com.tzld.piaoquan.risk.control.service.CorpBlacklistService;
 import com.tzld.piaoquan.risk.control.util.HttpClientUtil;
 import com.tzld.piaoquan.risk.control.util.HttpPoolClient;
 import lombok.extern.slf4j.Slf4j;
@@ -28,6 +29,8 @@ public class RiskUserHandleService {
     @Autowired
     private RiskRuleConfigService riskRuleConfigService;
 
+    private CorpBlacklistService corpBlacklistService;
+
     @Value("${qywx.corpid}")
     private String corpid;
     @Value("${qywx.scorpid}")
@@ -69,6 +72,11 @@ public class RiskUserHandleService {
                         if(ruleResult.isNormalCountEnough && !ruleResult.isAbnormalRatioHighEnough) {//正常进入用户满足需求,且异常率符合阈值
                             boolean success = riskUserOperateService.kick(staff,Long.parseLong(roomInfo.getRoomId()),externalVid);
                             if (success) {
+                                String uuid = staff.getUuid();
+                                // 加入黑名单
+                                // 根据 uuid 获取 corp_id
+                                Long corpId = corpBlacklistService.getCorpIdByUuid(uuid);
+                                corpBlacklistService.addToCorpBlacklist(externalVid, corpId);
                                 log.info("handleRiskUser to be kick user, vid: {},name: {},chatId: {},chatName:{} ", externalVid,riskUserInfo.getExternalNickname(),riskUserInfo.getChatId(),riskUserInfo.getGroupName());
                                 return 1;
                             }

+ 3 - 36
risk-control-core/src/main/java/com/tzld/piaoquan/risk/control/service/impl/RiskUserOperateService.java

@@ -126,7 +126,7 @@ public class RiskUserOperateService {
             // 根据 vid 判断是否在企业黑名单中
             if ( !inBlacklist ) {
                 // 根据 uuid 查询 corp_id
-                Long corpId = getCorpIdByUuid(uuid);
+                Long corpId = corpBlacklistService.getCorpIdByUuid(uuid);
                 // 根据 corp_id 和 vid判断是否在企业黑名单中
                 if( corpBlacklistService.isInCorpBlacklist(vid, corpId)) {
                     LOGGER.info("quickKick, vid: {} is in corp blacklist", vid);
@@ -149,6 +149,8 @@ public class RiskUserOperateService {
                 QwCommonResModel<RoomListResponse> roomInfo = QwCommonResModel.parseResponse(response.get(), RoomListResponse.class);
                 if (roomInfo.getErrcode() == 0) {
                     LOGGER.info("quick Kick external user {} successfully,timestamp {}", vid,System.currentTimeMillis());
+                    // 加入黑名单
+                    corpBlacklistService.addToCorpBlacklist( vid, corpid);
                     return true;
                 } else {
                     LOGGER.error("Failed to kick external user {} f: {},", vid, roomInfo.getErrmsg());
@@ -161,41 +163,6 @@ public class RiskUserOperateService {
         return false;
     }
 
-    /**
-     * 根据uuid查询corp_id
-     * @param uuid
-     * @return
-     */
-    private Long getCorpIdByUuid(String uuid) {
-        // 从qywx_user_base表根据uuid查询corp_id
-        if (uuid == null || uuid.trim().isEmpty()) {
-            LOGGER.warn("getCorpIdByUuid called with null or empty uuid");
-            return null;
-        }
-
-        try {
-            UserBaseExample example = new UserBaseExample();
-            example.createCriteria().andUuidEqualTo(uuid);
-
-            List<UserBase> users = userBaseMapper.selectByExample(example);
-
-            if (users.isEmpty()) {
-                LOGGER.warn("No user found for uuid: {}", uuid);
-                return null;
-            }
-
-            UserBase user = users.get(0);
-            Long corpId = user.getCorpId();
-
-            LOGGER.debug("Found corpId: {} for uuid: {}", corpId, uuid);
-            return corpId;
-
-        } catch (Exception e) {
-            LOGGER.error("Failed to get corpId for uuid: {}", uuid, e);
-            return null;
-        }
-    }
-
     public boolean checkAndKickExternalUser(UserBase staff,RiskUserInfo riskUserInfo,long vid,long roomId) {
         LOGGER.info("checkAndKickExternalUser, staff: {}, riskUserInfo: {}, vid: {}, roomId: {}", staff, riskUserInfo, vid, roomId);
         boolean inRoom = isInRoom(staff, roomId, vid);

+ 1 - 1
risk-control-server/src/main/java/com/tzld/piaoquan/risk/control/controller/ReceiveRiskInfoController.java

@@ -29,7 +29,7 @@ public class ReceiveRiskInfoController {
 
     /**
      * 接收风控用户信息
-     * @param userInfo 风控用户信息
+     * @param rawJson 风控用户信息
      * @return CommonResponse
      */
     @UnAuth