Bläddra i källkod

refactor: 登陆模板简化兼容多类型用户

hidewnd 1 månad sedan
förälder
incheckning
1436851ccc

+ 50 - 130
yt-common/src/main/java/com/ytpm/handle/AbstractLoginService.java

@@ -6,7 +6,7 @@ import cn.hutool.core.util.StrUtil;
 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.model.YtUser;
 import com.ytpm.app.param.LoginParam;
 import com.ytpm.app.view.WxDefaultConfig;
 import com.ytpm.general.RepMessage;
@@ -14,12 +14,10 @@ import com.ytpm.general.Result;
 import com.ytpm.util.IPUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
-import org.springframework.util.CollectionUtils;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.Date;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.Objects;
 
@@ -27,15 +25,10 @@ import java.util.Objects;
  * <p>登陆模板</p>
  * 兼容多登陆模式及风控校验
  * <p>需重写方法:<br>
- * 1.登陆参数校验 validateParams
- * 2.根据设备及渠道ID查询用户 queryUserByDeviceAndDitch
- * 3.获取登陆默认配置 getLoginConfig
- * 4.根据登陆参数获取系统用户 queryDyzUserByParam
- * 5.用户新注册逻辑 registryUser
- * 6.已注册用户处理逻辑 deadWithUserCrud
- * 7.登陆记录保存 saveLoginRecord
- * 8.远程调用风控 remoteCheckLoginRisk
- * 9.远程调用风控 remoteCheckRegRisk
+ * 1.登陆参数校验 validateParams<br>
+ * 2.获取登陆默认配置 getLoginConfig<br>
+ * 3.登陆记录保存 saveLoginRecord<br>
+ * 4.远程调用风控 remoteCheckLoginRisk
  * </p>
  *
  * <p>回调方法:<br>
@@ -45,7 +38,7 @@ import java.util.Objects;
  *
  * <p>可选重写方法:<br>
  * 1.第三方登陆调用处理及参数传递 setThirdPartyLoginInfo <br>
- * 2.登陆成功后调用风控服务校验 ytRiskValidate
+ * 2.登陆成功后调用风控服务校验 loginRiskCheck<br>
  * 3.登陆用户信息配置额外信息 setExtInfo
  * </p>
  *
