|
|
@@ -27,6 +27,7 @@ import com.ytpm.app.enums.LoginType;
|
|
|
import com.ytpm.app.model.YtDyzAdRecord;
|
|
|
import com.ytpm.app.model.YtDyzLoginRecord;
|
|
|
import com.ytpm.app.model.YtDyzUser;
|
|
|
+import com.ytpm.app.param.AdRecordStatisticParam;
|
|
|
import com.ytpm.custom.CustomField;
|
|
|
import com.ytpm.dao.AppMapper;
|
|
|
import com.ytpm.dao.DictMapper;
|
|
|
@@ -549,9 +550,9 @@ public class RiskServiceImpl implements RiskService {
|
|
|
return Result.resultOk(RepMessage.QUERY_SUCCESS);
|
|
|
}
|
|
|
try {
|
|
|
- // 校验风控767规则
|
|
|
- checkRisk767(dyzUser, adRecords);
|
|
|
- // 校验风控768规则
|
|
|
+ // 校验风控767规则 月记录数
|
|
|
+ checkRisk767(dyzUser, adRecords, userApp);
|
|
|
+ // 校验风控768规则,小时内记录数
|
|
|
checkRisk768(dyzUser, adRecords);
|
|
|
//过滤出当日的激励视频数据 按照时间正序排以便筛选每日前几条激励视频
|
|
|
adRecords = adRecords.stream().filter(s ->
|
|
|
@@ -599,7 +600,7 @@ public class RiskServiceImpl implements RiskService {
|
|
|
* 校验默认风控规则767
|
|
|
* {monthCount}月内,获得奖励的激励视频数>{monthTaskLimit}
|
|
|
*/
|
|
|
- private void checkRisk767(YtDyzUser dyzUser, List<YtDyzAdRecord> adRecords) {
|
|
|
+ private void checkRisk767(YtDyzUser dyzUser, List<YtDyzAdRecord> adRecords, YtPlatformUserApp userApp) {
|
|
|
RiskTemplateView riskTempView = configMapper.getByCode(dyzUser.getAppId() + "-767");
|
|
|
if (riskTempView == null || riskTempView.getEnabled() != 1) return;
|
|
|
Map<String, String> riskConfigMap = getRsihConfigMap(riskTempView);
|
|
|
@@ -607,13 +608,29 @@ public class RiskServiceImpl implements RiskService {
|
|
|
int monthTaskLimit = Integer.parseInt(riskConfigMap.getOrDefault("monthTaskLimit", "0"));
|
|
|
if (monthCount > 0 && monthTaskLimit > 0) {
|
|
|
Date limitStartDate = DateUtil.offset(new Date(), DateField.MONTH, -monthCount);
|
|
|
- List<YtDyzAdRecord> revenues = adRecords.stream().filter(
|
|
|
- s -> Objects.nonNull(s.getRevenue()) && (s.getRevenue().compareTo(BigDecimal.ZERO)) > 0)
|
|
|
- .filter(item -> DateUtil.parse(item.getFinishTime()).after(limitStartDate))
|
|
|
- .collect(Collectors.toList());
|
|
|
- if (revenues.size() > monthTaskLimit) {
|
|
|
+ int recordCount = 0;
|
|
|
+ try {
|
|
|
+ AdRecordStatisticParam param = new AdRecordStatisticParam();
|
|
|
+ param.setUserId(dyzUser.getUserId());
|
|
|
+ param.setAdSourceType(AdSourceTypeEnum.rewarded_video.getAdSourceType());
|
|
|
+ param.setStartTime(limitStartDate);
|
|
|
+ Object o = feignInvoker.invoke(userApp.getServiceName(), "queryRecordMonthCount", param);
|
|
|
+ JSONObject object = JSON.parseObject(JSON.toJSONString(o));
|
|
|
+ if (object.get("data") != null) {
|
|
|
+ recordCount = Integer.parseInt(object.get("data").toString());
|
|
|
+ }
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.warn("下游服务未实现接口 queryRecordMonthCount,使用原有逻辑");
|
|
|
+ List<YtDyzAdRecord> revenues = adRecords.stream().filter(
|
|
|
+ s -> Objects.nonNull(s.getRevenue()) && (s.getRevenue().compareTo(BigDecimal.ZERO)) > 0)
|
|
|
+ .filter(item -> DateUtil.parse(item.getFinishTime()).after(limitStartDate))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ recordCount = revenues.size();
|
|
|
+ }
|
|
|
+ if (recordCount > monthTaskLimit) {
|
|
|
+ log.warn(StrUtil.format("[risk 767] adRecord count[{}] > limit[{}]", recordCount, monthTaskLimit));
|
|
|
String format = StrUtil.emptyToDefault(dyzUser.getPowerLimitTip(), "当前设备完成任务次数过多,请{}后重试!");
|
|
|
- throw new CommonException(StrUtil.format(format,StrUtil.format("{}月", monthCount)));
|
|
|
+ throw new CommonException(StrUtil.format(format, StrUtil.format("{}月", monthCount)));
|
|
|
}
|
|
|
}
|
|
|
}
|