Ver Fonte

feat: 增加游客登陆注册风控规则初始化逻辑

hidewnd há 2 meses atrás
pai
commit
b4a24168cd

+ 3 - 3
yt-adage/adage-service/src/main/java/com/ytpm/adage/service/impl/VisitorLoginServiceImpl.java

@@ -150,8 +150,8 @@ public class VisitorLoginServiceImpl extends AbstractLoginService  {
     }
 
     @Override
-    protected void afterVisitorRegistryUser(YtDyzUser ytDyzUser) {
-        super.afterVisitorRegistryUser(ytDyzUser);
+    protected void afterVisitorRegistryUser(LoginParam loginParam, YtDyzUser ytDyzUser) {
+        super.afterVisitorRegistryUser(loginParam, ytDyzUser);
         checkEcPmAndRevenue(ytDyzUser);
     }
 
@@ -163,7 +163,7 @@ public class VisitorLoginServiceImpl extends AbstractLoginService  {
 
     /**
      * 新增风控 相关广告源记录 ecpm  和预估收益 小于 各自 阈值,登陆返回 301
-     * @param ytDyzUser
+     * @param ytDyzUser 登陆用户信息
      */
     private void checkEcPmAndRevenue(YtDyzUser ytDyzUser){
         Result<?> result = riskFeign.checkVisitorLogin(ytDyzUser);

+ 13 - 9
yt-common/src/main/java/com/ytpm/app/param/LoginParam.java

@@ -5,7 +5,7 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 /**
- * 基础登陆
+ * 基础登陆参数
  * @author lih
  * @date 2025/9/3
  */
@@ -14,6 +14,18 @@ public class LoginParam {
     @ApiModelProperty(value = "手机号")
     private String phone;
 
+    @ApiModelProperty(value = "手机品牌")
+    private String brand;
+
+    @ApiModelProperty(value = "手机型号")
+    private String model;
+
+    @ApiModelProperty(value = "手机别名")
+    private String alias;
+
+    @ApiModelProperty(value = "手机信息json")
+    private String phoneJson;
+
     @ApiModelProperty(value = "登录IP")
     private String loginIp;
 
@@ -35,13 +47,5 @@ public class LoginParam {
     @ApiModelProperty(value = "设备ID", required = false)
     private String deviceId;
 
-    @ApiModelProperty(value = "手机品牌")
-    private String brand;
-
-    @ApiModelProperty(value = "手机型号")
-    private String model;
-
-    @ApiModelProperty(value = "手机信息json")
-    private String phoneJson;
 
 }

+ 18 - 0
yt-common/src/main/java/com/ytpm/app/param/VisitorLoginParam.java

@@ -0,0 +1,18 @@
+package com.ytpm.app.param;
+
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * @author lih
+ * @date 2025/9/8
+ */
+@Data
+@ApiModel("游客登录参数")
+@EqualsAndHashCode(callSuper = false)
+public class VisitorLoginParam extends LoginParam{
+
+
+}

+ 8 - 3
yt-common/src/main/java/com/ytpm/handle/AbstractLoginService.java

@@ -17,7 +17,12 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.util.CollectionUtils;
 
 import javax.servlet.http.HttpServletRequest;
-import java.util.*;
+import java.util.Comparator;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Objects;
+import java.util.Map;
 import java.util.stream.Collectors;
 
 /**
@@ -129,7 +134,7 @@ public abstract class AbstractLoginService {
             ytDyzUser = new YtDyzUser();
             registryUser(loginParam, ytDyzUser, paramMap);
             //注册后回调
-            afterVisitorRegistryUser(ytDyzUser);
+            afterVisitorRegistryUser(loginParam, ytDyzUser);
         } else {
             // 查询当前设备当前渠道是否存在该用户
             ytDyzUser = queryUserByDeviceAndDitch(loginParam.getDeviceId(), loginParam.getDitchId());
@@ -148,7 +153,7 @@ public abstract class AbstractLoginService {
         return ytDyzUser;
     }
 
-    protected void afterVisitorRegistryUser(YtDyzUser ytDyzUser) {
+    protected void afterVisitorRegistryUser(LoginParam loginParam, YtDyzUser ytDyzUser) {
 
     }
 

+ 112 - 52
yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/impl/ApkServiceImpl.java

@@ -84,6 +84,11 @@ public class ApkServiceImpl implements ApkService {
     @Value("${risk.config.visitor.initRevenueLimit:0.5}")
     private String initVisitorRevenueLimit;
 
+    @Value(("${risk.config.visitor.initHours:1}"))
+    private String initVisitorHours;
+    @Value(("${risk.config.visitor.initRidCount:10}"))
+    private String initVisitorRidCount;
+
     @Autowired
     private FeignClientInvoker feignInvoker;
     @Autowired
@@ -204,7 +209,9 @@ public class ApkServiceImpl implements ApkService {
     private void generateRiskDefaultConfig(AppParam param,MiddleUserInfo loginUser) {
         addTemp742(param,loginUser);
         addTemp746(param,loginUser);
-        // 游客登陆风控校验
+        // 游客用户风控
+        addTemp323(param, loginUser);
+        addTemp333(param, loginUser);
         addTemp344(param, loginUser);
         // 平均收益风控
         addTemp766(param, loginUser);
@@ -213,42 +220,107 @@ public class ApkServiceImpl implements ApkService {
         addTemp768(param, loginUser);
     }
 
-    private void addTemp344(AppParam param, MiddleUserInfo loginUser) {
-        // 风控规则 游客模式用户开屏广告累计ecpm<{}
-        // 风控规则 游客模式用户开屏广告累计预估收益<{}
-        // 风控规则 游客模式用户横幅累计ecpm<{}
-        // 风控规则 游客模式用户横幅累计预估收益<{}
-        // 风控规则 游客模式用户原生(信息流)累计ecpm<{}
-        // 风控规则 游客模式用户原生(信息流)累计预估收益<{}
+    /**
+     * 创建输出框类型配置项
+     */
+    private YtRiskConfig createRiskConfig(String agentId, String fieldName, String filedDesc, String initVal, Integer multi){
+        String configId = IdUtil.getSnowflakeNextIdStr();
+        YtRiskConfig config = new YtRiskConfig(configId, agentId, fieldName, filedDesc, 1, initVal, multi);
+        riskMapper.insertConfigItem(config);
+        return config;
+    }
+
+    /**
+     * 绑定模板配置项
+     */
+    private void bindTempConfig(MiddleUserInfo loginUser, YtRiskTemplate template, List<YtRiskConfig> configs) {
+        YtRiskTemplateConfig templateConfig;
+        Date currentDate = new Date();
+        for (YtRiskConfig config : configs) {
+            templateConfig = new YtRiskTemplateConfig(template.getTemplateId(), config.getConfigId(),
+                    loginUser.getUserId(), loginUser.getNickName(), currentDate);
+            riskMapper.insertTempConfig(templateConfig);
+        }
+    }
+
+    private void addTemp333(AppParam param, MiddleUserInfo loginUser) {
+        // 风控规则 设备在{}小时内注册的渠道数>={}
         String appId = param.getAppId();
         String agentId = param.getUserId();
         Date currentDate = new Date();
-        List<YtRiskConfig> configIds = new ArrayList<>();
-        createTemp344ByAdType(param, configIds, "0", "信息流");
-        createTemp344ByAdType(param, configIds, "2", "横幅");
-        createTemp344ByAdType(param, configIds, "4", "开屏");
+        List<YtRiskConfig> configs = new ArrayList<>();
+        YtRiskConfig riskConfig = createRiskConfig(param.getUserId(), "hours",
+                StrUtil.format("{}小时内,", initVisitorHours), initVisitorHours, 2);
+        configs.add(riskConfig);
+        riskConfig = createRiskConfig(param.getUserId(),  "uidCount",
+                StrUtil.format("游客注册的渠道数<{}", initVisitorRidCount), initVisitorRidCount, 3);
+        configs.add(riskConfig);
+        String templateId = IdUtil.getSnowflakeNextIdStr();
+        YtRiskTemplate template = new YtRiskTemplate(templateId, "游客注册限制",
+                StrUtil.format("{}小时内,游客注册的渠道数<{}", initVisitorHours, initVisitorHours),
+                appId + "-333", agentId, 2, appId,
+                currentDate, loginUser.getUserId(), null, null,
+                1, 1, 1);
+        riskMapper.insertTemplate(template);
+        bindTempConfig(loginUser, template, configs);
+        //风控模版关联应用
+        riskMapper.relativeApp(appId, param.getAppName(), template.getTemplateId(), loginUser.getNickName(), loginUser.getUserId());
+    }
+
+    private void addTemp323(AppParam param, MiddleUserInfo loginUser) {
+        // 风控规则 {}小时内登录渠道数超过{}
+        String appId = param.getAppId();
+        String agentId = param.getUserId();
+        List<YtRiskConfig> configs = new ArrayList<>();
+        YtRiskConfig riskConfig = createRiskConfig(param.getUserId(), "hours",
+                StrUtil.format("{}小时内", initVisitorHours), initVisitorHours, 2);
+        configs.add(riskConfig);
+        riskConfig = createRiskConfig(param.getUserId(), "hours",
+                StrUtil.format("游客登录渠道数<{}", initVisitorHours), initVisitorHours, 3);
+        configs.add(riskConfig);
         String templateId = IdUtil.getSnowflakeNextIdStr();
-        String content = configIds.stream().map(YtRiskConfig::getFieldDesc).collect(Collectors.joining(""));
+        YtRiskTemplate template = new YtRiskTemplate(templateId, "游客登录限制",
+                StrUtil.format("{}小时内游客登录渠道数<{}", initVisitorHours, initVisitorHours),
+                appId + "-323", agentId, 2, appId,
+                new Date(), loginUser.getUserId(), null, null,
+                1, 1, 1);
+        riskMapper.insertTemplate(template);
+        // 风控模板关联配置项
+        bindTempConfig(loginUser, template, configs);
+        //风控模版关联应用
+        riskMapper.relativeApp(appId, param.getAppName(), template.getTemplateId(), loginUser.getNickName(), loginUser.getUserId());
+    }
+
+    private void addTemp344(AppParam param, MiddleUserInfo loginUser) {
+        // 风控规则 游客模式用户开屏广告累计ecpm<{},累计预估收益<{}
+        // 风控规则 游客模式用户横幅累计ecpm<{},累计预估收益<{}
+        // 风控规则 游客模式用户原生(信息流)累计ecpm<{},累计预估收益<{}
+        String appId = param.getAppId();
+        String agentId = param.getUserId();
+        List<YtRiskConfig> configs = new ArrayList<>();
+        createTemp344ByAdType(param, configs, "0", "信息流");
+        createTemp344ByAdType(param, configs, "2", "横幅");
+        createTemp344ByAdType(param, configs, "4", "开屏");
+        String templateId = IdUtil.getSnowflakeNextIdStr();
+        String content = configs.stream().map(YtRiskConfig::getFieldDesc).collect(Collectors.joining(""));
         YtRiskTemplate template = new YtRiskTemplate(templateId, "游客用户收益限制", content,
                 appId + "-344", agentId, 2, appId,
-                currentDate, loginUser.getUserId(), null, null,
+                new Date(), loginUser.getUserId(), null, null,
                 1, 1, 1);
         riskMapper.insertTemplate(template);
-        YtRiskTemplateConfig templateConfig;
-        for (YtRiskConfig config : configIds) {
-            templateConfig = new YtRiskTemplateConfig(templateId, config.getConfigId(),
-                    loginUser.getUserId(), loginUser.getNickName(), currentDate);
-            riskMapper.insertTempConfig(templateConfig);
-        }
+        // 风控模板关联配置项
+        bindTempConfig(loginUser, template, configs);
+        //风控模版关联应用
+        riskMapper.relativeApp(appId, param.getAppName(), template.getTemplateId(), loginUser.getNickName(), loginUser.getUserId());
     }
 
     private void createTemp344ByAdType(AppParam param, List<YtRiskConfig> configs, String adSourceType, String typeName){
         YtRiskConfig riskConfig;
         riskConfig = createRiskConfig(param.getUserId(), StrUtil.format("ecpmLimit_{}", adSourceType),
-                StrUtil.format("{}累计ecpm<{},", typeName, initVisitorEcpmLimit), initHourCount, 4);
+                StrUtil.format("{}累计ecpm<{},", typeName, initVisitorEcpmLimit), initVisitorEcpmLimit, 4);
         configs.add(riskConfig);
         riskConfig = createRiskConfig(param.getUserId(),  StrUtil.format("revenueLimit_{}", adSourceType),
-                StrUtil.format("{}累计预估收益<{};", typeName, initVisitorRevenueLimit), initHourTaskLimit, 4);
+                StrUtil.format("预估收益<{};", initVisitorRevenueLimit), initVisitorRevenueLimit, 4);
         configs.add(riskConfig);
     }
 
@@ -258,26 +330,23 @@ public class ApkServiceImpl implements ApkService {
         String appId = param.getAppId();
         String agentId = param.getUserId();
         Date currentDate = new Date();
-        List<String> configIds = new ArrayList<>();
+        List<YtRiskConfig> configs = new ArrayList<>();
         YtRiskConfig riskConfig;
         riskConfig = createRiskConfig(agentId, "hourCount",
-                StrUtil.format("{}小时", initHourCount), initHourCount, 2);
-        configIds.add(riskConfig.getConfigId());
+                StrUtil.format("{}小时内,", initHourCount), initHourCount, 2);
+        configs.add(riskConfig);
         riskConfig = createRiskConfig(agentId, "hourTaskLimit",
-                StrUtil.format("用户获得{}个获得奖励的激励视频", initHourTaskLimit), initHourTaskLimit, 2);
-        configIds.add(riskConfig.getConfigId());
+                StrUtil.format("获得奖励的激励视频数<{}", initHourTaskLimit), initHourTaskLimit, 2);
+        configs.add(riskConfig);
         String templateId = IdUtil.getSnowflakeNextIdStr();
         YtRiskTemplate template = new YtRiskTemplate(templateId,"小时区间任务数完成限制",
-                StrUtil.format("每{}小时用户获得完成{}个获得奖励的激励视频", initHourCount, initHourTaskLimit),
+                StrUtil.format("{}小时内,获得奖励的激励视频数<{}", initHourCount, initHourTaskLimit),
                 appId + "-768", agentId, 2, appId,
                 currentDate, loginUser.getUserId(),null, null,
                 1,1,1);
         riskMapper.insertTemplate(template);
-        YtRiskTemplateConfig templateConfig;
-        for (String itemId : configIds) {
-            templateConfig = new YtRiskTemplateConfig(templateId, itemId, loginUser.getUserId(), loginUser.getNickName(), currentDate);
-            riskMapper.insertTempConfig(templateConfig);
-        }
+        // 风控模板关联配置项
+        bindTempConfig(loginUser, template, configs);
         //风控模版关联应用
         riskMapper.relativeApp(appId, param.getAppName(), template.getTemplateId(), loginUser.getNickName(), loginUser.getUserId());
     }