@@ -66,13 +59,14 @@ public abstract class AbstractLoginService {
 
     /**
      * 登陆逻辑处理
+     *
      * @param loginParam 登陆参数
-     * @param request request
+     * @param request    request
      * @return YtDyzUser
      */
-    public final YtDyzUser loginHandle(LoginParam loginParam, HttpServletRequest request) {
+    public final <T extends YtUser> T loginHandle(LoginParam loginParam, HttpServletRequest request) {
         loginParam.setLoginIp(IPUtil.getClientIp(request));
-        // 获取默认配置
+        // 获取子包默认配置
         WxDefaultConfig defaultConfig = getLoginConfig(loginParam.getAppType());
         if (Objects.isNull(defaultConfig)) {
             throw new CommonException(StrUtil.format("{}登录失败,未找到相应配置!", getLoginType().getTypeName()));
@@ -82,91 +76,40 @@ public abstract class AbstractLoginService {
         validateParams(loginParam, request);
         // 获取第三方登陆信息 如微信授权码、微信登陆后授权信息
         Map<String, Object> paramMap = setThirdPartyLoginInfo(loginParam, defaultConfig, request);
-        YtDyzUser ytDyzUser;
-        if (getLoginType() == LoginType.VISITOR) {
-            // 游客模式
-            paramMap.put("defaultConfig", defaultConfig);
-            ytDyzUser = visitorLoginHandle(loginParam, paramMap);
-        } else {
-            ytDyzUser = clientLoginHandle(loginParam, paramMap);
-        }
+        paramMap.put("defaultConfig", defaultConfig);
+        YtUser yuUser = loginHandler(loginParam, paramMap);
         // 配置额外信息
-        setExtInfo(ytDyzUser, paramMap);
+        setExtInfo(yuUser, paramMap);
         // 添加用户登录记录
-        addLoginRecord(loginParam,ytDyzUser);
+        addLoginRecord(loginParam, yuUser);
         // 调用风控服务校验默认风控配置
-        ytRiskValidate(ytDyzUser, paramMap);
+        loginRiskCheck(yuUser, paramMap);
         // 游客登陆 校验通过 更新用户状态为正常
         if (getLoginType() == LoginType.VISITOR) {
-            updateUserStatus(ytDyzUser, UserStatusEnum.NORMAL, null);
+            updateUserStatus(yuUser, UserStatusEnum.NORMAL, null);
         }
-        return ytDyzUser;
+        return (T) yuUser;
     }
 
-    protected abstract void updateUserStatus(YtDyzUser ytDyzUser, UserStatusEnum statusEnum, String reason);
-
     /**
-     * 登陆参数校验
+     * 获取登陆默认配置
      */
-    protected abstract void validateParams(LoginParam loginParam, HttpServletRequest request);
+    protected abstract WxDefaultConfig getLoginConfig(Integer appType);
 
     /**
-     * 微信端/IOS端登陆
+     * 回调方法 登陆参数校验
      */
-    private YtDyzUser clientLoginHandle(LoginParam loginParam, Map<String, Object> paramMap) {
-        YtDyzUser ytDyzUser;
-        List<YtDyzUser> ytDyzUsers = queryDyzUserByParam(loginParam, paramMap);
-        if (CollectionUtils.isEmpty(ytDyzUsers)) {
-            beforeRegistryUser(loginParam, paramMap);
-            ytDyzUser = new YtDyzUser();
-            registryUser(loginParam, ytDyzUser, paramMap);
-        } else {
-            ytDyzUser = ytDyzUsers.get(0);
-            beforeDeadWithUserCrud(loginParam, ytDyzUser, paramMap);
-            deadWithUserCrud(loginParam, ytDyzUser, paramMap);
-        }
-        ytDyzUser.setLoginType(LoginType.WX);
-        return ytDyzUser;
-    }
+    protected abstract void validateParams(LoginParam loginParam, HttpServletRequest request);
 
     /**
-     * 游客模式登录
+     * 登陆实现
      */
-    private YtDyzUser visitorLoginHandle(LoginParam loginParam, Map<String, Object> paramMap) {
-        // 唯一性判断
-        YtDyzUser ytDyzUser = queryUserByDeviceAndDitch(loginParam.getDeviceId(), loginParam.getDitchId());
-        if(ytDyzUser == null) {
-            log.warn(StrUtil.format("visitor register[ deviceId:{}, ditchId: {}]",
-                    loginParam.getDeviceId(), loginParam.getDitchId()));
-            beforeRegistryUser(loginParam, paramMap);
-            ytDyzUser = new YtDyzUser();
-            ytDyzUser = registryUser(loginParam, ytDyzUser, paramMap);
-        } else {
-            log.warn(StrUtil.format("visitor login[ deviceId:{}, ditchId: {}]",
-                    loginParam.getDeviceId(), loginParam.getDitchId()));
-            //当前渠道已有用户,校验用户是否处于风控中 & 更新用户信息
-            beforeDeadWithUserCrud(loginParam, ytDyzUser, paramMap);
-            //如果当前登录是本日第一次登录则登录天数+1
-            //202550916 游客登陆不记录登陆信息
-            deadWithUserCrud(loginParam, ytDyzUser, paramMap);
-        }
-        // 保存游客广告信息
-        WxDefaultConfig defaultConfig = (WxDefaultConfig) paramMap.get("defaultConfig");
-        saveVisitorAdRecord(ytDyzUser, loginParam, defaultConfig);
-        ytDyzUser.setLoginType(LoginType.VISITOR);
-        return ytDyzUser;
-    }
-
-    // 游客登陆时保存传递记录
-    protected void saveVisitorAdRecord(YtDyzUser ytDyzUser, LoginParam loginParam, WxDefaultConfig defaultConfig) {
-
-    }
-
+    protected abstract YtUser loginHandler(LoginParam loginParam, Map<String, Object> paramMap);
 
     /**
-     * 根据设备及渠道ID查询用户
+     * 回调方法 用于更新用户状态
      */
-    protected abstract YtDyzUser queryUserByDeviceAndDitch(String deviceId, Long ditchId);
+    protected abstract void updateUserStatus(YtUser ytDyzUser, UserStatusEnum statusEnum, String reason);
 
 
     /**
@@ -174,51 +117,34 @@ public abstract class AbstractLoginService {
      */
     protected Map<String, Object> setThirdPartyLoginInfo(LoginParam loginParam, WxDefaultConfig defaultConfig,
                                                          HttpServletRequest request) {
-        Map<String, Object> map = new HashMap<>();
-        return map;
+        return new HashMap<>();
     }
 
-
-    /**
-     * 获取登陆默认配置
-     */
-    protected abstract WxDefaultConfig getLoginConfig(Integer appType);
-
     /**
-     * 根据登陆配置信息 查询系统用户记录
-     * @param loginParam 登陆参数
-     * @param thirdPartyLoginInfo 第三方登陆西悉尼
+     * 用户注册前统一回调
      */
-    protected abstract List<YtDyzUser> queryDyzUserByParam(LoginParam loginParam, Map<String, Object> thirdPartyLoginInfo);
-
-
-    // 注册用户处理器回调
-    protected void beforeRegistryUser(LoginParam loginParam, Map<String, Object> paramMap){
+    protected void beforeRegistryUser(LoginParam loginParam, Map<String, Object> paramMap) {
 
     }
 
-    // 用户注册逻辑
-    protected abstract YtDyzUser registryUser(LoginParam loginParam,YtDyzUser user,  Map<String, Object> paramMap);
-
-    // 已注册用户处理前回调
-    protected void beforeDeadWithUserCrud(LoginParam loginParam, YtDyzUser ytDyzUser, Map<String, Object> paramMap){
+    /**
+     * 用户登陆统一回调校验
+     */
+    protected void beforeDeadWithUserCrud(LoginParam loginParam, YtUser ytDyzUser, Map<String, Object> paramMap) {
         //当前渠道已有用户,校验用户是否处于风控中 & 更新用户信息
-        if(ytDyzUser != null && !ytDyzUser.getUserStatus().equals(UserStatusEnum.NORMAL.getCode())
-                && !ytDyzUser.getUserStatus().equals(UserStatusEnum.VISITOR_LOCK.getCode())){
+        if (ytDyzUser != null && !ytDyzUser.getUserStatus().equals(UserStatusEnum.NORMAL.getCode())
+                && !ytDyzUser.getUserStatus().equals(UserStatusEnum.VISITOR_LOCK.getCode())) {
             throw new CommonException(getTipsMsg());
         }
     }
 
-    private String getTipsMsg(){
+    private String getTipsMsg() {
         String[] split = tips.split(",");
         return split[RandomUtil.randomInt(split.length)];
     }
 
 
-    // 已注册用户处理逻辑
-    protected abstract void deadWithUserCrud(LoginParam loginParam, YtDyzUser old, Map<String, Object> paramMap);
-
-    private void addLoginRecord(LoginParam param, YtDyzUser old) {
+    private void addLoginRecord(LoginParam param, YtUser old) {
         YtDyzLoginRecord loginRecord = new YtDyzLoginRecord();
         loginRecord.setRecordId(IdUtil.fastSimpleUUID());
         loginRecord.setUserId(old.getUserId());
@@ -239,17 +165,25 @@ public abstract class AbstractLoginService {
     protected abstract void saveLoginRecord(YtDyzLoginRecord loginRecord);
 
 
+    /**
+     * 登陆成功, 组装传递信息
+     *
+     */
+    protected void setExtInfo(YtUser ytUser, Map<String, Object> paramMap) {
+        ytUser.setServiceName(applicationName);
+    }
+
     /**
      * 调用风控服务校验默认风控配置
      */
-    protected void ytRiskValidate(YtDyzUser ytDyzUser, Map<String, Object> paramMap) {
-        Result<?> result = remoteCheckLoginRisk(ytDyzUser);
+    protected void loginRiskCheck(YtUser ytUser, Map<String, Object> paramMap) {
+        Result<?> result = remoteCheckLoginRisk(ytUser);
         if (result == null) {
             throw new CommonException("feign invoke Fail!");
         }
         if (result.getCode() != 200) {
             String errorMessage = result.getMessage();
-            if (ytDyzUser.getLoginType() == LoginType.VISITOR && RepMessage.RISK_VISITOR_LOWER_VALUE.equals(errorMessage)) {
+            if (ytUser.getLoginType() == LoginType.VISITOR && RepMessage.RISK_VISITOR_LOWER_VALUE.equals(errorMessage)) {
                 WxDefaultConfig defaultConfig = (WxDefaultConfig) paramMap.get("defaultConfig");
                 throw new CommonException(StrUtil.emptyToDefault(defaultConfig.getLowValueTip(), errorMessage));
             }
@@ -257,25 +191,11 @@ public abstract class AbstractLoginService {
         }
     }
 
-    /**
-     * 配置相关信息
-     *
-     * @param ytDyzUser
-     * @param paramMap
-     */
-    protected void setExtInfo(YtDyzUser ytDyzUser, Map<String, Object> paramMap) {
-        ytDyzUser.setServiceName(applicationName);
-    }
-
     /**
      * 远程调用校验用户风控,需设置风控编码[riskCode],并重写该方法
-     * @param ytDyzUser 当前用户
+     *
+     * @param ytUser 当前用户
      */
-    protected abstract Result<?> remoteCheckLoginRisk(YtDyzUser ytDyzUser);
+    protected abstract Result<?> remoteCheckLoginRisk(YtUser ytUser);
 
-    /**
-     * 远程调用校验注册用户
-     * @param user 参数
-     */
-    protected abstract Result<?> remoteCheckRegRisk(YtDyzUser user);
 }

+ 4 - 3
yt-common/src/main/java/com/ytpm/handle/LoginServiceFactory.java

@@ -3,6 +3,7 @@ package com.ytpm.handle;
 
 import com.ytpm.app.enums.LoginType;
 import com.ytpm.app.model.YtDyzUser;
+import com.ytpm.app.model.YtUser;
 import com.ytpm.app.param.LoginParam;
 import com.ytpm.general.RepMessage;
 import com.ytpm.general.Result;
@@ -46,11 +47,11 @@ public class LoginServiceFactory {
         return service;
     }
 
-    public Result<YtDyzUser> login(LoginType loginType, LoginParam param, HttpServletRequest request) {
+    public <T extends YtUser> Result<T> login(LoginType loginType, LoginParam param, HttpServletRequest request) {
         try {
             AbstractLoginService loginService = getLoginService(loginType);
-            YtDyzUser ytDyzUser = loginService.loginHandle(param, request);
-            return Result.resultOk(RepMessage.LOGIN_SUCCESS, ytDyzUser);
+            T ytUser = loginService.loginHandle(param, request);
+            return Result.resultOk(RepMessage.LOGIN_SUCCESS, ytUser);
         } catch (CommonException e) {
             return new Result<>(StatusCode.ACCESS_ERR, e.getMessage());
         } catch (IllegalArgumentException e) {

+ 62 - 57
yt-question/yt-question-service/src/main/java/com/ytpm/question/service/impl/VisitorLoginServiceImpl.java

@@ -11,6 +11,7 @@ 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.model.YtUser;
 import com.ytpm.app.param.DyzAdRecordParam;
 import com.ytpm.app.param.LoginParam;
 import com.ytpm.app.param.VisitorLoginParam;
@@ -70,18 +71,13 @@ public class VisitorLoginServiceImpl extends AbstractLoginService {
         return appUserMapper.getDefaultConfig(appType);
     }
 
-    @Override
-    protected YtDyzUser queryUserByDeviceAndDitch(String deviceId, Long ditchId) {
-        return appUserMapper.getByDeviceAndDitch(deviceId, ditchId);
-    }
-
     @Override
     protected LoginType getLoginType() {
         return LoginType.VISITOR;
     }
 
     @Override
-    protected void updateUserStatus(YtDyzUser ytDyzUser, UserStatusEnum statusEnum, String reason) {
+    protected void updateUserStatus(YtUser ytDyzUser, UserStatusEnum statusEnum, String reason) {
         if (ytDyzUser != null) {
             YtDyzUser newUser = new YtDyzUser();
             newUser.setUserId(ytDyzUser.getUserId());
@@ -125,52 +121,66 @@ public class VisitorLoginServiceImpl extends AbstractLoginService {
     }
 
     @Override
-    protected List<YtDyzUser> queryDyzUserByParam(LoginParam loginParam, Map<String, Object> thirdPartyLoginInfo) {
-        return appUserMapper.getLastRegistryUser(loginParam.getDeviceId());
+    protected YtUser loginHandler(LoginParam loginParam, Map<String, Object> paramMap) {
+        // 唯一性判断
+        YtDyzUser ytDyzUser = appUserMapper.getByDeviceAndDitch(loginParam.getDeviceId(), loginParam.getDitchId());
+        if (ytDyzUser == null) {
+            log.warn(StrUtil.format("visitor register[ deviceId:{}, ditchId: {}]",
+                    loginParam.getDeviceId(), loginParam.getDitchId()));
+            beforeRegistryUser(loginParam, paramMap);
+            ytDyzUser = registryUser(loginParam, paramMap);
+        } else {
+            log.warn(StrUtil.format("visitor login[ deviceId:{}, ditchId: {}]",
+                    loginParam.getDeviceId(), loginParam.getDitchId()));
+            //当前渠道已有用户,校验用户是否处于风控中 & 更新用户信息
+            beforeDeadWithUserCrud(loginParam, ytDyzUser, paramMap);
+            //如果当前登录是本日第一次登录则登录天数+1
+            //202550916 游客登陆不记录登陆信息
+            deadWithUserCrud(loginParam, ytDyzUser, paramMap);
+        }
+        // 保存游客广告信息
+        WxDefaultConfig defaultConfig = (WxDefaultConfig) paramMap.get("defaultConfig");
+        saveVisitorAdRecord(ytDyzUser, loginParam, defaultConfig);
+        ytDyzUser.setLoginType(LoginType.VISITOR);
+        return ytDyzUser;
     }
 
-    @Override
-    protected YtDyzUser registryUser(LoginParam loginParam, YtDyzUser user, Map<String, Object> paramMap) {
-        user.setUserId(redisService.getAppUserId());
-        user.setPhone(loginParam.getPhone());
-        user.setDeviceId(loginParam.getDeviceId());
-        user.setNickName("visitor_" + RandomUtil.randomString(10));
-        user.setLastLoginTime(new Date());
-        user.setRegistryTime(new Date());
-        user.setLastLoginIp(loginParam.getLoginIp());
-        user.setLoginDays(1);
-        user.setPower(0);
-        user.setTotalVideo(0);
-        user.setTotalIncome(BigDecimal.ZERO);
-        user.setRedPacketAmount(BigDecimal.ZERO);
-        user.setRedPacketBalance(BigDecimal.ZERO);
-        user.setPointsBalance(BigDecimal.ZERO);
-        user.setPointsTotal(BigDecimal.ZERO);
-        user.setWithdrawTotal(BigDecimal.ZERO);
-        user.setDitchId(loginParam.getDitchId());
-        user.setSignDays(0);
-        user.setAppId(loginParam.getAppId());
-        user.setUserStatus(UserStatusEnum.NORMAL.getCode());
+    private YtDyzUser registryUser(LoginParam loginParam, Map<String, Object> paramMap) {
+        YtDyzUser newUser = new YtDyzUser();
+        newUser.setUserId(redisService.getAppUserId());
+        newUser.setPhone(loginParam.getPhone());
+        newUser.setDeviceId(loginParam.getDeviceId());
+        newUser.setNickName("visitor_" + RandomUtil.randomString(10));
+        newUser.setLastLoginTime(new Date());
+        newUser.setRegistryTime(new Date());
+        newUser.setLastLoginIp(loginParam.getLoginIp());
+        newUser.setLoginDays(1);
+        newUser.setPower(0);
+        newUser.setTotalVideo(0);
+        newUser.setTotalIncome(BigDecimal.ZERO);
+        newUser.setRedPacketAmount(BigDecimal.ZERO);
+        newUser.setRedPacketBalance(BigDecimal.ZERO);
+        newUser.setPointsBalance(BigDecimal.ZERO);
+        newUser.setPointsTotal(BigDecimal.ZERO);
+        newUser.setWithdrawTotal(BigDecimal.ZERO);
+        newUser.setDitchId(loginParam.getDitchId());
+        newUser.setSignDays(0);
+        newUser.setAppId(loginParam.getAppId());
+        newUser.setUserStatus(UserStatusEnum.NORMAL.getCode());
         String platformId = appUserMapper.getPlatformByDeviceId(loginParam.getDeviceId());
-        user.setPlatformId(StrUtil.isBlank(platformId) ?
+        newUser.setPlatformId(StrUtil.isBlank(platformId) ?
                 (StrConstant.PLATFORM_ID_PREFIX + IdUtil.getSnowflakeNextIdStr()) : platformId);
-        appUserMapper.addOne(user);
-        return user;
+        appUserMapper.addOne(newUser);
+        return newUser;
     }
 
-    @Override
-    protected void deadWithUserCrud(LoginParam loginParam, YtDyzUser old, Map<String, Object> paramMap) {
+    private void deadWithUserCrud(LoginParam loginParam, YtUser old, Map<String, Object> paramMap) {
         YtDyzUser newUser = new YtDyzUser();
         newUser.setUserId(old.getUserId());
         newUser.setLastLoginTime(new Date());
         newUser.setLastLoginIp(loginParam.getLoginIp());
         newUser.setPhone(loginParam.getPhone());
         newUser.setDeviceId(loginParam.getDeviceId());
-        //如果当前登录是本日第一次登录则登录天数+1
-//        int loginCount = loginRecordMapper.getTodayLoginCount(old.getUserId());
-//        if (loginCount < 1) {
-//            newUser.setLoginDays(old.getLoginDays() + 1);
-//        }
         appUserMapper.updateUser(newUser);
     }
 
@@ -180,32 +190,27 @@ public class VisitorLoginServiceImpl extends AbstractLoginService {
     }
 
     @Override
-    protected Result<?> remoteCheckLoginRisk(YtDyzUser ytDyzUser) {
-        return riskFeign.checkLoginRisk(ytDyzUser);
-    }
-
-    @Override
-    protected Result<?> remoteCheckRegRisk(YtDyzUser user) {
-        return riskFeign.checkRegRisk(user);
+    protected Result<?> remoteCheckLoginRisk(YtUser ytUser) {
+        return riskFeign.checkLoginRisk((YtDyzUser) ytUser);
     }
 
     /**
      * 设置扩展信息
      */
     @Override
-    protected void setExtInfo(YtDyzUser old, Map<String, Object> paramMap) {
-        super.setExtInfo(old, paramMap);
-        old.setLastQuestionId(questionMapper.getLastQuestionId(old.getUserId()));
-        old.setTodayAnswerCount(questionMapper.getAnswerCount(old.getUserId(), 1));
-        old.setHistoryAnswerCount(questionMapper.getAnswerCount(old.getUserId(), 2));
-        old.setAnswerRecordList(questionMapper.getAnswerRecords(old.getUserId()));
-        old.setLoginRecordList(loginRecordMapper.getLoginRecords(old.getUserId()));
+    protected void setExtInfo(YtUser ytUser, Map<String, Object> paramMap) {
+        super.setExtInfo(ytUser, paramMap);
+        YtDyzUser dyzUser = (YtDyzUser) ytUser;
+        dyzUser.setLastQuestionId(questionMapper.getLastQuestionId(dyzUser.getUserId()));
+        dyzUser.setTodayAnswerCount(questionMapper.getAnswerCount(dyzUser.getUserId(), 1));
+        dyzUser.setHistoryAnswerCount(questionMapper.getAnswerCount(dyzUser.getUserId(), 2));
+        dyzUser.setAnswerRecordList(questionMapper.getAnswerRecords(dyzUser.getUserId()));
+        dyzUser.setLoginRecordList(loginRecordMapper.getLoginRecords(dyzUser.getUserId()));
     }
 
 
     // 仅保存登陆时的三条广告信息 并传入登陆实体用于后续 risk风控校验
-    protected void saveVisitorAdRecord(YtDyzUser ytDyzUser, LoginParam loginParam, WxDefaultConfig defaultConfig) {
-        super.saveVisitorAdRecord(ytDyzUser, loginParam, defaultConfig);
+    private void saveVisitorAdRecord(YtDyzUser ytDyzUser, LoginParam loginParam, WxDefaultConfig defaultConfig) {
         VisitorLoginParam visitorLoginParam = (VisitorLoginParam) loginParam;
         List<DyzAdRecordParam> preAdList = visitorLoginParam.getPreAdList();
         // 保存登陆前传递的广告记录
@@ -227,7 +232,7 @@ public class VisitorLoginServiceImpl extends AbstractLoginService {
             log.info(StrUtil.format("[visitor adRecords] userId:{} recordCount:{} revenue:{} ",
                     ytDyzUser.getUserId(), adRecordIds.size(), totalRevenue));
         }
-        if(CollUtil.isEmpty(adRecordIds)) {
+        if (CollUtil.isEmpty(adRecordIds)) {
             throw new CustomerException(StrUtil.emptyToDefault(defaultConfig.getLowValueTip(), RepMessage.RISK_VISITOR_LOWER_VALUE));
         }
         ytDyzUser.setPreAdRecordList(adService.queryRecordByIds(adRecordIds));

+ 35 - 28
yt-question/yt-question-service/src/main/java/com/ytpm/question/service/impl/WxLoginServiceImpl.java

@@ -10,6 +10,7 @@ import com.ytpm.app.enums.AppTypeEnums;
 import com.ytpm.app.enums.LoginType;
 import com.ytpm.app.model.YtDyzLoginRecord;
 import com.ytpm.app.model.YtDyzUser;
+import com.ytpm.app.model.YtUser;
 import com.ytpm.app.param.LoginParam;
 import com.ytpm.app.param.WxLoginParam;
 import com.ytpm.app.view.WxDefaultConfig;
@@ -27,6 +28,7 @@ import com.ytpm.question.redis.RedisService;
 import com.ytpm.question.service.AppUserService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
@@ -71,7 +73,7 @@ public class WxLoginServiceImpl extends AbstractLoginService {
     }
 
     @Override
-    protected void updateUserStatus(YtDyzUser ytDyzUser, UserStatusEnum statusEnum, String reason) {
+    protected void updateUserStatus(YtUser ytDyzUser, UserStatusEnum statusEnum, String reason) {
 
     }
 
@@ -80,6 +82,22 @@ public class WxLoginServiceImpl extends AbstractLoginService {
 
     }
 
+    @Override
+    protected YtUser loginHandler(LoginParam loginParam, Map<String, Object> paramMap) {
+        YtUser ytUser;
+        List<YtDyzUser> ytDyzUsers = queryDyzUserByParam(loginParam, paramMap);
+        if (CollectionUtils.isEmpty(ytDyzUsers)) {
+            beforeRegistryUser(loginParam, paramMap);
+            ytUser = registryUser(loginParam, paramMap);
+        } else {
+            ytUser = ytDyzUsers.get(0);
+            beforeDeadWithUserCrud(loginParam, ytUser, paramMap);
+            deadWithUserCrud(loginParam, ytUser, paramMap);
+        }
+        ytUser.setLoginType(LoginType.WX);
+        return ytUser;
+    }
+
     @Override
     protected Map<String, Object> setThirdPartyLoginInfo(LoginParam loginParam, WxDefaultConfig defaultConfig, HttpServletRequest request) {
         WxLoginParam param = (WxLoginParam) loginParam;
@@ -130,13 +148,6 @@ public class WxLoginServiceImpl extends AbstractLoginService {
     }
 
 
-    @Override
-    protected YtDyzUser queryUserByDeviceAndDitch(String deviceId, Long ditchId) {
-        return null;
-    }
-
-
-    @Override
     protected List<YtDyzUser> queryDyzUserByParam(LoginParam loginParam, Map<String, Object> thirdPartyLoginInfo) {
         WxLoginParam param = (WxLoginParam) loginParam;
         WxLoginResult loginResult = (WxLoginResult) thirdPartyLoginInfo.get("loginResult");
@@ -145,8 +156,8 @@ public class WxLoginServiceImpl extends AbstractLoginService {
         return ytDyzUser == null ? Collections.emptyList() : Collections.singletonList(ytDyzUser);
     }
 
-    @Override
-    protected YtDyzUser registryUser(LoginParam param, YtDyzUser old, Map<String, Object> paramMap) {
+    private YtDyzUser registryUser(LoginParam param, Map<String, Object> paramMap) {
+        YtDyzUser old = new YtDyzUser();
         WxLoginResult loginResult = (WxLoginResult) paramMap.get("loginResult");
         WxUserInfo wxUserInfo = (WxUserInfo) paramMap.get("wxUserInfo");
         old.setUserId(redisService.getAppUserId());
@@ -177,14 +188,12 @@ public class WxLoginServiceImpl extends AbstractLoginService {
         old.setPlatformId(StrUtil.isBlank(platformId) ?
                 (StrConstant.PLATFORM_ID_PREFIX + IdUtil.getSnowflakeNextIdStr()) : platformId);
         appUserMapper.addOne(old);
-        return null;
+        return old;
     }
 
-    @Override
-    protected void deadWithUserCrud(LoginParam param, YtDyzUser old, Map<String, Object> paramMap) {
+    private void deadWithUserCrud(LoginParam param, YtUser old, Map<String, Object> paramMap) {
         WxLoginResult loginResult = (WxLoginResult) paramMap.get("loginResult");
         WxUserInfo wxUserInfo = (WxUserInfo) paramMap.get("wxUserInfo");
-
         YtDyzUser newUser = new YtDyzUser();
         newUser.setUserId(old.getUserId());
         newUser.setNickName(wxUserInfo.getNickname());
@@ -204,25 +213,23 @@ public class WxLoginServiceImpl extends AbstractLoginService {
     }
 
     @Override
-    protected Result<?> remoteCheckLoginRisk(YtDyzUser ytDyzUser) {
-        ytDyzUser.setRiskCode("313");
-        return riskFeign.checkRisk(ytDyzUser);
+    protected Result<?> remoteCheckLoginRisk(YtUser ytUser) {
+        ytUser.setRiskCode("313");
+        return riskFeign.checkRisk((YtDyzUser) ytUser);
     }
 
-    @Override
-    protected Result<?> remoteCheckRegRisk(YtDyzUser user) {
-        return null;
-    }
 
     @Override
-    protected void setExtInfo(YtDyzUser old, Map<String, Object> paramMap) {
+    protected void setExtInfo(YtUser ytUser, Map<String, Object> paramMap) {
+        super.setExtInfo(ytUser, paramMap);
+        YtDyzUser dyzUser = (YtDyzUser) ytUser;
         WxUserInfo wxUserInfo = (WxUserInfo) paramMap.get("wxUserInfo");
-        old.setHeadImg(wxUserInfo.getHeadimgurl());
-        old.setLastQuestionId(questionMapper.getLastQuestionId(old.getUserId()));
-        old.setTodayAnswerCount(questionMapper.getAnswerCount(old.getUserId(), 1));
-        old.setHistoryAnswerCount(questionMapper.getAnswerCount(old.getUserId(), 2));
-        old.setAnswerRecordList(questionMapper.getAnswerRecords(old.getUserId()));
-        old.setLoginRecordList(loginRecordMapper.getLoginRecords(old.getUserId()));
+        dyzUser.setHeadImg(wxUserInfo.getHeadimgurl());
+        dyzUser.setLastQuestionId(questionMapper.getLastQuestionId(dyzUser.getUserId()));
+        dyzUser.setTodayAnswerCount(questionMapper.getAnswerCount(dyzUser.getUserId(), 1));
+        dyzUser.setHistoryAnswerCount(questionMapper.getAnswerCount(dyzUser.getUserId(), 2));
+        dyzUser.setAnswerRecordList(questionMapper.getAnswerRecords(dyzUser.getUserId()));
+        dyzUser.setLoginRecordList(loginRecordMapper.getLoginRecords(dyzUser.getUserId()));
     }