From 4eba22e42dba230a791e2f4b3c3d9c2697e43236 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Mon, 6 Apr 2026 18:34:26 +0800 Subject: [PATCH] =?UTF-8?q?fix(system):=20=E4=BC=98=E5=8C=96=E6=89=AB?= =?UTF-8?q?=E7=A0=81=E7=99=BB=E5=BD=95=E7=8A=B6=E6=80=81=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改Redis键命名为更规范的格式 - 先尝试获取已有扫码登录数据并解析更新 - 只有在无现有数据时才创建新的扫码登录记录 - 统一设置状态为confirmed,保证有效期60秒 - 增加日志区分新建与更新扫码登录完成情况 - 捕获异常并记录错误日志完善容错处理 --- .../controller/WxOfficialController.java | 36 +++++++++++++------ 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/gxwebsoft/common/system/controller/WxOfficialController.java b/src/main/java/com/gxwebsoft/common/system/controller/WxOfficialController.java index edf3e3b..1a8157c 100644 --- a/src/main/java/com/gxwebsoft/common/system/controller/WxOfficialController.java +++ b/src/main/java/com/gxwebsoft/common/system/controller/WxOfficialController.java @@ -296,16 +296,32 @@ public class WxOfficialController extends BaseController { */ private void completeQrLogin(String token, Integer userId, Integer tenantId) { try { - // 更新扫码登录状态 - String redisKey = "QR_LOGIN_TOKEN:" + token; - JSONObject qrLoginData = new JSONObject(); - qrLoginData.put("status", "confirmed"); - qrLoginData.put("userId", userId); - qrLoginData.put("tenantId", tenantId); - qrLoginData.put("confirmTime", System.currentTimeMillis()); - // 保存1分钟,给前端足够时间获取 - redisUtil.set(redisKey, qrLoginData.toJSONString(), 60L, TimeUnit.SECONDS); - System.out.println("扫码登录完成,token=" + token + ", userId=" + userId); + // 获取已有的扫码登录数据 + String redisKey = "qr-login:token:" + token; + String existingData = redisUtil.get(redisKey); + + // 如果有现有数据,解析后更新 + if (StrUtil.isNotBlank(existingData)) { + JSONObject jsonData = JSONObject.parseObject(existingData); + jsonData.put("status", "confirmed"); + jsonData.put("userId", userId); + jsonData.put("tenantId", tenantId); + jsonData.put("confirmTime", System.currentTimeMillis()); + // 保存60秒,给前端足够时间获取 + redisUtil.set(redisKey, jsonData.toJSONString(), 60L, TimeUnit.SECONDS); + System.out.println("扫码登录完成,token=" + token + ", userId=" + userId); + } else { + // 没有现有数据,创建一个新的 + JSONObject qrLoginData = new JSONObject(); + qrLoginData.put("token", token); + qrLoginData.put("status", "confirmed"); + qrLoginData.put("userId", userId); + qrLoginData.put("tenantId", tenantId); + qrLoginData.put("confirmTime", System.currentTimeMillis()); + // 保存60秒 + redisUtil.set(redisKey, qrLoginData.toJSONString(), 60L, TimeUnit.SECONDS); + System.out.println("扫码登录完成(新建),token=" + token + ", userId=" + userId); + } } catch (Exception e) { log.error("完成扫码登录失败: {}", e.getMessage()); }