Prechádzať zdrojové kódy

fix:用户登录诸多问题

caozixuan 3 rokov pred
rodič
commit
9faf55f90c

+ 21 - 8
distributed-print/src/main/java/com/qmth/distributed/print/api/SysController.java

@@ -17,16 +17,14 @@ import com.qmth.teachcloud.common.bean.result.UserLoginCheckResult;
 import com.qmth.teachcloud.common.config.DictionaryConfig;
 import com.qmth.teachcloud.common.contant.SystemConstant;
 import com.qmth.teachcloud.common.entity.*;
-import com.qmth.teachcloud.common.enums.AppSourceEnum;
-import com.qmth.teachcloud.common.enums.DownloadFileEnum;
-import com.qmth.teachcloud.common.enums.ExceptionResultEnum;
-import com.qmth.teachcloud.common.enums.UploadFileEnum;
+import com.qmth.teachcloud.common.enums.*;
 import com.qmth.teachcloud.common.service.*;
 import com.qmth.teachcloud.common.util.ConvertUtil;
 import com.qmth.teachcloud.common.util.Result;
 import com.qmth.teachcloud.common.util.ResultUtil;
 import com.qmth.teachcloud.common.util.ServletUtil;
 import io.swagger.annotations.*;
+import org.apache.catalina.User;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -43,6 +41,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * @Date: 2021/3/30.
@@ -146,7 +145,13 @@ public class SysController {
         }
         // 校验验证码
         sysUserService.checkSmsCode(sysUser.getId(), sysUser.getMobileNumber(), login.getCode());
-        return ResultUtil.ok(teachcloudCommonService.login(login.getPassword(), sysUser, AppSourceEnum.SYSTEM));
+        LoginResult loginResult = teachcloudCommonService.login(login.getPassword(), sysUser, AppSourceEnum.SYSTEM);
+
+        // 如果不是共用验证码再过期
+        if (!dictionaryConfig.smsDomain().getSmsNormalCode().equals(login.getCode())) {
+            sysUserService.expiredVerifyCode(sysUser.getId(), sysUser.getMobileNumber());
+        }
+        return ResultUtil.ok(loginResult);
     }
 
     /**
@@ -178,7 +183,9 @@ public class SysController {
         QueryWrapper<SysUser> wrapper = new QueryWrapper<>();
         if (StringUtils.isNotBlank(loginParam.getSchoolCode())) {
             BasicSchool basicSchool = commonCacheService.schoolCache(loginParam.getSchoolCode());
-            wrapper.lambda().eq(SysUser::getSchoolId, basicSchool.getId());
+            if (Objects.nonNull(basicSchool)) {
+                wrapper.lambda().eq(SysUser::getSchoolId, basicSchool.getId());
+            }
         }
         wrapper.lambda().eq(SysUser::getLoginName, loginName);
         SysUser user = sysUserService.getOne(wrapper);
@@ -190,13 +197,19 @@ public class SysController {
             throw ExceptionResultEnum.ERROR.exception("密码错误");
         }
         String mobileNumber = loginParam.getMobileNumber();
-        if (!SystemConstant.strNotNull(mobileNumber)){
+        if (!SystemConstant.strNotNull(mobileNumber)) {
             mobileNumber = user.getMobileNumber();
         }
         if (SystemConstant.strNotNull(mobileNumber)) {
             basicVerifyCodeService.sendVeirfyCode(mobileNumber, user.getId());
         }
-        UserLoginCheckResult userLoginCheckResult = new UserLoginCheckResult(user.getId(),mobileNumber,user.getPwdCount());
+        int pwdCount = user.getPwdCount();
+        List<SysRole> sysRoleList = sysUserRoleService.listRoleByUserId(user.getId());
+        if (sysRoleList.stream().map(SysRole::getType).collect(Collectors.toSet()).contains(RoleTypeEnum.ADMIN)) {
+            mobileNumber = user.getLoginName() + "(特权用户)";
+            pwdCount = 1;
+        }
+        UserLoginCheckResult userLoginCheckResult = new UserLoginCheckResult(user.getId(), mobileNumber, pwdCount);
         return ResultUtil.ok(userLoginCheckResult, "");
     }
 

+ 12 - 2
teachcloud-common/src/main/java/com/qmth/teachcloud/common/mapper/SysUserMapper.java

@@ -51,9 +51,19 @@ public interface SysUserMapper extends BaseMapper<SysUser> {
 
     /**
      * 根据用户(id和手机号)查询验证码发送几率
-     * @param userId 用户id
+     *
+     * @param userId       用户id
      * @param mobileNumber 用户手机号
      * @return 验证码记录结果
      */
