- 修改UserMapper接口,selectByIdIgnoreTenant由返回单用户改为返回用户列表,避免多结果异常 - UserService新增listByIdIgnoreTenant方法,兼容多条用户记录查询 - WxLoginController优先从scene参数直接解析tenantId,兼容旧格式时使用list接口查询用户 - 调整website.getRunning判空,避免空指针异常 - 多处调用处修改获取用户信息的逻辑,防止因多租户导致的查询失败 - 前端三处vue组件调整scene格式为uid_userId_tenantId,确保tenantId正确传递
1.1 KiB
1.1 KiB
2026-04-21 日志
WxLoginController.getOrderQRCodeUnlimited 修复(完整)
根因
extractTenantIdFromScene通过selectByIdIgnoreTenant反查用户获取 tenantId,userId=35280 在多租户下有2条记录 →TooManyResultsException- 异常被 catch 后 fallback 到默认租户 10550,Redis 中无
mp-weixin:10550缓存 → 最终失败 - 第 452 行
website.getRunning().equals(2)存在 NPE 风险
修复内容
- 后端 WxLoginController: scene 格式改为
uid_userId_tenantId,优先从 scene 直接解析 tenantId;兼容旧uid_userId格式时改用selectList避免多条记录异常 - 后端 UserMapper/UserService:
selectByIdIgnoreTenant返回类型从User改为List<User>;新增listByIdIgnoreTenant方法 - 后端 NPE 修复:
website.getRunning().equals(2)→website != null && Integer.valueOf(2).equals(website.getRunning()) - 前端 3 个 vue: scene 从
uid_${userId}改为uid_${userId}_${tenantId}(从 tenantStore.company.tenantId 获取)- shopDealerUser/index.vue
- shopDealerUserShop/index.vue
- shopDealerUserDelivery/index.vue