diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MpUserServiceImpl.java b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MpUserServiceImpl.java index a0a12bab..c1e77ca9 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MpUserServiceImpl.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/service/impl/MpUserServiceImpl.java @@ -319,6 +319,13 @@ public class MpUserServiceImpl extends BaseServiceImpl imp if (!tenantId.equals(user.getTenantId())) { throw new ServiceException("租户不匹配,无法绑定 openid"); } + // 目标账号已有另一个非空 openid 时不得覆盖:旧逻辑会静默顶掉上一个微信的绑定, + // 而一个微信换绑需要管理员确认,登录路径只放弃本次绑定(票 05) + if (Func.isNotBlank(user.getOpenid()) && !user.getOpenid().equals(openid)) { + log.warn("小程序用户已绑定其他 openid,跳过绑定:租户={} 账号={} 已有openid={} 本次openid={}", + tenantId, userId, user.getOpenid(), openid); + return false; + } MpUser byOpenId = getOne(Wrappers.lambdaQuery() .eq(MpUser::getTenantId, tenantId) .eq(MpUser::getOpenid, openid)