Przeglądaj źródła

解决登录问题

zhangchen 1 dzień temu
rodzic
commit
f275e700a2

+ 3 - 1
alien-gateway/src/main/java/shop/alien/gateway/controller/LifeUserController.java

@@ -11,6 +11,8 @@ import shop.alien.gateway.config.BaseRedisService;
 import shop.alien.gateway.service.ActivityInviteConfigService;
 import shop.alien.gateway.service.LifeUserService;
 
+import java.util.Objects;
+
 /**
  * 用户
  */
@@ -50,7 +52,7 @@ public class LifeUserController {
             return R.fail("登录失败");
         }
 
-        if (1 == userVo.getIsBanned()) {
+        if (Objects.equals(userVo.getIsBanned(), 1)) {
             return R.fail("您的账户因严重违规导致被封禁");
         }
 

+ 26 - 5
alien-gateway/src/main/java/shop/alien/gateway/service/LifeUserService.java

@@ -144,16 +144,20 @@ public class LifeUserService extends ServiceImpl<LifeUserGatewayMapper, LifeUser
     }
 
     public LifeUserVo userLogin(String phoneNum, String inviteCode, String macIp) {
-        LifeUser user = getUserByPhone(phoneNum);
+        LifeUser user = getUserByPhoneNew(phoneNum);
         if (user == null) {
             LifeUser lifeUser = new LifeUser();
             lifeUser.setUserPhone(phoneNum);
             lifeUser.setUserName(phoneNum);
             lifeUser.setRealName(phoneNum);
+            lifeUser.setLogoutFlag(LifeUser.LOGOUT_FLAG_NORMAL);
             lifeUser.setCreatedTime(new Date());
             int ret = lifeUserMapper.insert(lifeUser);
             if (ret == 1) {
-                LifeUser user2 = getUserByPhone(phoneNum);
+                LifeUser user2 = lifeUser.getId() != null ? lifeUser : getUserByPhoneNew(phoneNum);
+                if (user2 == null) {
+                    return null;
+                }
                 LifeUserVo userVo = new LifeUserVo();
                 BeanUtils.copyProperties(user2, userVo);
                 Map<String, String> tokenMap = new HashMap<>();
@@ -235,9 +239,26 @@ public class LifeUserService extends ServiceImpl<LifeUserGatewayMapper, LifeUser
     }
 
     public LifeUser getUserByPhone(String phoneNum) {
-        LambdaQueryWrapper<LifeUser> lambdaQueryWrapper = new LambdaQueryWrapper<>();
-        lambdaQueryWrapper.eq(LifeUser::getUserPhone, phoneNum);
-        return this.getOne(lambdaQueryWrapper);
+        return findLatestActiveUserByPhone(phoneNum);
+    }
+
+    public LifeUser getUserByPhoneNew(String phoneNum) {
+        return findLatestActiveUserByPhone(phoneNum);
+    }
+
+    /**
+     * 按手机号取最新可用用户:未注销或冷静期;logout_flag 为空视为未注销(历史数据)
+     */
+    private LifeUser findLatestActiveUserByPhone(String phoneNum) {
+        LambdaQueryWrapper<LifeUser> w = new LambdaQueryWrapper<>();
+        w.eq(LifeUser::getUserPhone, phoneNum);
+        w.and(x -> x.isNull(LifeUser::getLogoutFlag)
+                .or().eq(LifeUser::getLogoutFlag, LifeUser.LOGOUT_FLAG_NORMAL)
+                .or().eq(LifeUser::getLogoutFlag, LifeUser.LOGOUT_FLAG_COOLING));
+        w.orderByDesc(LifeUser::getCreatedTime).orderByDesc(LifeUser::getId);
+        w.last("LIMIT 1");
+        List<LifeUser> list = this.list(w);
+        return list.isEmpty() ? null : list.get(0);
     }
 
     public LifeUser getUserByPhoneDelete(String phoneNum) {