Explorar o código

风控规则自动封禁用户时缺少appId,渠道ID存储不对

marxjaw hai 4 meses
pai
achega
0687d0d13a

+ 1 - 1
yt-app/app-service/src/main/java/com/ytpm/service/impl/AdServiceImpl.java

@@ -49,7 +49,7 @@ public class AdServiceImpl implements AdService {
         }
         saveRecordAndChangeUser(param, user);
         //调用风控广告校验
-        Result<?> result = riskFeign.checkAdRisk(user.getUserId(),user.getAppId());
+        Result<?> result = riskFeign.checkAdRisk(user);
         if(result.getCode()!=200){
             throw new CustomerException(result.getMessage());
         }

+ 2 - 0
yt-common/src/main/java/com/ytpm/risk/param/RiskBannedParam.java

@@ -27,4 +27,6 @@ public class RiskBannedParam {
     private Integer bannedLimit;
     @ApiModelProperty("应用ID")
     private String appId;
+    @ApiModelProperty("渠道ID")
+    private Long ditChId;
 }

+ 2 - 2
yt-risk/risk-feign/src/main/java/com/ytpm/feign/RiskFeign.java

@@ -75,8 +75,8 @@ public interface RiskFeign {
     @GetMapping("/public/getRiskByCode")
     Result<RiskTemplateView> getRiskByCode(@RequestParam("code")String code);
 
-    @GetMapping("/public/checkAdRisk")
-    Result<?> checkAdRisk(@RequestParam("userId")String userId,@RequestParam("appId")String appId);
+    @PostMapping("/public/checkAdRisk")
+    Result<?> checkAdRisk(@RequestBody YtDyzUser ytDyzUser);
 
     @PostMapping("/riskManage/queryBanned")
     Result<Map<String, Integer>> queryBanned(@RequestBody AppUserQueryParam appUserQueryParam);

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

@@ -53,9 +53,9 @@ public class PublicApiController {
      * 校验广告的默认风控配置
      */
     @ApiOperation("校验广告的默认风控配置")
-    @GetMapping("/checkAdRisk")
-    public Result<?> checkAdRisk(@RequestParam("userId")String userId,@RequestParam("appId") String appId){
-       return riskService.checkAdRisk(userId,appId);
+    @PostMapping("/checkAdRisk")
+    public Result<?> checkAdRisk(@RequestBody YtDyzUser dyzUser){
+       return riskService.checkAdRisk(dyzUser);
     }
 
 }

+ 1 - 1
yt-risk/risk-manage/src/main/java/com/ytpm/service/RiskService.java

@@ -94,7 +94,7 @@ public interface RiskService {
     /**
      * 校验广告的默认风控配置
      */
-    Result<?> checkAdRisk(String userId, String appId);
+    Result<?> checkAdRisk(YtDyzUser dyzUser);
 
     List<YtPlatformBanned> queryBannedRecord(Date startTime,Date endTime);
 }

+ 17 - 16
yt-risk/risk-manage/src/main/java/com/ytpm/service/impl/RiskServiceImpl.java

@@ -438,7 +438,7 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
         }
         int ipSameCount = Integer.parseInt(configMap.get("ipSameCount"));
         if(intCount > ipSameCount){//校验同IP登录次数大于预设值,锁定用户
-            riskLockUser(dyzUser.getUserId(), dyzUser.getAppId(),"313","系统判定登录IP限制","当前用户已被风控!");
+            riskLockUser(dyzUser,"313","系统判定登录IP限制","当前用户已被风控!");
         }
     }
 
@@ -462,8 +462,8 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
      * 校验广告的默认风控配置
      */
     @Override
