diff --git a/blade-auth/src/main/java/org/springblade/auth/support/MpLoginSupport.java b/blade-auth/src/main/java/org/springblade/auth/support/MpLoginSupport.java index 9e8154bd..030e2502 100644 --- a/blade-auth/src/main/java/org/springblade/auth/support/MpLoginSupport.java +++ b/blade-auth/src/main/java/org/springblade/auth/support/MpLoginSupport.java @@ -89,7 +89,7 @@ public class MpLoginSupport { // ③ 身份含 driver 才建档;纯 admin 不建 String loginNotice = ensureProfile(account, phone, tenantId); // ④ 微信登录把 openid 覆盖写为本次值留痕;失败只 WARN - bindOpenid(account, openid); + bindOpenId(account, openid); MpUserInfo userInfo = loadUserInfo(account); attachNotice(userInfo, loginNotice); return TokenUtil.convertMpUser(userInfo); @@ -187,7 +187,7 @@ public class MpLoginSupport { /** * ④ 微信登录把 openid 覆盖写为本次值:「该账号最近一次登录用的微信」,不参与识别;失败只 WARN */ - private void bindOpenid(MpUser account, String openid) { + private void bindOpenId(MpUser account, String openid) { if (account == null || StringUtil.isBlank(openid)) { return; } diff --git a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/feign/IDriverClient.java b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/feign/IDriverClient.java index 7a81e0d5..ed954ea2 100644 --- a/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/feign/IDriverClient.java +++ b/blade-service-api/blade-transport-api/src/main/java/org/springblade/transport/feign/IDriverClient.java @@ -63,7 +63,8 @@ public interface IDriverClient { *
* 幂等入口:档案 mobile 已是新号时返回成功且不写库。只在档案属于该账号 * (user_id + tenant_id 命中)且档案 mobile 等于 oldPhone 时改这一列; - * 不满足时不动档案,通过返回值的 message 说明原因,不抛异常给调用方的账号更新。 + * 不满足时不动档案,通过返回值的 message 说明原因。入参不合法时服务端抛 ServiceException, + * feign 以调用异常返回,调用方按失败处理并自行决定是否影响账号更新。 * * @param param 租户、小程序账号、账号旧号与新号 * @return 档案ID与本次是否同步 diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/support/MpPhoneChangePlan.java b/blade-service/blade-system/src/main/java/org/springblade/system/support/MpPhoneChangePlan.java index f1c9320e..8db6adb4 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/support/MpPhoneChangePlan.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/support/MpPhoneChangePlan.java @@ -97,13 +97,7 @@ public final class MpPhoneChangePlan { && !submittedAccount.equals(oldAccount) && !isMasked(submittedAccount)) { return submittedAccount; } - if (oldAccount == null) { - return newPhone; - } - if (oldAccount.equals(oldPhone)) { - return newPhone; - } - return oldAccount; + return shouldSyncAccount() ? newPhone : oldAccount; } /** diff --git a/blade-service/blade-system/src/main/java/org/springblade/system/support/MpUserPhoneChangeSupport.java b/blade-service/blade-system/src/main/java/org/springblade/system/support/MpUserPhoneChangeSupport.java index 2e7ca953..31f35456 100644 --- a/blade-service/blade-system/src/main/java/org/springblade/system/support/MpUserPhoneChangeSupport.java +++ b/blade-service/blade-system/src/main/java/org/springblade/system/support/MpUserPhoneChangeSupport.java @@ -22,6 +22,7 @@ */ package org.springblade.system.support; +import cn.hutool.core.util.DesensitizedUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springblade.core.tool.api.R; @@ -34,12 +35,12 @@ import org.springframework.stereotype.Component; /** * 改号后同步司机档案手机号 *
- * 只在后台编辑与 App 内改号两个入口调用:登录链路上 transport 会回调本服务的 updateUser, - * 若那里再回调用 transport,会形成 transport(持 driver 行锁) → system → transport 的嵌套更新, - * 内层等同一行的锁直到超时。 + * 只在后台编辑与 App 内改号两个入口调用。登录链路的账号更新不得回调 transport: + * transport 的司机档案编辑会回调本服务的 updateUser,互相回调会形成 transport(持 driver 行锁) + * → system → transport 的嵌套更新,内层等同一行的锁直到超时。 *
- * 档案同步是账号更新之后的补偿动作:任何失败只记日志、不抛异常,账号更新照常提交。
- * 调用方据此能看出「账号改了、档案没改」。
+ * 档案同步在账号更新之后执行:任何失败只记日志、不抛异常,账号更新照常提交。
+ * 日志里的手机号一律脱敏;tenantId / mpUserId / driverId 保持原值用于定位。
*
* @author Chill
*/
@@ -63,6 +64,8 @@ public class MpUserPhoneChangeSupport {
|| oldMobile.contains("*") || newMobile.contains("*") || oldMobile.equals(newMobile)) {
return false;
}
+ String maskedOldPhone = DesensitizedUtil.mobilePhone(oldMobile);
+ String maskedNewPhone = DesensitizedUtil.mobilePhone(newMobile);
DriverSyncMobileDTO param = new DriverSyncMobileDTO();
param.setTenantId(tenant);
param.setMpUserId(userId);
@@ -72,24 +75,24 @@ public class MpUserPhoneChangeSupport {
R
* 只验证「交给 updateUser 之前」的三处一致性判据:手机号是新号、账号是否跟随取库里的旧号、
* 以及必须走带司机档案同步的更新入口(否则档案电话会停在旧号)。