Browse Source

fix:修改游客登陆模式登陆

hidewnd 2 months ago
parent
commit
b27214e7f1

+ 2 - 2
yt-adage/adage-feign/src/main/java/com/ytpm/adage/feign/AdageFeign.java

@@ -30,9 +30,9 @@ import java.util.Map;
 
 @FeignClient(name = "adage-service")
 public interface AdageFeign {
-    @GetMapping("/getLoginDitchCount")
+    @GetMapping("/visitor/getLoginDitchCount")
     int getLoginDitchCount(@RequestParam("deviceId")String deviceId,@RequestParam("hours")Integer hours);
-    @GetMapping("/getDitchCount")
+    @GetMapping("/visitor/getDitchCount")
     int getDitchCount(@RequestParam("deviceId")String deviceId,@RequestParam("hours")Integer hours);
 
     @GetMapping("/user/getMonthRegistryUser")

+ 22 - 6
yt-adage/adage-service/src/main/java/com/ytpm/adage/controller/VisitorController.java

@@ -12,7 +12,7 @@ import com.ytpm.agent.enums.UserStatusEnum;
 import com.ytpm.app.model.YtDyzLoginRecord;
 import com.ytpm.app.model.YtDyzUser;
 import com.ytpm.app.param.WxLoginParam;
-import com.ytpm.app.view.WxUserInfo;
+import com.ytpm.app.view.WxDefaultConfig;
 import com.ytpm.constant.StrConstant;
 import com.ytpm.feign.RiskFeign;
 import com.ytpm.general.Result;
@@ -33,8 +33,11 @@ import org.springframework.web.bind.annotation.RestController;
 
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
+import java.util.Comparator;
 import java.util.Date;
+import java.util.List;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * @author Marx
@@ -63,12 +66,21 @@ public class VisitorController {
     @ApiOperation("游客登录")
     @Transactional(rollbackFor = Exception.class)
     public Result<YtDyzUser> visitorLogin(@RequestBody WxLoginParam param, HttpServletRequest request) {
+        // 唯一性判断
+        // 1.查询设备ID不存在记录 则根据设备id+渠道id注册用户
+        // 2.查询设备ID存在记录 则根据渠道ID控制唯一性,同步出路风控记录
+        //根据应用获取登陆配置
+        WxDefaultConfig defaultConfig = appUserMapper.getDefaultConfig(param.getAppType());
+        if(Objects.isNull(defaultConfig)){
+            return new Result<>(StatusCode.ACCESS_ERR,"游客登录失败,未找到相应配置!");
+        }
+        param.setAppId(defaultConfig.getPlatformAppId());
         param.setLoginIp(getClientIp(request));
-        //获取该设备最后一次注册的用户信息
-        YtDyzUser registryUser = appUserMapper.getLastRegistryUser(param.getDeviceId());
+        //获取该设备最后一次注册的用户信息(包含查询风控记录)
+        List<YtDyzUser> registryUser = appUserMapper.getLastRegistryUser(param.getDeviceId());
         //该设备未注册过用户
         YtDyzUser old;
-        if(Objects.isNull(registryUser)) {
+        if(CollUtil.isEmpty(registryUser)) {
             old = new YtDyzUser();
             registerUser(param, old);
         }else{
@@ -76,13 +88,17 @@ public class VisitorController {
             old = appUserMapper.getByDeviceAndDitch(param.getDeviceId(), param.getDitchId());
             //不存在则说明该渠道为新注册用户,需要风控校验注册是否在规则允许范围内
             if(Objects.isNull(old)) {
-                Result<?> result = riskFeign.checkRegRisk(registryUser);
+                YtDyzUser ytDyzUser = registryUser.stream()
+                        .sorted(Comparator.comparing(YtDyzUser::getRegistryTime).reversed())
+                        .collect(Collectors.toList()).get(0);
+                Result<?> result = riskFeign.checkRegRisk(ytDyzUser);
                 if(result.getCode()!=200){
                     return new Result<>(StatusCode.ACCESS_ERR,result.getMessage());
                 }
                 old = new YtDyzUser();
                 registerUser(param, old);
-            }else{//当前渠道已有用户,校验用户是否处于风控中 & 更新用户信息
+            }else{
+                //当前渠道已有用户,校验用户是否处于风控中 & 更新用户信息
                 if(!old.getUserStatus().equals(UserStatusEnum.NORMAL.getCode())){
                     return new Result<>(StatusCode.ACCESS_ERR,getTipsMsg());
                 }

+ 1 - 1
yt-adage/adage-service/src/main/java/com/ytpm/adage/dao/AppUserMapper.java

@@ -204,5 +204,5 @@ public interface AppUserMapper {
     /**
      * 查询设备最新注册的用户
      */
-    YtDyzUser getLastRegistryUser(@Param("deviceId")String deviceId);
+    List<YtDyzUser> getLastRegistryUser(@Param("deviceId")String deviceId);
 }

+ 1 - 2
yt-adage/adage-service/src/main/resources/mapper/AppUserMapper.xml

@@ -666,8 +666,7 @@
         select
             user_id, head_img, nick_name, registry_time, last_login_time, last_login_ip, login_days, total_video, total_income, red_packet_balance, red_packet_amount, points_balance, points_total, withdraw_total, sign_days, user_status, risk_reason, wx_open_id, ditch_id, app_id, platform_id, power, phone, device_id, phone_json
         from yt_dyz_user
-        where user_status = 1 and device_id = #{deviceId}
-        order by registry_time desc limit 1
+        where device_id = #{deviceId}
     </select>
     <update id="unlockUser">
         update yt_dyz_user

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

@@ -934,12 +934,12 @@ public class RiskServiceImpl implements RiskService {
      * 校验游客登录323规则
      */
     private void checkVisitor323(YtDyzUser dyzUser, RiskTemplateView view) {
-        List<RiskConfigView> configList = view.getConfigList();
+        List<RiskConfigView> configList = view == null ? Collections.emptyList() : view.getConfigList();
         Map<String, String> configMap = configList.stream().collect(
                 Collectors.toMap(RiskConfigView::getFieldName, RiskConfigView::getConfigVal));
         //判断同应用 UID生成数如果不小于配置数则触发规则校验
-        int uidCount = Integer.parseInt(configMap.get("uidCount"));
-        int hours = Integer.parseInt(configMap.get("hours"));
+        int uidCount = Integer.parseInt(configMap.getOrDefault("uidCount", "0"));
+        int hours = Integer.parseInt(configMap.getOrDefault("hours", "0"));
         //根据用户所属应用查询该应用母包openid查询用户信息
         YtApp ytApp = appMapper.selectRiskApp(dyzUser.getAppId());
         YtPlatformUserApp userApp =  appMapper.selectParentApp(ytApp.getSuperiorId());
@@ -958,13 +958,13 @@ public class RiskServiceImpl implements RiskService {
      */
     private Result<?> checkReg333(YtDyzUser dyzUser, RiskTemplateView view) {
         //根据用户所属应用查询该应用母包openid查询用户信息
-        List<RiskConfigView> configList = view.getConfigList();
+        List<RiskConfigView> configList = view == null ? Collections.emptyList() : view.getConfigList();
         Map<String, String> configMap = configList.stream().collect(
                 Collectors.toMap(RiskConfigView::getFieldName, RiskConfigView::getConfigVal));
         //得到配置的注册数
-        int uidCount = Integer.parseInt(configMap.get("uidCount"));
+        int uidCount = Integer.parseInt(configMap.getOrDefault("uidCount", "0"));
         //得到配置的时间间隔
-        int hours = Integer.parseInt(configMap.get("hours"));
+        int hours = Integer.parseInt(configMap.getOrDefault("hours", "0"));
 
         //根据用户所属应用查询该应用母包openid查询用户信息
         YtApp ytApp = appMapper.selectRiskApp(dyzUser.getAppId());