|
@@ -461,7 +461,7 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
|
|
|
* 校验广告的默认风控配置
|
|
* 校验广告的默认风控配置
|
|
|
*/
|
|
*/
|
|
|
@Override
|
|
@Override
|
|
|
- public void checkAdRisk(String userId,BigDecimal userRevenue) {
|
|
|
|
|
|
|
+ public Result<?> checkAdRisk(String userId,BigDecimal userRevenue) {
|
|
|
ResultTable<YtDyzAdRecord> table = appFeign.adRecords(userId);
|
|
ResultTable<YtDyzAdRecord> table = appFeign.adRecords(userId);
|
|
|
List<YtDyzAdRecord> records = table.getData();
|
|
List<YtDyzAdRecord> records = table.getData();
|
|
|
//校验风控742规则
|
|
//校验风控742规则
|
|
@@ -469,6 +469,7 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
|
|
|
checkRisk742(ecpmLimit,userId,records);
|
|
checkRisk742(ecpmLimit,userId,records);
|
|
|
//校验风控746规则
|
|
//校验风控746规则
|
|
|
checkRisk746(userId,records,userRevenue);
|
|
checkRisk746(userId,records,userRevenue);
|
|
|
|
|
+ return Result.resultOk(RepMessage.QUERY_SUCCESS);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -489,11 +490,11 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
|
|
|
}
|
|
}
|
|
|
//判断当日获得收益的广告达到预设数值,触发风控规则
|
|
//判断当日获得收益的广告达到预设数值,触发风控规则
|
|
|
int rewardCount = Integer.parseInt(revenueMap.get("rewardCount"));
|
|
int rewardCount = Integer.parseInt(revenueMap.get("rewardCount"));
|
|
|
- if(rewardCount>=incomeCount){
|
|
|
|
|
|
|
+ if(incomeCount>=rewardCount){
|
|
|
BigDecimal income = new BigDecimal(revenueMap.get("income"));
|
|
BigDecimal income = new BigDecimal(revenueMap.get("income"));
|
|
|
//获取最先的两条
|
|
//获取最先的两条
|
|
|
BigDecimal reduce = revenues.stream().map(YtDyzAdRecord::getRevenue).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
BigDecimal reduce = revenues.stream().map(YtDyzAdRecord::getRevenue).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- if(income.compareTo(reduce)<0){
|
|
|
|
|
|
|
+ if(reduce.compareTo(income)<0){
|
|
|
riskLockUser(userId, "746","系统判定小于最低收益限制","用户已被风控,风控编码:746");
|
|
riskLockUser(userId, "746","系统判定小于最低收益限制","用户已被风控,风控编码:746");
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -510,15 +511,16 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
|
|
|
++adCount;
|
|
++adCount;
|
|
|
//判断当日观看视频数已经达到风控条件预设的视频数
|
|
//判断当日观看视频数已经达到风控条件预设的视频数
|
|
|
int firstAdCount = Integer.parseInt(limitMap.get("firstAdCount"));
|
|
int firstAdCount = Integer.parseInt(limitMap.get("firstAdCount"));
|
|
|
- if(firstAdCount>=adCount){
|
|
|
|
|
- //判断存在ecpm小于预设值 达到预设条数时触发风控
|
|
|
|
|
- int haveCount = Integer.parseInt(limitMap.get("haveCount"));
|
|
|
|
|
|
|
+ if(adCount>=firstAdCount){
|
|
|
|
|
+ //过滤出ecpm值小于预设值的视频数
|
|
|
|
|
+ int ecpm = Integer.parseInt(limitMap.get("ecpm"));
|
|
|
long count = records.stream().filter(
|
|
long count = records.stream().filter(
|
|
|
- s -> (s.getEcpm().compareTo(BigDecimal.valueOf(haveCount))) > 0).count();
|
|
|
|
|
|
|
+ s -> (s.getEcpm().compareTo(BigDecimal.valueOf(ecpm))) < 0).count();
|
|
|
int exact = Math.toIntExact(count);
|
|
int exact = Math.toIntExact(count);
|
|
|
- if(count>exact){
|
|
|
|
|
|
|
+ //判断小于预设值的视频数超出预设次数
|
|
|
|
|
+ int haveCount = Integer.parseInt(limitMap.get("haveCount"));
|
|
|
|
|
+ if(exact>haveCount){
|
|
|
riskLockUser(userId, "742","系统判定激励视频ecpm值过低","用户已被风控,风控编码:742");
|
|
riskLockUser(userId, "742","系统判定激励视频ecpm值过低","用户已被风控,风控编码:742");
|
|
|
-
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
@@ -527,14 +529,17 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
|
|
|
* 风控锁定用户
|
|
* 风控锁定用户
|
|
|
*/
|
|
*/
|
|
|
private void riskLockUser(String userId, String riskCode, String tempName, String errMsg) {
|
|
private void riskLockUser(String userId, String riskCode, String tempName, String errMsg) {
|
|
|
- YtDyzUser next = new YtDyzUser();
|
|
|
|
|
- next.setUserId(userId);
|
|
|
|
|
- next.setUserStatus(UserStatusEnum.LOCK.getCode());
|
|
|
|
|
- next.setRiskCode(riskCode);
|
|
|
|
|
- next.setRiskReason(tempName);
|
|
|
|
|
- appFeign.updateUserInfo(next);
|
|
|
|
|
- //创建一次性定时任务用于24小时后解锁用户
|
|
|
|
|
|
|
+ //懒得引入mq,因而利用线程池创建延迟定时任务修改用户状态,主线程继续执行,避免循环调用产生的死锁
|
|
|
ScheduledExecutorService scheduled = Executors.newSingleThreadScheduledExecutor();
|
|
ScheduledExecutorService scheduled = Executors.newSingleThreadScheduledExecutor();
|
|
|
|
|
+ scheduled.schedule(()->{
|
|
|
|
|
+ YtDyzUser next = new YtDyzUser();
|
|
|
|
|
+ next.setUserId(userId);
|
|
|
|
|
+ next.setUserStatus(UserStatusEnum.LOCK.getCode());
|
|
|
|
|
+ next.setRiskCode(riskCode);
|
|
|
|
|
+ next.setRiskReason(tempName);
|
|
|
|
|
+ appFeign.updateUserInfo(next);
|
|
|
|
|
+ },300,TimeUnit.MILLISECONDS);
|
|
|
|
|
+ //创建一次性定时任务用于24小时后解锁用户
|
|
|
scheduled.schedule(()->{
|
|
scheduled.schedule(()->{
|
|
|
YtDyzUser user = new YtDyzUser();
|
|
YtDyzUser user = new YtDyzUser();
|
|
|
user.setUserId(userId);
|
|
user.setUserId(userId);
|