Prechádzať zdrojové kódy

fix:修改游客登陆及风控流程

hidewnd 2 mesiacov pred
rodič
commit
16f938f26a

+ 3 - 0
yt-adage/adage-service/src/main/java/com/ytpm/adage/service/impl/VisitorLoginServiceImpl.java

@@ -166,6 +166,9 @@ public class VisitorLoginServiceImpl extends AbstractLoginService  {
         List<String> adRecordIds = new ArrayList<>();
         if (CollUtil.isNotEmpty(preAdList)) {
             for (DyzAdRecordParam adRecordParam : preAdList) {
+                adRecordParam.setUserId(ytDyzUser.getUserId());
+                adRecordParam.setNickName(ytDyzUser.getNickName());
+                adRecordParam.setAppId(ytDyzUser.getAppId());
                 String recordId = adService.saveRecordAndChangeUser(adRecordParam, ytDyzUser);
                 adRecordIds.add(recordId);
             }

+ 4 - 2
yt-adage/adage-service/src/main/resources/mapper/LoginRecordMapper.xml

@@ -13,7 +13,8 @@
          login_ip,
          operator,
          ip_addr,
-         phone_json
+         phone_json,
+         login_type
         )
         values
         (
@@ -25,7 +26,8 @@
          #{loginIp},
          #{operator},
          #{ipAddr},
-         #{phoneJson}
+         #{phoneJson},
+         #{loginType}
          );
     </insert>
     <select id="getLoginRecords" resultType="com.ytpm.app.model.YtDyzLoginRecord">

+ 2 - 0
yt-common/src/main/java/com/ytpm/app/model/YtDyzLoginRecord.java

@@ -43,4 +43,6 @@ public class YtDyzLoginRecord {
     private String ipAddr;
     @ApiModelProperty("手机信息json")
     private String phoneJson;
+    @ApiModelProperty("登陆类型")
+    private String loginType;
 }

+ 4 - 0
yt-common/src/main/java/com/ytpm/app/model/YtDyzUser.java

@@ -1,5 +1,6 @@
 package com.ytpm.app.model;
 
+import com.ytpm.app.enums.LoginType;
 import com.ytpm.custom.CustomField;
 import com.ytpm.general.PageMeta;
 import io.swagger.annotations.ApiModel;
@@ -144,4 +145,7 @@ public class YtDyzUser extends PageMeta {
 
     @ApiModelProperty(value = "登陆前三条广告记录")
     List<YtDyzAdRecord> preAdRecordList;
+
+    @ApiModelProperty(value = "当前登陆方式")
+    private LoginType loginType;
 }

+ 19 - 8
yt-common/src/main/java/com/ytpm/handle/AbstractLoginService.java

@@ -20,8 +20,8 @@ import javax.servlet.http.HttpServletRequest;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
-import java.util.Objects;
 import java.util.Map;
+import java.util.Objects;
 
 /**
  * <p>登陆模板</p>
@@ -89,9 +89,9 @@ public abstract class AbstractLoginService {
         // 配置额外信息
         setExtInfo(ytDyzUser, paramMap);
         // 添加用户登录记录
-        addLoginRecord(loginParam,ytDyzUser.getUserId());
+        addLoginRecord(loginParam,ytDyzUser);
         // 调用风控服务校验默认风控配置
-        ytRiskValidate(ytDyzUser);
+        ytRiskValidate(ytDyzUser, paramMap);
         return ytDyzUser;
     }
 
@@ -115,6 +115,7 @@ public abstract class AbstractLoginService {
             beforeDeadWithUserCrud(loginParam, ytDyzUser, paramMap);
             deadWithUserCrud(loginParam, ytDyzUser, paramMap);
         }
+        ytDyzUser.setLoginType(LoginType.WX);
         return ytDyzUser;
     }
 
@@ -147,6 +148,7 @@ public abstract class AbstractLoginService {
         // 保存广告信息
         WxDefaultConfig defaultConfig = (WxDefaultConfig) paramMap.get("defaultConfig");
         saveVisitorAdRecord(ytDyzUser, loginParam, defaultConfig);
+        ytDyzUser.setLoginType(LoginType.VISITOR);
         return ytDyzUser;
     }
 
@@ -210,10 +212,10 @@ public abstract class AbstractLoginService {
     // 已注册用户处理逻辑
     protected abstract void deadWithUserCrud(LoginParam loginParam, YtDyzUser old, Map<String, Object> paramMap);
 
-    private void addLoginRecord(LoginParam param, String userId) {
+    private void addLoginRecord(LoginParam param, YtDyzUser old) {
         YtDyzLoginRecord loginRecord = new YtDyzLoginRecord();
         loginRecord.setRecordId(IdUtil.fastSimpleUUID());
-        loginRecord.setUserId(userId);
+        loginRecord.setUserId(old.getUserId());
         loginRecord.setLoginTime(new Date());
         loginRecord.setDeviceBrand(param.getBrand());
         loginRecord.setDeviceModel(param.getModel());
@@ -221,6 +223,7 @@ public abstract class AbstractLoginService {
         loginRecord.setOperator(param.getIpOperator());
         loginRecord.setIpAddr(param.getIpLocation());
         loginRecord.setPhoneJson(param.getPhoneJson());
+        loginRecord.setLoginType(old.getLoginType().toString());
         saveLoginRecord(loginRecord);
     }
 
@@ -233,10 +236,18 @@ public abstract class AbstractLoginService {
     /**
      * 调用风控服务校验默认风控配置
      */
-    protected void ytRiskValidate(YtDyzUser ytDyzUser) {
+    protected void ytRiskValidate(YtDyzUser ytDyzUser, Map<String, Object> paramMap) {
         Result<?> result = remoteCheckLoginRisk(ytDyzUser);
-        if (result == null || result.getCode() != 200) {
-            throw new CommonException(result == null ? "feign invoke Fail!" : result.getMessage());
+        if (result == null) {
+            throw new CommonException("feign invoke Fail!");
+        }
+        if (result.getCode() != 200) {
+            String errorMessage = result.getMessage();
+            if (ytDyzUser.getLoginType() == LoginType.VISITOR && "visitor_lower_value".equals(errorMessage)) {
+                WxDefaultConfig defaultConfig = (WxDefaultConfig) paramMap.get("defaultConfig");
+                throw new CommonException(StrUtil.emptyToDefault(defaultConfig.getLowValueTip(), errorMessage));
+            }
+            throw new CommonException(errorMessage);
         }
     }
 

+ 2 - 2
yt-middle/middle-platform/src/main/java/com/ytpm/middle/service/impl/ApkServiceImpl.java

@@ -298,7 +298,7 @@ public class ApkServiceImpl implements ApkService {
         String agentId = param.getUserId();
         List<YtRiskConfig> configs = new ArrayList<>();
         YtRiskConfig riskConfig = createRiskConfig(param.getUserId(), "revenueLimit",
-                StrUtil.format("开屏广告、横幅、原生(信息流)总预估收益>{},", initVisitorEcpmLimit), initVisitorEcpmLimit, 4);
+                StrUtil.format("开屏广告、横幅、原生(信息流)总预估收益>{},", initVisitorEcpmLimit), initVisitorEcpmLimit, 3);
         configs.add(riskConfig);
         String templateId = IdUtil.getSnowflakeNextIdStr();
         YtRiskTemplate template = new YtRiskTemplate(templateId, "游客用户总预估收益限制",
@@ -319,7 +319,7 @@ public class ApkServiceImpl implements ApkService {
         String agentId = param.getUserId();
         List<YtRiskConfig> configs = new ArrayList<>();
         YtRiskConfig riskConfig = createRiskConfig(param.getUserId(), "ecpmLimit",
-                StrUtil.format("开屏广告、横幅、原生(信息流)总ecpm<{},", initVisitorEcpmLimit), initVisitorEcpmLimit, 4);
+                StrUtil.format("开屏广告、横幅、原生(信息流)总ecpm<{},", initVisitorEcpmLimit), initVisitorEcpmLimit, 3);
         configs.add(riskConfig);
         String templateId = IdUtil.getSnowflakeNextIdStr();
         YtRiskTemplate template = new YtRiskTemplate(templateId, "游客用户总ecpm限制",

+ 7 - 2
yt-risk/risk-manage/src/main/java/com/ytpm/service/impl/RiskServiceImpl.java

@@ -23,6 +23,7 @@ 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.enums.LoginType;
 import com.ytpm.app.model.YtDyzAdRecord;
 import com.ytpm.app.model.YtDyzLoginRecord;
 import com.ytpm.app.model.YtDyzUser;
@@ -1064,8 +1065,12 @@ public class RiskServiceImpl implements RiskService {
 //        RiskTemplateView view = configMapper.getByCode(dyzUser.getAppId() + "-323");
 //        checkVisitor323(dyzUser, view);
         // 游客用户总收益校验
-        boolean checkResult = checkVisitorRisk(dyzUser);
-        return checkResult ? Result.resultOk(RepMessage.RISK_SUCCESS) : Result.resultErr(RepMessage.ALREADY_RISK_USER);
+
+        if(dyzUser.getLoginType() != null && LoginType.VISITOR == dyzUser.getLoginType()){
+            boolean checkResult = checkVisitorRisk(dyzUser);
+            return checkResult ? Result.resultOk(RepMessage.RISK_SUCCESS) : Result.resultErr("visitor_lower_value");
+        }
+        return Result.resultOk(RepMessage.RISK_SUCCESS);
     }
 
     /**