From 2a3c3cdbf2398695d61633e072f98ee2757e9e27 Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期二, 11 八月 2026 11:20:26 +0800
Subject: [PATCH] feat(appointment): 添加访客预约系统解除绑定功能
---
backend/src/main/java/com/sinata/appointment/service/MiniAuthApplicationService.java | 16 +++++++++++++++-
1 files changed, 15 insertions(+), 1 deletions(-)
diff --git a/backend/src/main/java/com/sinata/appointment/service/MiniAuthApplicationService.java b/backend/src/main/java/com/sinata/appointment/service/MiniAuthApplicationService.java
index 905f21e..64c9a4d 100644
--- a/backend/src/main/java/com/sinata/appointment/service/MiniAuthApplicationService.java
+++ b/backend/src/main/java/com/sinata/appointment/service/MiniAuthApplicationService.java
@@ -37,6 +37,7 @@
private static final String OFFICIAL_BIND_TOKEN_PREFIX = "official:bind:";
private static final Duration OFFICIAL_BIND_TOKEN_TTL = Duration.ofMinutes(10);
private static final String OFFICIAL_OPEN_ID_PLACEHOLDER_PREFIX = "OA_PLACEHOLDER_";
+ private static final String UNBOUND_OPEN_ID_PREFIX = "UNBOUND_";
private final MpUserMapper mpUserMapper;
private final SysDeptMapper sysDeptMapper;
@@ -263,7 +264,8 @@
String currentOpenId = user.getOpenId();
if (StringUtils.hasText(currentOpenId)
&& !Objects.equals(currentOpenId, openId)
- && !MpStaffConstants.isPlaceholderOpenId(currentOpenId)) {
+ && !MpStaffConstants.isPlaceholderOpenId(currentOpenId)
+ && !isUnboundOpenId(currentOpenId)) {
throw new BizException(BizErrorCode.AUTH_FORBIDDEN, "该手机号已绑定其他微信账号");
}
if (MiniUserType.EMPLOYEE.equals(user.getUserType())
@@ -437,6 +439,18 @@
MiniStpUtil.logout();
}
+ @Transactional(rollbackFor = Exception.class)
+ public void unbindMiniOpenIdAndLogout() {
+ MpUser user = currentMpUser();
+ user.setOpenId(UNBOUND_OPEN_ID_PREFIX + UUID.randomUUID().toString().replace("-", ""));
+ mpUserMapper.updateById(user);
+ MiniStpUtil.logout(user.getId());
+ }
+
+ private boolean isUnboundOpenId(String openId) {
+ return StringUtils.hasText(openId) && openId.startsWith(UNBOUND_OPEN_ID_PREFIX);
+ }
+
private MiniLoginResponse buildResponse(MpUser user) {
String name =
user.getNickName() != null && !user.getNickName().isBlank()
--
Gitblit v1.7.1