-    public Result<?> checkAdRisk(String userId,String appId) {
-        ResultTable<YtDyzAdRecord> table = appFeign.adRecords(userId);
+    public Result<?> checkAdRisk(YtDyzUser dyzUser) {
+        ResultTable<YtDyzAdRecord> table = appFeign.adRecords(dyzUser.getUserId());
         List<YtDyzAdRecord> records = table.getData();
         if(records.isEmpty()){
             return Result.resultOk(RepMessage.QUERY_SUCCESS);
@@ -476,10 +476,10 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
         ).sorted(Comparator.comparing(YtDyzAdRecord::getFinishTime)).collect(Collectors.toList());
         //校验风控742规则
         RiskTemplateView ecpmLimit= configMapper.getByCode("742");
-        checkRisk742(ecpmLimit,userId,appId,records);
+        checkRisk742(ecpmLimit,dyzUser,records);
         //校验风控746规则
         if(!records.isEmpty() && records.size()>1){
-            checkRisk746(userId,appId,records);
+            checkRisk746(dyzUser,records);
         }
         return Result.resultOk(RepMessage.QUERY_SUCCESS);
     }
@@ -487,7 +487,7 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
     /**
      * 校验默认风控规则746
      */
-    private void checkRisk746(String userId,String appId, List<YtDyzAdRecord> records) {
+    private void checkRisk746(YtDyzUser dyzUser, List<YtDyzAdRecord> records) {
         RiskTemplateView revenue = configMapper.getByCode("746");
         Map<String, String> revenueMap = revenue.getConfigList().stream().collect(
                 Collectors.toMap(RiskConfigView::getFieldName, RiskConfigView::getConfigVal));
@@ -502,7 +502,7 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
             //获取最先的两条
             BigDecimal reduce = revenues.stream().map(YtDyzAdRecord::getRevenue).reduce(BigDecimal.ZERO, BigDecimal::add);
             if(reduce.compareTo(income)<0){
-                riskLockUser(userId,appId, "746","系统判定小于最低收益限制","用户已被风控,风控编码:746");
+                riskLockUser(dyzUser, "746","系统判定小于最低收益限制","用户已被风控,风控编码:746");
             }
         }
     }
@@ -510,7 +510,7 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
     /**
      * 校验默认风控规则742
      */
-    private void checkRisk742(RiskTemplateView ecpmLimit,String userId,String appId,List<YtDyzAdRecord> records) {
+    private void checkRisk742(RiskTemplateView ecpmLimit,YtDyzUser dyzUser,List<YtDyzAdRecord> records) {
         Map<String, String> limitMap = ecpmLimit.getConfigList().stream().collect(
                 Collectors.toMap(RiskConfigView::getFieldName, RiskConfigView::getConfigVal));
         int adCount = 0;
@@ -527,7 +527,7 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
             //判断小于预设值的视频数超出预设次数
             int haveCount = Integer.parseInt(limitMap.get("haveCount"));
             if(exact>haveCount){
-                riskLockUser(userId, appId,"742","系统判定激励视频ecpm值过低","用户已被风控,风控编码:742");
+                riskLockUser(dyzUser,"742","系统判定激励视频ecpm值过低","用户已被风控,风控编码:742");
             }
         }
     }
@@ -535,21 +535,22 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
     /**
      * 风控锁定用户
      */
-    private void riskLockUser(String userId,String appId, String riskCode, String tempName, String errMsg) {
+    private void riskLockUser(YtDyzUser dyzUser, String riskCode, String tempName, String errMsg) {
         //增加用户风控记录
         RiskBannedParam param = new RiskBannedParam();
-        param.setUserId(userId);
-        param.setAppId(appId);
+        param.setUserId(dyzUser.getUserId());
+        param.setAppId(dyzUser.getAppId());
+        param.setDitChId(dyzUser.getDitchId());
         param.setBannedLimit(24);
         param.setOperator("系统风控");
         param.setBannedReason(tempName);
         param.setOperatorName("系统风控");
-        addBannedRecord(Collections.singletonList(userId),param);
+        addBannedRecord(Collections.singletonList(dyzUser.getUserId()),param);
         //懒得引入mq,因而利用线程池创建延迟定时任务修改用户状态,主线程继续执行,避免循环调用产生的死锁
         ScheduledExecutorService scheduled  = Executors.newSingleThreadScheduledExecutor();
         scheduled.schedule(()->{
             YtDyzUser next = new YtDyzUser();
-            next.setUserId(userId);
+            next.setUserId(dyzUser.getUserId());
             next.setUserStatus(UserStatusEnum.LOCK.getCode());
             next.setRiskCode(riskCode);
             next.setRiskReason(tempName);
@@ -558,7 +559,7 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
         //创建一次性定时任务用于24小时后解锁用户
         scheduled.schedule(()->{
             YtDyzUser user = new YtDyzUser();
-            user.setUserId(userId);
+            user.setUserId(dyzUser.getUserId());
             user.setUserStatus(UserStatusEnum.NORMAL.getCode());
             appFeign.updateUserInfo(user);
             scheduled.shutdown();
@@ -621,7 +622,7 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
             banned.setBannedId(IdUtil.fastSimpleUUID());
             banned.setUserId(userId);
             banned.setAppId(param.getAppId());
-            banned.setChannelId(param.getOperator());
+            banned.setChannelId(param.getDitChId().toString());
             banned.setBannedLimit(Objects.isNull(param.getBannedLimit())?defaultLimit:param.getBannedLimit());
             banned.setBannedReason(StrUtil.isBlank(param.getBannedReason())?defaultReason:param.getBannedReason());
             banned.setBannedType(BannedTypeEnum.CHANNEL.getCode());