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