Explorar el Código

feat: nofeeds调整游客登陆风控逻辑

hidewnd hace 2 meses
padre
commit
97ff5db64b

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

@@ -2,7 +2,7 @@ package com.ytpm.nofeeds.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.nofeeds.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-nofeeds/nofeeds-service/src/main/java/com/ytpm/nofeeds/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);
 }

+ 6 - 0
yt-nofeeds/nofeeds-service/src/main/java/com/ytpm/nofeeds/service/AdService.java

@@ -2,6 +2,8 @@ package com.ytpm.nofeeds.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,8 @@ public interface AdService {
      * 查询代理商首页广告数据统计
      */
     List<AgentAdGroupStaticsVO> getAgentProfit(String appIds);
+
+    String saveRecordAndChangeUser(DyzAdRecordParam param, YtDyzUser user);
+
+    List<YtDyzAdRecord> queryRecordByIds(List<String> adRecordIds);
 }

+ 9 - 1
yt-nofeeds/nofeeds-service/src/main/java/com/ytpm/nofeeds/service/impl/AdServiceImpl.java

@@ -286,7 +286,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())){
@@ -302,5 +303,12 @@ 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);
+    }
+
 }

+ 33 - 5
yt-nofeeds/nofeeds-service/src/main/java/com/ytpm/nofeeds/service/impl/VisitorLoginServiceImpl.java

@@ -1,6 +1,7 @@
 package com.ytpm.nofeeds.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.nofeeds.dao.AppUserMapper;
 import com.ytpm.nofeeds.dao.LoginRecordMapper;
 import com.ytpm.nofeeds.dao.QuestionMapper;
 import com.ytpm.nofeeds.redis.RedisService;
+import com.ytpm.nofeeds.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));
     }
-}
+
+}

+ 6 - 0
yt-nofeeds/nofeeds-service/src/main/resources/mapper/AdRecordMapper.xml

@@ -139,4 +139,10 @@
             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>

+ 1 - 0
yt-nofeeds/nofeeds-service/src/main/resources/mapper/AppUserMapper.xml

@@ -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
              ,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,can_simulator,ditch_id,power_wait_time,interstitial_interval_time
+             ,low_value_tip, brush_tip
         from yt_app_default_config
         where app_type = #{appType}
     </select>

+ 4 - 2
yt-nofeeds/nofeeds-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">