|
|
@@ -8,24 +8,30 @@ import cn.hutool.core.text.CharSequenceUtil;
|
|
|
import cn.hutool.core.util.IdUtil;
|
|
|
import cn.hutool.core.util.RandomUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.JSONArray;
|
|
|
+import com.alibaba.fastjson.JSONObject;
|
|
|
import com.github.pagehelper.PageHelper;
|
|
|
import com.github.pagehelper.PageInfo;
|
|
|
import com.ytpm.advertise.enums.AdSourceTypeEnum;
|
|
|
+import com.ytpm.agent.model.YtApp;
|
|
|
import com.ytpm.agent.model.YtPlatformBanned;
|
|
|
import com.ytpm.agent.model.YtPlatformDeblocking;
|
|
|
+import com.ytpm.agent.model.YtPlatformUserApp;
|
|
|
import com.ytpm.agent.view.AgentAppClassView;
|
|
|
import com.ytpm.agent.view.AgentEnableAppView;
|
|
|
import com.ytpm.agent.view.AgentUserInfo;
|
|
|
import com.ytpm.app.model.YtDyzAdRecord;
|
|
|
import com.ytpm.app.model.YtDyzLoginRecord;
|
|
|
import com.ytpm.app.model.YtDyzUser;
|
|
|
-import com.ytpm.app.param.AppUserParam;
|
|
|
import com.ytpm.custom.CustomField;
|
|
|
+import com.ytpm.dao.AppMapper;
|
|
|
import com.ytpm.dao.DictMapper;
|
|
|
import com.ytpm.dao.RiskConfigMapper;
|
|
|
import com.ytpm.dao.RiskManageMapper;
|
|
|
import com.ytpm.dao.RiskUserMapper;
|
|
|
import com.ytpm.feign.AppFeign;
|
|
|
+import com.ytpm.general.PageMeta;
|
|
|
import com.ytpm.general.RepMessage;
|
|
|
import com.ytpm.general.Result;
|
|
|
import com.ytpm.general.ResultTable;
|
|
|
@@ -48,6 +54,7 @@ import com.ytpm.risk.view.RiskConfigView;
|
|
|
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.RedisService;
|
|
|
import com.ytpm.util.ReflectUtil;
|
|
|
import io.swagger.annotations.ApiModelProperty;
|
|
|
@@ -73,9 +80,6 @@ import java.util.List;
|
|
|
import java.util.Map;
|
|
|
import java.util.Objects;
|
|
|
import java.util.Set;
|
|
|
-import java.util.concurrent.Executors;
|
|
|
-import java.util.concurrent.ScheduledExecutorService;
|
|
|
-import java.util.concurrent.TimeUnit;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@Slf4j(topic = "风控服务")
|
|
|
@@ -83,6 +87,8 @@ import java.util.stream.Collectors;
|
|
|
@RefreshScope
|
|
|
public class RiskServiceImpl extends ReflectUtil implements RiskService {
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private FeignClientInvoker feignInvoker;
|
|
|
@Value("${risk.banned.defaultLimit}")
|
|
|
private Integer defaultLimit;
|
|
|
@Value("${risk.banned.defaultReason}")
|
|
|
@@ -95,14 +101,12 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
|
|
|
private RiskUserMapper riskUserMapper;
|
|
|
@Resource
|
|
|
private RiskManageMapper riskManageMapper;
|
|
|
- @Resource
|
|
|
- private AppFeign appFeign;
|
|
|
- @Autowired
|
|
|
- private IRunFeign iRunFeign;
|
|
|
@Value("${risk.banned.tips}")
|
|
|
private String tips;
|
|
|
@Resource
|
|
|
private RedisService redisService;
|
|
|
+ @Resource
|
|
|
+ private AppMapper appMapper;
|
|
|
/**
|
|
|
* 查询配置字段选项
|
|
|
*/
|
|
|
@@ -264,70 +268,12 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
|
|
|
PageHelper.startPage(param.getPage(),param.getLimit());
|
|
|
List<RiskBannedListView> bannedList = riskManageMapper.getBannedList(param);
|
|
|
if(CollUtil.isNotEmpty(bannedList)){
|
|
|
- setBannedLoginInfo(bannedList);
|
|
|
+// setBannedLoginInfo(bannedList);
|
|
|
}
|
|
|
return ResultTable.resultTableOk(new PageInfo<RiskBannedListView>(bannedList));
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 查询登录记录并设置信息
|
|
|
- */
|
|
|
- private void setBannedLoginInfo(List<RiskBannedListView> bannedList) {
|
|
|
- String userIds = bannedList.stream().map(
|
|
|
- RiskBannedListView::getUserId).distinct().collect(Collectors.joining(","));
|
|
|
- AppUserParam appUserParam = new AppUserParam();
|
|
|
- appUserParam.setUserIds(userIds);
|
|
|
- List<YtDyzUser> data = appFeign.getUserList(appUserParam);
|
|
|
- List<YtDyzUser> irunData = iRunFeign.getUserList(appUserParam).getData();
|
|
|
- if(CollUtil.isNotEmpty(irunData)){data.addAll(irunData);}
|
|
|
- Map<String, YtDyzUser> collect = data.stream().collect(Collectors.toMap(YtDyzUser::getUserId, o->o));
|
|
|
- for (RiskBannedListView view : bannedList) {
|
|
|
- if(!collect.containsKey(view.getUserId()))continue;
|
|
|
- YtDyzUser dyzUser = collect.get(view.getUserId());
|
|
|
- List<YtDyzLoginRecord> recordList = dyzUser.getLoginRecordList();
|
|
|
- if(CollUtil.isNotEmpty(recordList)){
|
|
|
- view.setPhoneModel(recordList.get(0).getDeviceModel());
|
|
|
- view.setPhoneBrand(recordList.get(0).getDeviceBrand());
|
|
|
- view.setIpAddr(recordList.get(0).getIpAddr());
|
|
|
- view.setCommunicationOperator(recordList.get(0).getOperator());
|
|
|
- }
|
|
|
- view.setPlatformId(dyzUser.getPlatformId());
|
|
|
- view.setChannelId(dyzUser.getUserId());
|
|
|
- view.setUserId(dyzUser.getUserId());
|
|
|
- view.setNickName(dyzUser.getNickName());
|
|
|
- view.setRegistryTime(dyzUser.getRegistryTime());
|
|
|
- view.setLastLoginIp(dyzUser.getLastLoginIp());
|
|
|
- view.setLastLoginTime(dyzUser.getLastLoginTime());
|
|
|
- view.setUserStatus(dyzUser.getUserStatus());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 设置解封用户信息
|
|
|
- */
|
|
|
- private void setDeblockLoginInfo(List<RiskDeblockingListView> deblockingList,RiskDeblockingListParam param) {
|
|
|
- String userIds = deblockingList.stream().map(
|
|
|
- RiskDeblockingListView::getUserId).distinct().collect(Collectors.joining(","));
|
|
|
- AppUserParam appUserParam = new AppUserParam();
|
|
|
- appUserParam.setUserIds(userIds);
|
|
|
- appUserParam.setLoginTimeBegin(param.getLoginTimeBegin());
|
|
|
- appUserParam.setLoginTimeEnd(param.getLoginTimeEnd());
|
|
|
- List<YtDyzUser> data = appFeign.getUserList(appUserParam);
|
|
|
- List<YtDyzUser> irunData = iRunFeign.getUserList(appUserParam).getData();
|
|
|
- if(CollUtil.isNotEmpty(irunData)){data.addAll(irunData);}
|
|
|
- Map<String, YtDyzUser> collect = data.stream().collect(Collectors.toMap(YtDyzUser::getUserId, o->o));
|
|
|
- for (RiskDeblockingListView view : deblockingList) {
|
|
|
- if(!collect.containsKey(view.getUserId()))continue;
|
|
|
- YtDyzUser dyzUser = collect.get(view.getUserId());
|
|
|
- view.setPlatformId(dyzUser.getPlatformId());
|
|
|
- view.setChannelId(dyzUser.getUserId());
|
|
|
- view.setUserId(dyzUser.getUserId());
|
|
|
- view.setNickName(dyzUser.getNickName());
|
|
|
- view.setRegistryTime(dyzUser.getRegistryTime());
|
|
|
- view.setLastLoginTime(dyzUser.getLastLoginTime());
|
|
|
- view.setUserStatus(dyzUser.getUserStatus());
|
|
|
- }
|
|
|
- }
|
|
|
+
|
|
|
/**
|
|
|
* 查询解封记录
|
|
|
*/
|
|
|
@@ -336,7 +282,7 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
|
|
|
PageHelper.startPage(param.getPage(),param.getLimit());
|
|
|
List<RiskDeblockingListView> deblockingList = riskManageMapper.getDeblockingList(param);
|
|
|
if(CollUtil.isNotEmpty(deblockingList)){
|
|
|
- setDeblockLoginInfo(deblockingList,param);
|
|
|
+// setDeblockLoginInfo(deblockingList,param);
|
|
|
}
|
|
|
return ResultTable.resultTableOk(new PageInfo<RiskDeblockingListView>(deblockingList));
|
|
|
}
|
|
|
@@ -458,12 +404,12 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
|
|
|
*/
|
|
|
private void checkRisk322(YtDyzUser dyzUser) {
|
|
|
RiskTemplateView view = configMapper.getByCode("322");
|
|
|
- //根据openid查询用户信息
|
|
|
- List<YtDyzUser> dyzUsers = appFeign.queryByOpenid(dyzUser.getWxOpenId());
|
|
|
- List<YtDyzUser> irunUsers = iRunFeign.queryByOpenid(dyzUser.getWxOpenId());
|
|
|
- if(CollUtil.isNotEmpty(irunUsers)){
|
|
|
- dyzUsers.addAll(irunUsers);
|
|
|
- }
|
|
|
+ //根据用户所属应用查询该应用母包openid查询用户信息
|
|
|
+ YtApp ytApp = appMapper.selectRiskApp(dyzUser.getAppId());
|
|
|
+ YtPlatformUserApp userApp = appMapper.selectParentApp(ytApp.getSuperiorId());
|
|
|
+ Object o = feignInvoker.invoke(userApp.getServiceName(),"queryByOpenid",dyzUser.getWxOpenId());
|
|
|
+ List<YtDyzUser> dyzUsers = JSONArray.parseArray(JSON.toJSONString(o), YtDyzUser.class);
|
|
|
+
|
|
|
List<RiskConfigView> configList = view.getConfigList();
|
|
|
Map<String, String> configMap = configList.stream().collect(
|
|
|
Collectors.toMap(RiskConfigView::getFieldName, RiskConfigView::getConfigVal));
|
|
|
@@ -538,27 +484,25 @@ public class RiskServiceImpl extends ReflectUtil implements RiskService {
|
|
|
if(CollUtil.isNotEmpty(vo)){
|
|
|
return Result.resultOk(RepMessage.QUERY_SUCCESS);
|
|
|
}
|
|
|
- ResultTable<YtDyzAdRecord> table = appFeign.adRecords(dyzUser.getUserId(),AdSourceTypeEnum.rewarded_video.getAdSourceType());
|
|
|
- List<YtDyzAdRecord> records = table.getData();
|
|
|
- List<YtDyzAdRecord> irunData = iRunFeign.adRecords(dyzUser.getUserId(),AdSourceTypeEnum.rewarded_video.getAdSourceType()).getData();
|
|
|
- if(CollUtil.isNotEmpty(irunData)){records.addAll(irunData);}
|
|
|
-
|
|
|
- if(CollUtil.isEmpty(records)){
|
|
|
+ YtApp ytApp = appMapper.selectRiskApp(dyzUser.getAppId());
|
|
|
+ YtPlatformUserApp 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);
|
|
|
}
|
|
|
//过滤出当日的激励视频数据 按照时间正序排以便筛选每日前几条激励视频
|
|
|
- records = records.stream().filter(s->
|
|
|
+ adRecords = adRecords.stream().filter(s->
|
|
|
DateUtil.isSameDay(DateUtil.parse(s.getFinishTime()), new Date())
|
|
|
).sorted(Comparator.comparing(YtDyzAdRecord::getFinishTime)).collect(Collectors.toList());
|
|
|
//校验风控742规则
|
|
|
RiskTemplateView ecpmLimit= configMapper.getByCode(dyzUser.getAppId()+"-742");
|
|
|
- checkRisk742(ecpmLimit,dyzUser,records);
|
|
|
+ checkRisk742(ecpmLimit,dyzUser,adRecords);
|
|
|
//校验风控746规则
|
|
|
- if(!records.isEmpty() && records.size()>1){
|
|
|
- checkRisk746(dyzUser,records);
|
|
|
+ if(!adRecords.isEmpty() && adRecords.size()>1){
|
|
|
+ checkRisk746(dyzUser,adRecords);
|
|
|
}
|
|
|
- //查询用户所在app是否配置其他风控规则
|
|
|
-// checkCustomRisk(dyzUser,EffectNodeEnum.ADSOURCE.getNode(),table.getData());
|
|
|
return Result.resultOk(RepMessage.QUERY_SUCCESS);
|
|
|
}
|
|
|
|