From 97d99b76bdde8952cf257c3c85c1a8a080927af4 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期一, 31 三月 2025 16:44:22 +0800 Subject: [PATCH] 修改反馈文档bug --- ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java | 76 ++++++++++++++++++++++--------------- 1 files changed, 45 insertions(+), 31 deletions(-) diff --git a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java index aabf830..abd5d56 100644 --- a/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java +++ b/ruoyi-service/ruoyi-account/src/main/java/com/ruoyi/account/service/impl/AppUserServiceImpl.java @@ -30,6 +30,7 @@ import com.ruoyi.system.api.feignClient.SysUserClient; import com.ruoyi.system.api.model.LoginUser; import lombok.extern.slf4j.Slf4j; +import org.redisson.RedissonLock; import org.springframework.beans.factory.annotation.Value; import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Service; @@ -131,39 +132,52 @@ } String openid = map.get("openid").toString(); String sessionKey = map.get("sessionKey").toString(); - //查询用户是否注册,没有注册则跳转到注册页面 - AppUser appUser = this.getOne(new LambdaQueryWrapper<AppUser>().eq(AppUser::getWxOpenid, openid).ne(AppUser::getStatus, 3).eq(AppUser::getDelFlag, 0)); - if(null == appUser){ - String decrypt = WXCore.decrypt(appletLogin.getEncryptedData_phone(), sessionKey, appletLogin.getIv_phone()); - if (StringUtils.isEmpty(decrypt)) { - return R.fail("获取手机信息失败"); - } - JSONObject phone = JSON.parseObject(decrypt); - String purePhoneNumber = phone.getString("purePhoneNumber"); - LoginVo loginVo = new LoginVo(); - loginVo.setSkipPage(2); - loginVo.setPhone(purePhoneNumber); - return R.ok(loginVo); - } - //账户被冻结,给出提示 - if(2 == appUser.getStatus()){ - return R.fail("账户已被冻结,请联系管理员!"); - } LoginVo loginVo = new LoginVo(); - loginVo.setSkipPage(1); - loginVo.setFirstTime(false); - loginVo.setPhone(appUser.getPhone()); - //构建token - LoginUser loginUser = new LoginUser(); - loginUser.setUserid(appUser.getId()); - loginUser.setUsername(appUser.getName()); - Map<String, Object> tokenApplet = tokenService.createTokenApplet(loginUser); - loginVo.setToken(tokenApplet.get("access_token").toString()); - loginVo.setFailureTime(Long.valueOf(tokenApplet.get("expires_in").toString())); - appUser.setLastLoginTime(LocalDateTime.now()); - this.updateById(appUser); - return R.ok(loginVo); + String key = "login:" + openid; + Boolean hasKey = redisService.lock(key); + if(hasKey){ + try { + //查询用户是否注册,没有注册则跳转到注册页面 + AppUser appUser = this.getOne(new LambdaQueryWrapper<AppUser>().eq(AppUser::getWxOpenid, openid).ne(AppUser::getStatus, 3).eq(AppUser::getDelFlag, 0)); + if(null == appUser){ + String decrypt = WXCore.decrypt(appletLogin.getEncryptedData_phone(), sessionKey, appletLogin.getIv_phone()); + if (StringUtils.isEmpty(decrypt)) { + return R.fail("获取手机信息失败"); + } + JSONObject phone = JSON.parseObject(decrypt); + String purePhoneNumber = phone.getString("purePhoneNumber"); + loginVo.setSkipPage(2); + loginVo.setPhone(purePhoneNumber); + return R.ok(loginVo); + } + //账户被冻结,给出提示 + if(2 == appUser.getStatus()){ + return R.fail("账户已被冻结,请联系管理员!"); + } + loginVo.setSkipPage(1); + loginVo.setFirstTime(false); + loginVo.setPhone(appUser.getPhone()); + //构建token + LoginUser loginUser = new LoginUser(); + loginUser.setUserid(appUser.getId()); + loginUser.setUsername(appUser.getName()); + Map<String, Object> tokenApplet = tokenService.createTokenApplet(loginUser); + loginVo.setToken(tokenApplet.get("access_token").toString()); + loginVo.setFailureTime(Long.valueOf(tokenApplet.get("expires_in").toString())); + + appUser.setLastLoginTime(LocalDateTime.now()); + this.updateById(appUser); + return R.ok(loginVo); + }catch (Exception e){ + e.printStackTrace(); + }finally { + redisService.unlock(key); + } + }else{ + return R.fail("请稍后重试"); + } + return R.fail("登录失败"); } -- Gitblit v1.7.1