|
|
@@ -0,0 +1,292 @@
|
|
|
+package com.ytpm.middle.test;
|
|
|
+
|
|
|
+
|
|
|
+import cn.hutool.core.util.IdUtil;
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
+import com.ytpm.agent.param.AppParam;
|
|
|
+import com.ytpm.middle.dao.ApkMapper;
|
|
|
+import com.ytpm.middle.dao.RiskMapper;
|
|
|
+import com.ytpm.middle.view.MiddleUserInfo;
|
|
|
+import com.ytpm.risk.model.YtRiskConfig;
|
|
|
+import com.ytpm.risk.model.YtRiskTemplate;
|
|
|
+import com.ytpm.risk.model.YtRiskTemplateConfig;
|
|
|
+import org.junit.Test;
|
|
|
+import org.junit.runner.RunWith;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
|
|
|
+import org.springframework.boot.test.context.SpringBootTest;
|
|
|
+import org.springframework.test.context.junit4.SpringRunner;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author lih
|
|
|
+ * @date 2025/9/5
|
|
|
+ */
|
|
|
+@SpringBootTest
|
|
|
+@RunWith(SpringRunner.class)
|
|
|
+@AutoConfigureMockMvc
|
|
|
+public class TestGenerateRiskTemplate {
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private ApkMapper apkMapper;
|
|
|
+ @Resource
|
|
|
+ private RiskMapper riskMapper;
|
|
|
+
|
|
|
+ @Value("${risk.config.initEcpm}")
|
|
|
+ private String initEcpm;
|
|
|
+ @Value("${risk.config.initRevenue}")
|
|
|
+ private String initRevenue;
|
|
|
+
|
|
|
+ @Value("${risk.config.initAdCompletedCount:10}")
|
|
|
+ private String initAdCompletedCount;
|
|
|
+
|
|
|
+ @Value("${risk.config.initFirstCount:3}")
|
|
|
+ private String initFirstCount;
|
|
|
+
|
|
|
+ @Value("${risk.config.initAverageRevenue:0.05}")
|
|
|
+ private String initAverageRevenue;
|
|
|
+
|
|
|
+ @Value("${risk.config.initMonthCount:1}")
|
|
|
+ private String initMonthCount;
|
|
|
+
|
|
|
+ @Value("${risk.config.initMonthTaskLimit:20}")
|
|
|
+ private String initMonthTaskLimit;
|
|
|
+
|
|
|
+ @Value("${risk.config.initHourCount:24}")
|
|
|
+ private String initHourCount;
|
|
|
+
|
|
|
+ @Value("${risk.config.initHourTaskLimit:5}")
|
|
|
+ private String initHourTaskLimit;
|
|
|
+
|
|
|
+ @Value("${risk.config.visitor.initEcpmLimit:20}")
|
|
|
+ private String initVisitorEcpmLimit;
|
|
|
+
|
|
|
+ @Value("${risk.config.visitor.initRevenueLimit:0.5}")
|
|
|
+ private String initVisitorRevenueLimit;
|
|
|
+
|
|
|
+ @Test
|
|
|
+ public void generateTemplate() {
|
|
|
+ AppParam param = new AppParam();
|
|
|
+ param.setAppId("abdedfedb7f74fe08cff514ae1d22111");
|
|
|
+ param.setUserId("yt_agent_1958702951861489664");
|
|
|
+ MiddleUserInfo loginUser = new MiddleUserInfo();
|
|
|
+ loginUser.setUserId("00711");
|
|
|
+ loginUser.setNickName("lih");
|
|
|
+
|
|
|
+ addTemp742(param,loginUser);
|
|
|
+ addTemp746(param,loginUser);
|
|
|
+ // 游客登陆风控校验
|
|
|
+ addTemp344(param, loginUser);
|
|
|
+ // 平均收益风控
|
|
|
+ addTemp766(param, loginUser);
|
|
|
+ // 任务完成数风控
|
|
|
+ addTemp767(param, loginUser);
|
|
|
+ addTemp768(param, loginUser);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void addTemp742(AppParam param, MiddleUserInfo loginUser) {
|
|
|
+ String appId = param.getAppId();
|
|
|
+ String agentId = param.getUserId();
|
|
|
+ List<String> configIds = new ArrayList<>();
|
|
|
+ String configId = IdUtil.getSnowflakeNextIdStr();
|
|
|
+ configIds.add(configId);
|
|
|
+ YtRiskConfig config = new YtRiskConfig(configId,agentId,"firstAdCount","当日前4条激励视频",1,"4",2);
|
|
|
+ riskMapper.insertConfigItem(config);
|
|
|
+ configId = IdUtil.getSnowflakeNextIdStr();
|
|
|
+ configIds.add(configId);
|
|
|
+ config = new YtRiskConfig(configId,agentId,"haveCount","有2条",1,"2",2);
|
|
|
+ riskMapper.insertConfigItem(config);
|
|
|
+ configId = IdUtil.getSnowflakeNextIdStr();
|
|
|
+ configIds.add(configId);
|
|
|
+ config = new YtRiskConfig(configId,agentId,"ecpm","ecpm值为<"+initEcpm,1,initEcpm,4);
|
|
|
+ riskMapper.insertConfigItem(config);
|
|
|
+ String templateId = IdUtil.getSnowflakeNextIdStr();
|
|
|
+ YtRiskTemplateConfig templateConfig;
|
|
|
+ for (String itemId : configIds) {
|
|
|
+ templateConfig = new YtRiskTemplateConfig(templateId,itemId,loginUser.getUserId(),loginUser.getNickName(),new Date());
|
|
|
+ riskMapper.insertTempConfig(templateConfig);
|
|
|
+ }
|
|
|
+ YtRiskTemplate template = new YtRiskTemplate(templateId,"激励视频ecpm值控制",
|
|
|
+ "当日前4条激励视频,有2条,ecpm值为<"+initEcpm,appId+"-742",agentId,
|
|
|
+ 2,appId,new Date(),loginUser.getUserId(),null,
|
|
|
+ null,1,1,1);
|
|
|
+ riskMapper.insertTemplate(template);
|
|
|
+ //风控模版关联应用
|
|
|
+ riskMapper.relativeApp(appId,param.getAppName(),template.getTemplateId(),
|
|
|
+ loginUser.getNickName(),loginUser.getUserId());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void addTemp746(AppParam param, MiddleUserInfo loginUser) {
|
|
|
+ String appId = param.getAppId();
|
|
|
+ String agentId = param.getUserId();
|
|
|
+ List<String> configIds = new ArrayList<>();
|
|
|
+ String configId = IdUtil.getSnowflakeNextIdStr();
|
|
|
+ configIds.add(configId);
|
|
|
+ YtRiskConfig config = new YtRiskConfig(configId,agentId,"rewardCount","当日前2条获得奖励的激励视频",1,"2",2);
|
|
|
+ riskMapper.insertConfigItem(config);
|
|
|
+ configId = IdUtil.getSnowflakeNextIdStr();
|
|
|
+ configIds.add(configId);
|
|
|
+ config = new YtRiskConfig(configId,agentId,"income","总收益为<"+initRevenue,1,initRevenue,4);
|
|
|
+ riskMapper.insertConfigItem(config);
|
|
|
+ String templateId = IdUtil.getSnowflakeNextIdStr();
|
|
|
+ YtRiskTemplateConfig templateConfig;
|
|
|
+ for (String itemId : configIds) {
|
|
|
+ templateConfig = new YtRiskTemplateConfig(templateId,itemId,loginUser.getUserId(),loginUser.getNickName(),new Date());
|
|
|
+ riskMapper.insertTempConfig(templateConfig);
|
|
|
+ }
|
|
|
+ YtRiskTemplate template = new YtRiskTemplate(templateId,"最低收益限制",
|
|
|
+ "当日前2条获得奖励的激励视频,总收益为<"+initRevenue,appId+"-746",agentId,
|
|
|
+ 2,appId,new Date(),loginUser.getUserId(),null,
|
|
|
+ null,1,1,1);
|
|
|
+ riskMapper.insertTemplate(template);
|
|
|
+ //风控模版关联应用
|
|
|
+ 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();
|
|
|
+ Date currentDate = new Date();
|
|
|
+ List<YtRiskConfig> configIds = new ArrayList<>();
|
|
|
+ createTemp344ByAdType(param, configIds, "0", "信息流");
|
|
|
+ createTemp344ByAdType(param, configIds, "2", "横幅");
|
|
|
+ createTemp344ByAdType(param, configIds, "4", "开屏");
|
|
|
+ String templateId = IdUtil.getSnowflakeNextIdStr();
|
|
|
+ String content = configIds.stream().map(YtRiskConfig::getFieldDesc).collect(Collectors.joining(""));
|
|
|
+ YtRiskTemplate template = new YtRiskTemplate(templateId, "游客用户收益限制", content,
|
|
|
+ appId + "-344", agentId, 2, appId,
|
|
|
+ currentDate, 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);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ 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);
|
|
|
+ configs.add(riskConfig);
|
|
|
+ riskConfig = createRiskConfig(param.getUserId(), StrUtil.format("revenueLimit_{}", adSourceType),
|
|
|
+ StrUtil.format("{}累计预估收益<{};", typeName, initVisitorRevenueLimit), initHourTaskLimit, 4);
|
|
|
+ configs.add(riskConfig);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void addTemp768(AppParam param, MiddleUserInfo loginUser) {
|
|
|
+ // 每{}小时用户获得完成{}个获得奖励的激励视频
|
|
|
+ String appId = param.getAppId();
|
|
|
+ String agentId = param.getUserId();
|
|
|
+ Date currentDate = new Date();
|
|
|
+ List<String> configIds = new ArrayList<>();
|
|
|
+ YtRiskConfig riskConfig;
|
|
|
+ riskConfig = createRiskConfig(agentId, "hourCount",
|
|
|
+ StrUtil.format("每{}小时", initHourCount), initHourCount, 2);
|
|
|
+ configIds.add(riskConfig.getConfigId());
|
|
|
+ riskConfig = createRiskConfig(agentId, "hourTaskLimit",
|
|
|
+ StrUtil.format("用户获得{}个获得奖励的激励视频", initHourTaskLimit), initHourTaskLimit, 2);
|
|
|
+ configIds.add(riskConfig.getConfigId());
|
|
|
+ String templateId = IdUtil.getSnowflakeNextIdStr();
|
|
|
+ YtRiskTemplate template = new YtRiskTemplate(templateId,"小时区间任务数完成限制",
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ //风控模版关联应用
|
|
|
+ riskMapper.relativeApp(appId, param.getAppName(), template.getTemplateId(), loginUser.getNickName(), loginUser.getUserId());
|
|
|
+ }
|
|
|
+
|
|
|
+ private void addTemp767(AppParam param, MiddleUserInfo loginUser) {
|
|
|
+ // 风控规则 每{}月用户获得{}个获得奖励的激励视频
|
|
|
+ String appId = param.getAppId();
|
|
|
+ String agentId = param.getUserId();
|
|
|
+ Date currentDate = new Date();
|
|
|
+ List<String> configIds = new ArrayList<>();
|
|
|
+ YtRiskConfig riskConfig;
|
|
|
+ riskConfig = createRiskConfig(agentId, "monthCount",
|
|
|
+ StrUtil.format("每{}月", initMonthCount), initMonthCount, 2);
|
|
|
+ configIds.add(riskConfig.getConfigId());
|
|
|
+ riskConfig = createRiskConfig(agentId, "monthTaskLimit",
|
|
|
+ StrUtil.format("用户获得{}个获得奖励的激励视频", initMonthTaskLimit),initMonthTaskLimit, 2);
|
|
|
+ configIds.add(riskConfig.getConfigId());
|
|
|
+ String templateId = IdUtil.getSnowflakeNextIdStr();
|
|
|
+ YtRiskTemplate template = new YtRiskTemplate(templateId,"月区间任务完成数限制",
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ //风控模版关联应用
|
|
|
+ riskMapper.relativeApp(appId, param.getAppName(), template.getTemplateId(), loginUser.getNickName(), loginUser.getUserId());
|
|
|
+ }
|
|
|
+
|
|
|
+ private void addTemp766(AppParam param, MiddleUserInfo loginUser) {
|
|
|
+ // 风控规则:当用户完成广告类型 激励视频 {}个 数时,获取近期{} * {} 条收益(平均取整)平均值 ,低于预设值 {} 时,
|
|
|
+ String appId = param.getAppId();
|
|
|
+ String agentId = param.getUserId();
|
|
|
+ Date currentDate = new Date();
|
|
|
+ List<String> configIds = new ArrayList<>();
|
|
|
+ YtRiskConfig riskConfig;
|
|
|
+ riskConfig = createRiskConfig(agentId, "adCompletedCount",
|
|
|
+ StrUtil.format("当日用户获得{}个获得奖励的激励视频,"),initAdCompletedCount, 2);
|
|
|
+ configIds.add(riskConfig.getConfigId());
|
|
|
+ riskConfig = createRiskConfig(agentId, "firstCount",
|
|
|
+ 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("当日用户获得{}个获得奖励的激励视频,近期前{}个获得奖励的激励视频平均收益<{}",
|
|
|
+ initAdCompletedCount, initFirstCount, initAverageRevenue);
|
|
|
+ YtRiskTemplate template = new YtRiskTemplate(templateId,"成本收益限制", templateContent,
|
|
|
+ appId + "-766", 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);
|
|
|
+ }
|
|
|
+ //风控模版关联应用
|
|
|
+ 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;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|