Quellcode durchsuchen

fix: 风控配置接口补充默认查询全局风控配置

hidewnd vor 3 Tagen
Ursprung
Commit
7575af5272

+ 1 - 0
yt-common/src/main/java/com/ytpm/risk/view/RiskTemplateVo.java

@@ -39,6 +39,7 @@ public class RiskTemplateVo {
         if (this.riskTemplateView != null) {
             this.riskCode = getRiskCode(riskTemplateView);
             this.configMap = getRsikConfigMap(riskTemplateView);
+            this.timing = riskTemplateView.getTiming();
         }
     }
 

+ 27 - 10
yt-ios-lemon/lemon-ios-service/src/main/java/com/ytpm/lemonios/handle/RiskContent.java

@@ -56,6 +56,11 @@ public class RiskContent implements CommandLineRunner {
      */
     public static final String RISK_TIMING_AD = "AD";
 
+    /**
+     * 登陆 全局风控
+     */
+    public static final String GLOBAL_LOGIN_RISK_CODE = "global_login";
+
     @Resource
     private RiskFeign riskFeign;
     @Resource
@@ -89,20 +94,26 @@ public class RiskContent implements CommandLineRunner {
             if (CollUtil.isEmpty(appIds)) {
                 return;
             }
-            Result<List<RiskTemplateView>> riskList = riskFeign.getRiskList(String.join(",", appIds));
-            if (riskList != null && riskList.getData() != null) {
-                for (RiskTemplateView datum : riskList.getData()) {
+            Result<List<RiskTemplateView>> result = riskFeign.getRiskList(String.join(",", appIds));
+            List<String> globalsRiskCodes = Arrays.asList("313", "322");
+            if (result != null && result.getData() != null) {
+                localRiskMap.clear();
+                for (RiskTemplateView datum : result.getData()) {
                     if (StrUtil.isEmpty(datum.getTiming())) {
                         continue;
                     }
-                    List<RiskTemplateVo> templateViews = localRiskMap.get(datum.getAppId());
+                    RiskTemplateVo templateVo = new RiskTemplateVo(datum);
+                    String mapKey = datum.getAppId();
+                    if (globalsRiskCodes.contains(templateVo.getRiskCode())) {
+                        mapKey = GLOBAL_LOGIN_RISK_CODE;
+                    }
+                    List<RiskTemplateVo> templateViews = localRiskMap.get(mapKey);
                     if (templateViews == null) {
                         templateViews = new ArrayList<>();
                     }
-                    RiskTemplateVo templateVo = new RiskTemplateVo(datum);
                     templateVo.setValidateParams(datum.getValidateParams());
                     templateViews.add(templateVo);
-                    localRiskMap.put(datum.getAppId(), templateViews);
+                    localRiskMap.put(mapKey, templateViews);
                 }
                 log.info("[RiskContent]已拉取最新风控配置");
             }
@@ -201,10 +212,16 @@ public class RiskContent implements CommandLineRunner {
         List<RiskTemplateVo> list = new ArrayList<>();
         List<RiskTemplateVo> views = localRiskMap.get(appId);
         if (CollUtil.isNotEmpty(views)) {
-            list = views.stream()
-                    .filter(view -> StrUtil.equals(view.getTiming(), timing))
-                    .collect(Collectors.toList());
+            list.addAll(views);
+        }
+        if (RISK_TIMING_LOGIN.equals(timing)) {
+            List<RiskTemplateVo> globals = localRiskMap.get(GLOBAL_LOGIN_RISK_CODE);
+            if (CollUtil.isNotEmpty(globals)) {
+                list.addAll(globals);
+            }
         }
-        return list;
+        return list.stream()
+                .filter(view -> StrUtil.equals(view.getTiming(), timing))
+                .collect(Collectors.toList());
     }
 }

+ 5 - 0
yt-risk/risk-manage/src/main/java/com/ytpm/service/impl/RiskCheckServiceImpl.java

@@ -82,6 +82,11 @@ public class RiskCheckServiceImpl implements RiskCheckService {
     public Result<List<RiskTemplateView>> getRiskList(String appIds) {
         List<RiskTemplateView> list = new ArrayList<>();
         List<RiskTemplateView> templateViews = configMapper.getTemplateByAppIds(appIds);
+        // 查询全局风控配置
+        List<RiskTemplateView> globals = configMapper.getEnableRiskByCodes(Arrays.asList("313", "322"));
+        if (CollUtil.isNotEmpty(globals)) {
+            templateViews.addAll(globals);
+        }
         if (CollUtil.isNotEmpty(templateViews)) {
             for (RiskTemplateView templateView : templateViews) {
                 if (templateView.getEnabled() == null || templateView.getEnabled() != 1) {

+ 8 - 2
yt-risk/risk-manage/src/main/java/com/ytpm/strategy/AbstractRiskStrategy.java

@@ -1,5 +1,6 @@
 package com.ytpm.strategy;
 
+import com.alibaba.fastjson.JSONObject;
 import com.ytpm.app.model.YtDyzUser;
 import com.ytpm.risk.view.RiskTemplateVo;
 import lombok.extern.slf4j.Slf4j;
@@ -98,9 +99,14 @@ public abstract class AbstractRiskStrategy implements RiskStrategy {
         for (Object item : rawList) {
             if (elementClazz.isInstance(item)) {
                 resultList.add(elementClazz.cast(item));
-            } else {
-                throw new IllegalArgumentException("List元素类型不匹配,期望:" + elementClazz.getName());
+                continue;
             }
+            if (item instanceof Map) {
+                T obj = JSONObject.parseObject(JSONObject.toJSONString(item), elementClazz);
+                resultList.add(obj);
+                continue;
+            }
+            throw new IllegalArgumentException("List元素类型不匹配,期望:" + elementClazz.getName());
         }
         return resultList;
     }

+ 1 - 1
yt-risk/risk-manage/src/main/java/com/ytpm/strategy/Risk313Strategy.java

@@ -15,7 +15,7 @@ import java.util.stream.Collectors;
 
 /**
  * /**
- * 风控策略313: <br>
+ * 全局风控策略313: <br>
  * 登录检查默认风控配置: {}天内,IP前4段,同IP登录数量为>{} <br>
  * params:
  *

+ 1 - 1
yt-risk/risk-manage/src/main/java/com/ytpm/strategy/Risk322Strategy.java

@@ -18,7 +18,7 @@ import java.util.Map;
 import java.util.Set;
 
 /**
- * 风控策略322: <br>
+ * 全局风控策略322: <br>
  * 渠道刷单限制: 3天内,字段APP_ID相同,生成UID数为<2 <br>
  * params:
  * sameDeviceUsers: 相同设备ID用户