|
|
@@ -2,6 +2,7 @@ package com.ytpm.service.impl;
|
|
|
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
+import cn.hutool.core.collection.ConcurrentHashSet;
|
|
|
import cn.hutool.core.date.DateField;
|
|
|
import cn.hutool.core.date.DateUnit;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
@@ -12,6 +13,7 @@ import cn.hutool.core.util.StrUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
import com.github.pagehelper.PageHelper;
|
|
|
import com.github.pagehelper.PageInfo;
|
|
|
import com.ytpm.advertise.enums.AdSourceTypeEnum;
|
|
|
@@ -57,7 +59,9 @@ import com.ytpm.risk.view.RiskDeblockingListView;
|
|
|
import com.ytpm.risk.view.RiskTemplateView;
|
|
|
import com.ytpm.service.RiskService;
|
|
|
import com.ytpm.util.FeignClientInvoker;
|
|
|
+import com.ytpm.util.IPUtil;
|
|
|
import com.ytpm.util.RedisService;
|
|
|
+import com.ytpm.util.ResourceUtils;
|
|
|
import io.swagger.annotations.ApiModelProperty;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
@@ -67,6 +71,7 @@ import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
+import java.io.IOException;
|
|
|
import java.lang.reflect.Field;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
@@ -83,6 +88,8 @@ import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.Objects;
|
|
|
import java.util.Set;
|
|
|
+import java.util.concurrent.ConcurrentSkipListSet;
|
|
|
+import java.util.concurrent.CopyOnWriteArraySet;
|
|
|
import java.util.concurrent.ScheduledExecutorService;
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
import java.util.stream.Collectors;
|
|
|
@@ -121,6 +128,8 @@ public class RiskServiceImpl implements RiskService {
|
|
|
private ScheduledExecutorService scheduledExecutorService;
|
|
|
|
|
|
|
|
|
+ private static Set<String> ipWhiteList = new CopyOnWriteArraySet<>();
|
|
|
+
|
|
|
/**
|
|
|
* 查询配置字段选项
|
|
|
*/
|
|
|
@@ -417,6 +426,10 @@ public class RiskServiceImpl implements RiskService {
|
|
|
* 校验风控规则322
|
|
|
*/
|
|
|
private void checkRisk322(YtDyzUser dyzUser) {
|
|
|
+ // ip白名单用户直接放行
|
|
|
+ if (checkDyzUserIp(dyzUser)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
RiskTemplateView view = configMapper.getByCode("322");
|
|
|
//根据用户所属应用查询该应用母包openid查询用户信息
|
|
|
YtApp ytApp = appMapper.selectRiskApp(dyzUser.getAppId());
|
|
|
@@ -448,6 +461,14 @@ public class RiskServiceImpl implements RiskService {
|
|
|
riskLockUser(dyzUser, "322", "系统判定重复刷单用户限制", tips);
|
|
|
}
|
|
|
|
|
|
+ private boolean checkDyzUserIp(YtDyzUser dyzUser) {
|
|
|
+ String cacheKey = "risk:whiteIps";
|
|
|
+ if (!redisService.hasKey(cacheKey) || StrUtil.isEmpty(dyzUser.getLastLoginIp())) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return IPUtil.isIpInWhitelist(dyzUser.getLastLoginIp(), Arrays.asList(redisService.getStr(cacheKey).split(",")));
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 校验默认风控配置, 固定配置值不改
|
|
|
* days ?天内为1
|