@@ -287,26 +356,23 @@ public class ApkServiceImpl implements ApkService {
         String appId = param.getAppId();
         String agentId = param.getUserId();
         Date currentDate = new Date();
-        List<String> configIds = new ArrayList<>();
+        List<YtRiskConfig> configs = new ArrayList<>();
         YtRiskConfig riskConfig;
         riskConfig = createRiskConfig(agentId, "monthCount",
-                StrUtil.format("{}月", initMonthCount), initMonthCount, 2);
-        configIds.add(riskConfig.getConfigId());
+                StrUtil.format("{}月", initMonthCount), initMonthCount, 2);
+        configs.add(riskConfig);
         riskConfig = createRiskConfig(agentId, "monthTaskLimit",
-                StrUtil.format("用户获得{}个获得奖励的激励视频", initMonthTaskLimit),initMonthTaskLimit, 2);
-        configIds.add(riskConfig.getConfigId());
+                StrUtil.format("获得奖励的激励视频数<{}", initMonthTaskLimit), initMonthTaskLimit, 2);
+        configs.add(riskConfig);
         String templateId = IdUtil.getSnowflakeNextIdStr();
         YtRiskTemplate template = new YtRiskTemplate(templateId,"月区间任务完成数限制",
-                StrUtil.format("每{}月用户获得{}个获得奖励的激励视频", initMonthCount, initMonthTaskLimit),
+                StrUtil.format("{}月内,获得奖励的激励视频数<{}", initMonthCount, initMonthTaskLimit),
                 appId + "-767", agentId, 2, appId,
                 currentDate, loginUser.getUserId(),null, null,
                 1,1,1);
         riskMapper.insertTemplate(template);
