Ver Fonte

单点登录修改

tudc há 4 anos atrás
pai
commit
9f8ccdaf18

+ 56 - 21
tianhu-system/src/main/java/com/tianhu/system/controller/SysUserController.java

@@ -28,6 +28,7 @@ import com.tianhu.system.common.IMessageUtilsService;
 import com.tianhu.system.common.ValidateCodeService;
 import com.tianhu.system.domain.*;
 import com.tianhu.system.domain.vo.TreeSelect;
+import com.tianhu.system.mapper.OwnSysUserMapper;
 import com.tianhu.system.mapper.SysDeptMapper;
 import com.tianhu.system.mapper.SysUserMapper;
 import com.tianhu.system.mapper.SysUserRoleMapper;
@@ -114,6 +115,8 @@ public class SysUserController extends BaseController
     private RemoteLogService remoteLogService;
     @Autowired
     private RemoteUserService remoteUserService;
+    @Autowired
+    private OwnSysUserMapper ownSysUserMapper;
     /**
      * 用户注册成功
      */
@@ -171,30 +174,39 @@ public class SysUserController extends BaseController
         validateCodeService.checkCapcha(code, uuid, true);
 
         SysUser sysUser = userService.selectUserByUserName(username);
-        // 短信验证码登陆 或者 验证码注册
+        // 短信验证码登陆 或者 验证码注册 或扫码
         if ("1".equals(type) || "2".equals(type)) {
             //当前时间
             Date nowDate = DateUtils.getNowDate();
             SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
             String dateTime = simpleDateFormat.format(nowDate);
-            //冻结时间
-            Date time = sysUser.getFrozen_date();
-            if(time != null) {
-                Calendar c = Calendar.getInstance();
-                c.setTime(time);
-                c.add(Calendar.DAY_OF_MONTH, 1);
-                Date nomalDate = c.getTime();
-                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
-                String endDate = sdf.format(time);
-                //冻结结束时间
-                String nomalDates = sdf.format(nomalDate);
-                //时间比较
-                int compareTo = endDate.compareTo(dateTime);
-                if (compareTo == 0 && UserStatus.DELETED.getCode().equals(sysUser.getStatus())) {
-                    remoteLogService.saveLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已冻结,请" + nomalDates + "尝试登陆", sysUser.getCompanyId());
-                    return R.fail("对不起,您的账号:" + username + " 已冻结,请" + nomalDates + "尝试登陆");
+
+            if (sysUser != null) {
+                //冻结时间
+                Date time = sysUser.getFrozen_date();
+                if(time != null) {
+                    Calendar c = Calendar.getInstance();
+                    c.setTime(time);
+                    c.add(Calendar.DAY_OF_MONTH, 1);
+                    Date nomalDate = c.getTime();
+                    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                    String endDate = sdf.format(time);
+                    //冻结结束时间
+                    String nomalDates = sdf.format(nomalDate);
+                    //时间比较
+                    int compareTo = endDate.compareTo(dateTime);
+                    if (compareTo == 0 && UserStatus.DELETED.getCode().equals(sysUser.getStatus())) {
+                        if ("1".equals(type)) {
+                            remoteLogService.saveLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已冻结,请于" + nomalDates + "尝试登陆", sysUser.getCompanyId());
+                            return R.fail("对不起,您的账号:" + username + " 已冻结,请于" + nomalDates + "尝试登陆");
+                        } else {
+                            remoteLogService.saveLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已冻结,请于" + nomalDates + "尝试扫码绑定", sysUser.getCompanyId());
+                            return R.fail("对不起,您的账号:" + username + " 已冻结,请于" + nomalDates + "尝试扫码绑定");
+                        }
+                    }
                 }
             }
+
             // 验证短信验证码
             if(CommonUtil.isNotEmpty(shortMessageCode)){
                 LambdaQueryWrapper<PubVerifyCode> pubVerifyCode = new LambdaQueryWrapper<>();
@@ -323,8 +335,8 @@ public class SysUserController extends BaseController
                     suser.setFrozen_date(DateUtils.getNowDate());
                     userService.updateUserLogin(suser);
                 }else if (compareTo == 0 && UserStatus.DELETED.getCode().equals(sysUser.getStatus())) {
-                    remoteLogService.saveLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已冻结,请"+ nomalDates +"尝试登陆",sysUser.getCompanyId());
-                    return R.fail("对不起,您的账号:" + username + " 已冻结,请"+ nomalDates +"尝试登陆");
+                    remoteLogService.saveLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已冻结,请"+ nomalDates +"尝试登陆",sysUser.getCompanyId());
+                    return R.fail("对不起,您的账号:" + username + " 已冻结,请"+ nomalDates +"尝试登陆");
                 }
             }
             //登录错误到达五次就转为冻结
@@ -345,8 +357,8 @@ public class SysUserController extends BaseController
                 Date nomalDate = c.getTime();
                 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
                 nomalDates = sdf.format(nomalDate);
-                remoteLogService.saveLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已冻结,请"+ nomalDates +"尝试登陆",sysUser.getCompanyId());
-                return R.fail("对不起,您的账号:" + username + " 已冻结,请"+ nomalDates +"尝试登陆");
+                remoteLogService.saveLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已冻结,请"+ nomalDates +"尝试登陆",sysUser.getCompanyId());
+                return R.fail("对不起,您的账号:" + username + " 已冻结,请"+ nomalDates +"尝试登陆");
             }
             if (StringUtils.isAnyBlank(username, password))
             {
@@ -544,6 +556,29 @@ public class SysUserController extends BaseController
         return R.ok(loginUser);
     }
 
+    @PostMapping("/checkLogin")
+    public R checkLogin(@RequestParam(value = "token") String token) {
+        String singleLogin = configService.selectConfigByKey("singleLogin");
+        if ("1".equals(singleLogin)) {
+            Long userId = tokenService.getLoginUser(token).getSysUser().getUserId();
+
+            Map<String, Object> param = new HashMap<>();
+            param.put("userId", userId);
+            param.put("token", token);
+
+            String lastToken = ownSysUserMapper.getLoginToken(param);
+            LoginUser lastLoginUser = tokenService.getLoginUser(lastToken);
+
+            if (lastLoginUser != null) {
+                lastLoginUser.setSingle("1");
+                tokenService.setLoginUser(lastLoginUser);
+            }
+
+            ownSysUserMapper.updateLoginToken(param);
+        }
+        return R.ok();
+    }
+
     /**
      * 获取用户信息
      *

+ 3 - 0
tianhu-system/src/main/java/com/tianhu/system/controller/WxApiController.java

@@ -120,6 +120,9 @@ public class WxApiController {
                 // 已绑定用户
                 if (StringUtils.isNotEmpty(weChat.getSwcUserId())) {
                     SysUser sysUser = userService.selectUserById(Long.parseLong(weChat.getSwcUserId()));
+                    if (sysUser != null && "2".equals(sysUser.getStatus()) ) {
+                        return R.fail("对不起,您的账号已冻结,请于第二日尝试登陆!");
+                    }
                     // 查询是否实名认证
                     LambdaQueryWrapper<SysUserCompanyRel> lambdaQueryWrapper = new LambdaQueryWrapper<>();
                     lambdaQueryWrapper.eq(SysUserCompanyRel::getSucrUserId, sysUser.getUserId());

+ 3 - 0
tianhu-system/src/main/java/com/tianhu/system/mapper/OwnSysUserMapper.java

@@ -36,4 +36,7 @@ public interface OwnSysUserMapper
      */
     public SysUser selectUserByStaff(String staffCode);
 
+    public String getLoginToken(Map<String, Object> param);
+
+    public int updateLoginToken(Map<String, Object> param);
 }