-    List<VerifyCodeCheckDto> findVerifyCodeByUser(@Param("userId") Long userId,@Param("mobileNumber") String mobileNumber);
+    List<VerifyCodeCheckDto> findVerifyCodeByUser(@Param("userId") Long userId, @Param("mobileNumber") String mobileNumber);
+
+    /**
+     * 根据用户(id和手机号)查询验证码发送几率
+     *
+     * @param userId       用户id
+     * @param mobileNumber 用户手机号
+     * @return 更新条数
+     */
+    int updateVerifyCodeExpiredTime(@Param("userId") Long userId, @Param("mobileNumber") String mobileNumber);
 }

+ 7 - 0
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/SysUserService.java

@@ -141,6 +141,13 @@ public interface SysUserService extends IService<SysUser> {
      */
     void checkSmsCode(Long userId, String mobileNumber, String code);
 
+    /**
+     * 强行过期用户手机号验证码(过期时间改为验证码发送时间)
+     * @param userId 用户id
+     * @param mobileNumber 用户手机号
+     */
+    void expiredVerifyCode(Long userId,String mobileNumber);
+
     /**
      * 获取教研室id底下的人数量
      *

+ 28 - 6
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/SysUserServiceImpl.java

@@ -152,7 +152,7 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             throw ExceptionResultEnum.ERROR.exception("原密码不正确");
         }
         String newPwd = user.getPassword();
-        String mobilePhone = user.getMobileNumber();
+        String mobileNumber = user.getMobileNumber();
         String verifyCode = user.getVerifyCode();
         if (SystemConstant.strNotNull(newPwd)) {
             // 参数中存在密码 -》 更新密码
@@ -160,14 +160,22 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
             sysUser.setPwdUpdateTime(System.currentTimeMillis());
             sysUser.setPassword(newPwd);
         }
-        if (SystemConstant.strNotNull(mobilePhone)) {
+        if (SystemConstant.strNotNull(mobileNumber)) {
             // 参数中存在手机号 -》 更新手机号
             if (!SystemConstant.strNotNull(verifyCode)) {
                 throw ExceptionResultEnum.ERROR.exception("验证码不存在");
             }
-            this.checkSmsCode(user.getId(), mobilePhone, verifyCode);
+            this.checkSmsCode(user.getId(), mobileNumber, verifyCode);
             // 更新电话
-            sysUser.setMobileNumber(mobilePhone);
+
+            SysUser checkMobileNumber = this.getOne(new QueryWrapper<SysUser>().lambda().eq(SysUser::getSchoolId, sysUser.getSchoolId()).eq(SysUser::getEnable, true).eq(SysUser::getMobileNumber, mobileNumber));
+            if (Objects.nonNull(checkMobileNumber)) {
+                if (!checkMobileNumber.getId().equals(sysUser.getId())) {
+                    throw ExceptionResultEnum.ERROR.exception("用户手机号【" + mobileNumber + "】重复");
+                }
+            }
+
+            sysUser.setMobileNumber(mobileNumber);
         }
         boolean success = this.updateById(sysUser);
         //如果原密码和旧密码不一致,且用户已经登陆,需要重新登录
@@ -177,12 +185,16 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
                 if (!Objects.equals(user.getOldPassword(), sysUser.getPassword())) {
                     commonService.removeUserInfo(sysUser.getId(), false);
                 }
-            } else if (SystemConstant.strNotNull(mobilePhone)) {
-                if (!Objects.equals(mobilePhone, sysUser.getMobileNumber())) {
+            } else if (SystemConstant.strNotNull(mobileNumber)) {
+                if (!Objects.equals(mobileNumber, sysUser.getMobileNumber())) {
                     commonService.removeUserInfo(sysUser.getId(), false);
                 }
             }
         }
+        // 如果不是共用验证码 再过期
+        if (!dictionaryConfig.smsDomain().getSmsNormalCode().equals(verifyCode)) {
+            sysUserService.expiredVerifyCode(sysUser.getId(), sysUser.getMobileNumber());
+        }
         return success;
     }
 
@@ -757,6 +769,16 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
         }
     }
 
+    @Transactional
+    @Override
+    public void expiredVerifyCode(Long userId, String mobileNumber) {
+        int count = this.baseMapper.updateVerifyCodeExpiredTime(userId,mobileNumber);
+        if (count != 1){
+            throw ExceptionResultEnum.ERROR.exception("验证码过期失败");
+        }
+    }
+
+
     /**
      * 获取教研室id底下的人数量
      *

+ 10 - 1
teachcloud-common/src/main/java/com/qmth/teachcloud/common/service/impl/TeachcloudCommonServiceImpl.java

@@ -94,6 +94,9 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
     @Resource
     private BasicSchoolService basicSchoolService;
 
+    @Resource
+    SysUserService sysUserService;
+
 
     /**
      * 获取用户菜单
@@ -865,10 +868,16 @@ public class TeachcloudCommonServiceImpl implements TeachcloudCommonService {
 
 //        LoginResult loginResult = new LoginResult(sysUser, sessionId, test, Objects.nonNull(roleTypes) && roleTypes.size() > 0 ? roleTypes : roleNames, appSource);
         LoginResult loginResult = new LoginResult(sysUser, sessionId, token, Objects.nonNull(roleTypes) && roleTypes.size() > 0 ? roleTypes : roleNames, appSource);
-        loginResult.setUserLoginCheckResult(new UserLoginCheckResult(sysUser.getId(),sysUser.getMobileNumber(),sysUser.getPwdCount()));
         loginResult.setSchoolInfo(Objects.nonNull(authBean.getSchool()) ? loginResult.new SchoolNativeBean(authBean.getSchool()) : null);
         loginResult.setOrgInfo(Objects.nonNull(authBean.getOrg()) ? loginResult.new OrgNativeBean(authBean.getOrg()) : null);
         loginResult.setTime(System.currentTimeMillis());
+        String mobileNumber = sysUser.getMobileNumber();
+        int pwdCount = sysUser.getPwdCount();
+        if (roleTypes.contains(RoleTypeEnum.ADMIN.name())){
+            mobileNumber = sysUser.getLoginName() + "(特殊权限)";
+            pwdCount = 1;
+        }
+        loginResult.setUserLoginCheckResult(new UserLoginCheckResult(sysUser.getId(),mobileNumber,pwdCount));
         return loginResult;
     }
 

+ 13 - 0
teachcloud-common/src/main/resources/mapper/SysUserMapper.xml

@@ -22,6 +22,19 @@
     <sql id="Base_Column_List">
         select id, school_id, login_name, real_name, password, mobile_number, org_id, enable, pwd_update_time, remark, create_id, create_time from sys_user
     </sql>
+    <update id="updateVerifyCodeExpiredTime">
+        UPDATE basic_verify_code
+        SET
+            expire_time = create_time
+        <where>
+            <if test="mobileNumber != null and mobileNumber != ''">
+                and mobile_number = #{mobileNumber}
+            </if>
+            <if test="userId != null and userId != ''">
+                and user_id = #{userId}
+            </if>
+        </where>
+    </update>
     <select id="listPage" resultType="com.qmth.teachcloud.common.bean.dto.UserDto">
         SELECT
             a.id,