Просмотр исходного кода

feat:调整青柠记账游客登陆风控逻辑

hidewnd 2 месяцев назад
Родитель
Сommit
4c6c3562a1

+ 3 - 0
yt-common/src/main/java/com/ytpm/general/RepMessage.java

@@ -48,4 +48,7 @@ public class RepMessage {
 
 
     public static final String WAITING_PAYMENT = "等待财务确认收款";
+
+    // 动态配置提示语
+    public static final String RISK_VISITOR_LOWER_VALUE = "visitor_lower_value";
 }

+ 2 - 1
yt-common/src/main/java/com/ytpm/handle/AbstractLoginService.java

@@ -11,6 +11,7 @@ import com.ytpm.app.model.YtDyzLoginRecord;
 import com.ytpm.app.model.YtDyzUser;
 import com.ytpm.app.param.LoginParam;
 import com.ytpm.app.view.WxDefaultConfig;
+import com.ytpm.general.RepMessage;
 import com.ytpm.general.Result;
 import com.ytpm.util.IPUtil;
 import org.springframework.beans.factory.annotation.Value;
@@ -243,7 +244,7 @@ public abstract class AbstractLoginService {
         }
         if (result.getCode() != 200) {
             String errorMessage = result.getMessage();
-            if (ytDyzUser.getLoginType() == LoginType.VISITOR && "visitor_lower_value".equals(errorMessage)) {
+            if (ytDyzUser.getLoginType() == LoginType.VISITOR && RepMessage.RISK_VISITOR_LOWER_VALUE.equals(errorMessage)) {
                 WxDefaultConfig defaultConfig = (WxDefaultConfig) paramMap.get("defaultConfig");
                 throw new CommonException(StrUtil.emptyToDefault(defaultConfig.getLowValueTip(), errorMessage));
             }

+ 2 - 2
yt-lime/lime-service/src/main/java/com/ytpm/lime/controller/VisitorController.java

@@ -2,7 +2,7 @@ package com.ytpm.lime.controller;
 
 import com.ytpm.app.enums.LoginType;
 import com.ytpm.app.model.YtDyzUser;
-import com.ytpm.app.param.WxLoginParam;
+import com.ytpm.app.param.VisitorLoginParam;
 import com.ytpm.general.Result;
 import com.ytpm.handle.LoginServiceFactory;
 import com.ytpm.lime.dao.AppUserMapper;
@@ -34,7 +34,7 @@ public class VisitorController {
     @PostMapping("/login")
     @ApiOperation("游客登录")
     @Transactional(rollbackFor = Exception.class)
-    public Result<YtDyzUser> visitorLogin(@RequestBody WxLoginParam param, HttpServletRequest request) {
+    public Result<YtDyzUser> visitorLogin(@RequestBody VisitorLoginParam param, HttpServletRequest request) {
         return loginServiceFactory.login(LoginType.VISITOR, param, request);
     }
 

+ 2 - 0
yt-lime/lime-service/src/main/java/com/ytpm/lime/dao/AdRecordMapper.java

@@ -44,4 +44,6 @@ public interface AdRecordMapper {
      * 查询今日广告
      */
     List<YtDyzAdRecord> getTodayRecord(@Param("appIds")String appIds,@Param("firstDay")String firstDay,@Param("lastDay")String lastDay);
+
+    List<YtDyzAdRecord> selectRecordByIds(@Param("ids") List<String> adRecordIds);
 }

+ 7 - 0
yt-lime/lime-service/src/main/java/com/ytpm/lime/service/AdService.java

@@ -2,6 +2,8 @@ package com.ytpm.lime.service;
 
 import com.ytpm.agent.view.AgentAdGroupStaticsVO;
 import com.ytpm.agent.view.AgentTopCountView;
+import com.ytpm.app.model.YtDyzAdRecord;
+import com.ytpm.app.model.YtDyzUser;
 import com.ytpm.app.param.DyzAdRecordParam;
 import com.ytpm.general.Result;
 import com.ytpm.middle.view.DashboardRankingListVO;
@@ -46,4 +48,9 @@ public interface AdService {
      * 查询代理商首页广告数据统计
      */
     List<AgentAdGroupStaticsVO> getAgentProfit(String appIds);
+
+    //    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
+    String saveRecordAndChangeUser(DyzAdRecordParam param, YtDyzUser user);
+
+    List<YtDyzAdRecord> queryRecordByIds(List<String> adRecordIds);
 }

+ 8 - 1
yt-lime/lime-service/src/main/java/com/ytpm/lime/service/impl/AdServiceImpl.java

@@ -287,7 +287,8 @@ public class AdServiceImpl implements AdService {
      *  始终创建新的事务以保障子方法的独立事务
      */
 //    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
-    public void saveRecordAndChangeUser(DyzAdRecordParam param,YtDyzUser user) {
+    @Override
+    public String saveRecordAndChangeUser(DyzAdRecordParam param, YtDyzUser user) {
         //增加广告记录
         YtDyzAdRecord adRecord = new YtDyzAdRecord();
         if(Objects.isNull(param.getBeginTime())){
@@ -303,5 +304,11 @@ public class AdServiceImpl implements AdService {
         dyzUser.setTotalVideo(Objects.isNull(user.getTotalVideo())?1:(user.getTotalVideo()+1));
         dyzUser.setTotalIncome(user.getTotalIncome().add(param.getRevenue()));
         appUserMapper.updateUser(dyzUser);
+        return adRecord.getRecordId();
+    }
+
+    @Override
+    public List<YtDyzAdRecord> queryRecordByIds(List<String> adRecordIds) {
+        return adRecordMapper.selectRecordByIds(adRecordIds);
     }
 }

+ 32 - 4
yt-lime/lime-service/src/main/java/com/ytpm/lime/service/impl/VisitorLoginServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ytpm.lime.service.impl;
 
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.RandomUtil;
 import cn.hutool.core.util.StrUtil;
@@ -8,23 +9,29 @@ import com.ytpm.agent.enums.UserStatusEnum;
 import com.ytpm.app.enums.LoginType;
 import com.ytpm.app.model.YtDyzLoginRecord;
 import com.ytpm.app.model.YtDyzUser;
+import com.ytpm.app.param.DyzAdRecordParam;
 import com.ytpm.app.param.LoginParam;
+import com.ytpm.app.param.VisitorLoginParam;
 import com.ytpm.app.view.WxDefaultConfig;
 import com.ytpm.constant.StrConstant;
 import com.ytpm.feign.RiskFeign;
+import com.ytpm.general.RepMessage;
 import com.ytpm.general.Result;
 import com.ytpm.handle.AbstractLoginService;
 import com.ytpm.handle.CommonException;
+import com.ytpm.handle.CustomerException;
 import com.ytpm.lime.dao.AppUserMapper;
 import com.ytpm.lime.dao.LoginRecordMapper;
 import com.ytpm.lime.dao.QuestionMapper;
 import com.ytpm.lime.redis.RedisService;
+import com.ytpm.lime.service.AdService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.Map;
@@ -48,6 +55,8 @@ public class VisitorLoginServiceImpl extends AbstractLoginService  {
     private RiskFeign riskFeign;
     @Autowired
     private RedisService redisService;
+    @Autowired
+    private AdService adService;
 
     @Override
     protected WxDefaultConfig getLoginConfig(Integer appType) {
@@ -149,10 +158,29 @@ public class VisitorLoginServiceImpl extends AbstractLoginService  {
         old.setLoginRecordList(loginRecordMapper.getLoginRecords(old.getUserId()));
     }
 
-    @Override
-    protected void beforeDeadWithUserCrud(LoginParam loginParam, YtDyzUser ytDyzUser, Map<String, Object> paramMap) {
-        super.beforeDeadWithUserCrud(loginParam, ytDyzUser, paramMap);
-        // 新增风控 相关广告源记录 ecpm  和预估收益 小于 各自 阈值,登陆返回 301
 
+    // 仅保存登陆时的三条广告信息 并传入登陆实体用于后续 risk风控校验
+    protected void saveVisitorAdRecord(YtDyzUser ytDyzUser, LoginParam loginParam, WxDefaultConfig defaultConfig) {
+        super.saveVisitorAdRecord(ytDyzUser, loginParam, defaultConfig);
+        VisitorLoginParam visitorLoginParam = (VisitorLoginParam) loginParam;
+        List<DyzAdRecordParam> preAdList = visitorLoginParam.getPreAdList();
+        List<String> adRecordIds = new ArrayList<>();
+        if (CollUtil.isNotEmpty(preAdList)) {
+            for (DyzAdRecordParam adRecordParam : preAdList) {
+                if (adRecordParam == null) {
+                    continue;
+                }
+                adRecordParam.setUserId(ytDyzUser.getUserId());
+                adRecordParam.setNickName(ytDyzUser.getNickName());
+                adRecordParam.setAppId(ytDyzUser.getAppId());
+                String recordId = adService.saveRecordAndChangeUser(adRecordParam, ytDyzUser);
+                adRecordIds.add(recordId);
+            }
+        }
+        if(CollUtil.isEmpty(adRecordIds)) {
+            throw new CustomerException(StrUtil.emptyToDefault(defaultConfig.getLowValueTip(), RepMessage.RISK_VISITOR_LOWER_VALUE));
+        }
+        ytDyzUser.setPreAdRecordList(adService.queryRecordByIds(adRecordIds));
     }
+
 }

+ 7 - 0
yt-lime/lime-service/src/main/resources/mapper/AdRecordMapper.xml

@@ -139,4 +139,11 @@
             and finish_time <![CDATA[<=]]> #{lastDay}
         </if>
     </select>
+
+    <select id="selectRecordByIds" resultType="com.ytpm.app.model.YtDyzAdRecord">
+        select
+        record_id, user_id, app_id, nick_name, placement_id, ad_source_id, ad_source_type, ad_source_index, revenue, ecpm, network_form_id, network_name, network_placement_id, finish_time, begin_time, result_json
+        from yt_dyz_ad_record
+        where record_id in <foreach collection="ids" item="id" open="(" close=")" separator=",">#{id}</foreach>
+    </select>
 </mapper>

+ 15 - 14
yt-lime/lime-service/src/main/resources/mapper/AppUserMapper.xml

@@ -72,22 +72,22 @@
     <insert id="saveAppConfig">
         insert into yt_app_default_config
         (
-         config_name,
-         open_id,
-         secret,
-         app_id,
-         app_key,
-         app_type
+            config_name,
+            open_id,
+            secret,
+            app_id,
+            app_key,
+            app_type
         )
         values
-        (
-         #{configName},
-         #{openId},
-         #{secret},
-         #{appId},
-         #{appKey},
-         #{appType}
-        )
+            (
+                #{configName},
+                #{openId},
+                #{secret},
+                #{appId},
+                #{appKey},
+                #{appType}
+            )
     </insert>
     <update id="updateAppConfig">
         update yt_app_default_config
@@ -430,6 +430,7 @@
         select
             config_id, config_name, open_id appId, secret, app_id platformAppId, app_key platformAppSecret, app_type,user_path,login_path,ad_path,answer_path,power_path
                      ,can_simulator,taku_app_id,taku_key,taku_banner_pid,taku_interstitial_pid,taku_reward_pid,taku_native_pid,can_use_adb,can_accumulation,can_use_float,can_use_root,ditch_id,power_wait_time,interstitial_interval_time
+            ,low_value_tip, brush_tip
         from yt_app_default_config
         where app_type = #{appType}
     </select>

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

@@ -1068,7 +1068,7 @@ public class RiskServiceImpl implements RiskService {
 
         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 checkResult ? Result.resultOk(RepMessage.RISK_SUCCESS) : Result.resultErr(RepMessage.RISK_VISITOR_LOWER_VALUE);
         }
         return Result.resultOk(RepMessage.RISK_SUCCESS);
     }