Procházet zdrojové kódy

fix: 修改766风控规则

hidewnd před 2 měsíci
rodič
revize
075a70401f

+ 9 - 0
yt-adage/adage-service/src/main/java/com/ytpm/adage/controller/UserController.java

@@ -23,6 +23,7 @@ import com.ytpm.app.param.AppUserTodayBannedParam;
 import com.ytpm.app.param.YtAppUserListParam;
 import com.ytpm.app.view.HourCountView;
 import com.ytpm.app.view.YtAppUserListView;
+import com.ytpm.feign.RiskFeign;
 import com.ytpm.general.RepMessage;
 import com.ytpm.general.Result;
 import com.ytpm.general.ResultTable;
@@ -66,6 +67,9 @@ public class UserController {
     @Autowired
     private RedisService redisService;
 
+    @Autowired
+    private RiskFeign riskFeign;
+
     /**
      * 根据应用ID查询当月注册用户
      */
@@ -167,6 +171,11 @@ public class UserController {
         user.setTodayAnswerCount(questionMapper.getAnswerCount(userId,1));
         user.setHistoryAnswerCount(questionMapper.getAnswerCount(userId,2));
         user.setAnswerRecordList(questionMapper.getAnswerRecords(userId));
+
+        Result<?> result = riskFeign.checkAdRisk(user);
+        if (result != null) {
+            user.setIfPowerLimit(result.getCode() != 200 && "766".equals(result.getMessage()));
+        }
         return Result.resultObjOk(user);
     }
 

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

@@ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.RandomUtil;
-import com.alibaba.fastjson.JSONObject;
 import com.ytpm.adage.dao.AdRecordMapper;
 import com.ytpm.adage.dao.AppUserMapper;
 import com.ytpm.adage.service.AdService;
@@ -84,8 +83,8 @@ public class AdServiceImpl implements AdService {
             Result<?> result = riskFeign.checkAdRisk(user);
             if (result.getCode() != 200) {
                 Result<Object> resultObj = new Result<>(StatusCode.ACCESS_ERR, getTipsMsg());
-                if(result.getData() != null){
-                    resultObj.setData(JSONObject.toJSONString(result.getData()));
+                if("766".equals(result.getMessage() )){
+                    resultObj.setData(result.getMessage());
                 }
                 return resultObj;
             }

+ 3 - 0
yt-common/src/main/java/com/ytpm/app/model/YtDyzUser.java

@@ -138,4 +138,7 @@ public class YtDyzUser extends PageMeta {
     private String deviceId;
     @ApiModelProperty(value = "手机json收集信息")
     private String phoneJson;
+
+    @ApiModelProperty(value = "是否已达到体力上限")
+    private Boolean ifPowerLimit;
 }

+ 9 - 0
yt-risk/risk-manage/src/main/java/com/ytpm/controller/PublicApiController.java

@@ -66,6 +66,15 @@ public class PublicApiController {
        return riskService.checkAdRisk(dyzUser);
     }
 
+    /**
+     * 校验广告的默认风控配置 766
+     */
+    @ApiOperation("校验广告的默认风控配置")
+    @PostMapping("/checkAdRisk/766")
+    public Result<?> checkAdRisk766(@RequestBody YtDyzUser dyzUser){
+       return riskService.checkAdRisk766(dyzUser);
+    }
+
     /**
      * 批量审核用户
      */

+ 34 - 2
yt-risk/risk-manage/src/main/java/com/ytpm/service/impl/RiskServiceImpl.java

@@ -36,6 +36,7 @@ import com.ytpm.dao.RiskUserMapper;
 import com.ytpm.general.RepMessage;
 import com.ytpm.general.Result;
 import com.ytpm.general.ResultTable;
+import com.ytpm.general.StatusCode;
 import com.ytpm.handle.CommonException;
 import com.ytpm.handle.CustomerException;
 import com.ytpm.risk.enums.BannedTypeEnum;
@@ -563,7 +564,7 @@ public class RiskServiceImpl implements RiskService {
                 checkRisk766(dyzUser, adRecords);
             }
         } catch (CommonException e) {
-            return Result.resultOk(e.getMessage(), "766");
+            return Result.resultFail(StatusCode.ACCESS_ERR, e.getMessage());
         }
         return Result.resultOk(RepMessage.QUERY_SUCCESS);
     }
@@ -674,7 +675,7 @@ public class RiskServiceImpl implements RiskService {
             }
         }
         if (averageRevenue.compareTo(averageRevenueLimit) < 0) {
-            throw new CommonException("已达上限");
+            throw new CommonException("766");
         }
     }
 
@@ -1113,6 +1114,37 @@ public class RiskServiceImpl implements RiskService {
                 ? Result.resultOk(RepMessage.RISK_SUCCESS) : Result.resultErr(RepMessage.ALREADY_RISK_USER);
     }
 
+    @Override
+    public Result<?> checkAdRisk766(YtDyzUser dyzUser) {
+        YtPlatformUserApp userApp;
+        if (dyzUser.getIosId()!=null) {
+            userApp =  appMapper.selectParentApp(dyzUser.getAppId());
+        } else {
+            YtApp ytApp = appMapper.selectRiskApp(dyzUser.getAppId());
+            userApp =  appMapper.selectParentApp(ytApp.getSuperiorId());
+        }
+        Object o = feignInvoker.invoke(userApp.getServiceName(), "adRecords", dyzUser.getUserId(),
+                AdSourceTypeEnum.rewarded_video.getAdSourceType());
+        JSONObject object = JSON.parseObject(JSON.toJSONString(o));
+        List<YtDyzAdRecord> adRecords = JSONArray.parseArray(object.getString("data"), YtDyzAdRecord.class);
+        if(CollUtil.isEmpty(adRecords)){
+            return Result.resultOk(RepMessage.QUERY_SUCCESS);
+        }
+        //过滤出当日的激励视频数据 按照时间正序排以便筛选每日前几条激励视频
+        adRecords = adRecords.stream().filter(s ->
+                DateUtil.isSameDay(DateUtil.parse(s.getFinishTime()), new Date())
+        ).sorted(Comparator.comparing(YtDyzAdRecord::getFinishTime)).collect(Collectors.toList());
+        if (!adRecords.isEmpty() && adRecords.size() > 1) {
+            try {
+                // 校验风控766规则
+                checkRisk766(dyzUser, adRecords);
+            } catch (CommonException e) {
+                return Result.resultFail(StatusCode.ACCESS_ERR, e.getMessage());
+            }
+        }
+        return Result.resultOk(RepMessage.QUERY_SUCCESS);
+    }
+
     /**
      * 344 游客模式登陆用户风控校验<br>
      * 原生(信息流)、开屏广告、横幅对应 ecpm 和预估收益 小于 阈值时,校验失败