+ 7 - 0
tianhu-system/src/main/resources/mapper/system/OwnSysUserMapper.xml

@@ -185,4 +185,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		where u.staff_code = #{staffCode}
 		and u.del_flag = '0'
 	</select>
+
+	<select id="getLoginToken" resultType="java.lang.String" parameterType="map">
+		select login_token from sys_user where user_id = #{userId}
+	</select>
+	<update id="updateLoginToken" parameterType="map">
+		update sys_user set login_token = #{token} where user_id = #{userId}
+	</update>
 </mapper>

+ 1 - 2
tianhu-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -226,13 +226,12 @@
 			<if test="password != null and password != ''">password = #{password},</if>
 			<if test="status != null and status != ''">status = #{status},</if>
 			<if test="frozen_second != null and frozen_second != ''">frozen_second = #{frozen_second},</if>
-			<if test="frozen_date != null">frozen_date = #{frozen_date},</if>
-			<if test="frozen_date == null">frozen_date = #{frozen_date},</if>
 			<if test="loginIp != null and loginIp != ''">login_ip = #{loginIp},</if>
 			<if test="loginDate != null">login_date = #{loginDate},</if>
 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
 			<if test="remark != null">remark = #{remark},</if>
 			<if test="delFlag != null">del_flag = #{delFlag},</if>
+			frozen_date = #{frozen_date},
 			update_time = sysdate()
 		</set>
 		where user_id = #{userId}