-        YtRiskTemplateConfig templateConfig;
-        for (String itemId : configIds) {
-            templateConfig = new YtRiskTemplateConfig(templateId, itemId, loginUser.getUserId(), loginUser.getNickName(), currentDate);
-            riskMapper.insertTempConfig(templateConfig);
-        }
+        // 风控模板关联配置项
+        bindTempConfig(loginUser, template, configs);
         //风控模版关联应用
         riskMapper.relativeApp(appId, param.getAppName(), template.getTemplateId(), loginUser.getNickName(), loginUser.getUserId());
     }
@@ -322,13 +388,13 @@ public class ApkServiceImpl implements ApkService {
                 StrUtil.format("当日用户获得{}个获得奖励的激励视频,"),initAdCompletedCount, 2);
         configIds.add(riskConfig.getConfigId());
         riskConfig = createRiskConfig(agentId, "firstCount",
-                StrUtil.format("近期前{}个获得奖励的激励视频", initFirstCount),  initFirstCount, 2);
+                StrUtil.format("前{}个获得奖励的激励视频", initFirstCount),  initFirstCount, 2);
         configIds.add(riskConfig.getConfigId());
         riskConfig = createRiskConfig(agentId, "averageRevenue",
                 StrUtil.format("平均收益<{}", initAverageRevenue),  initAverageRevenue, 4);
         configIds.add(riskConfig.getConfigId());
         String templateId = IdUtil.getSnowflakeNextIdStr();
-        String templateContent = StrUtil.format("当日用户获得{}个获得奖励的激励视频,近期前{}个获得奖励的激励视频平均收益<{}",
+        String templateContent = StrUtil.format("当日用户获得{}个获得奖励的激励视频,前{}个获得奖励的激励视频平均收益<{}",
                 initAdCompletedCount, initFirstCount, initAverageRevenue);
         YtRiskTemplate template = new YtRiskTemplate(templateId,"成本收益限制", templateContent,
                 appId + "-766", agentId, 2, appId,
@@ -344,12 +410,6 @@ public class ApkServiceImpl implements ApkService {
         riskMapper.relativeApp(appId, param.getAppName(), template.getTemplateId(), loginUser.getNickName(), loginUser.getUserId());
     }
 
-    private YtRiskConfig createRiskConfig(String agentId, String fieldName, String filedDesc, String initVal, Integer multy){
-        String configId = IdUtil.getSnowflakeNextIdStr();
-        YtRiskConfig config = new YtRiskConfig(configId, agentId, fieldName, filedDesc, 1, initVal, multy);
-        riskMapper.insertConfigItem(config);
-        return config;
-    }
 
     private void addTemp746(AppParam param, MiddleUserInfo loginUser) {
         String appId = param.getAppId();