From 74232f3f2a69a99c40a1e54854f0ae419a73a3bc Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期五, 01 五月 2026 00:41:24 +0800
Subject: [PATCH] fix:登录注册修改

---
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/patient/vo/AppMyPatientExchangeItemVO.java |    1 +
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/settings/service/AppSettingsService.java   |   17 +++++++++++++----
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/auth/service/AppAuthService.java           |   12 ++++++++----
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/share/service/AppShareService.java         |   14 +++-----------
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/patient/service/AppMyPatientService.java   |    1 +
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/patient/row/AppMyPatientExchangeRow.java   |    1 +
 tcm-training-admin-backend/src/main/resources/mapper/AppMyPatientQueryMapper.xml                               |    3 ++-
 7 files changed, 29 insertions(+), 20 deletions(-)

diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/auth/service/AppAuthService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/auth/service/AppAuthService.java
index ed36eac..9f19c16 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/auth/service/AppAuthService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/auth/service/AppAuthService.java
@@ -249,23 +249,27 @@
     }
 
     /**
-     * 按微信 openid 查询本地 APP 用户。
+     * 按微信 openid 查询本地 APP 用户,重复脏数据场景优先返回启用且已绑定手机号的账号。
      */
     private AppUser findUserByWechatOpenid(String openid) {
         return userMapper.selectOne(new LambdaQueryWrapper<AppUser>()
                 .eq(AppUser::getWechatOpenid, openid)
                 .eq(AppUser::getDeleted, 0)
-                .last("limit 1"));
+                .last("ORDER BY CASE WHEN status = 1 THEN 0 ELSE 1 END, "
+                        + "CASE WHEN phone IS NOT NULL AND TRIM(phone) <> '' THEN 0 ELSE 1 END, "
+                        + "updated_at DESC, id DESC LIMIT 1"));
     }
 
     /**
-     * 按苹果 subject 查询本地 APP 用户。
+     * 按苹果 subject 查询本地 APP 用户,重复脏数据场景优先返回启用且已绑定手机号的账号。
      */
     private AppUser findUserByAppleSubject(String subject) {
         return userMapper.selectOne(new LambdaQueryWrapper<AppUser>()
                 .eq(AppUser::getAppleIdentitySubject, subject)
                 .eq(AppUser::getDeleted, 0)
-                .last("limit 1"));
+                .last("ORDER BY CASE WHEN status = 1 THEN 0 ELSE 1 END, "
+                        + "CASE WHEN phone IS NOT NULL AND TRIM(phone) <> '' THEN 0 ELSE 1 END, "
+                        + "updated_at DESC, id DESC LIMIT 1"));
     }
 
     /**
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/patient/row/AppMyPatientExchangeRow.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/patient/row/AppMyPatientExchangeRow.java
index 53b1102..0480546 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/patient/row/AppMyPatientExchangeRow.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/patient/row/AppMyPatientExchangeRow.java
@@ -16,6 +16,7 @@
     private String orderNo;
     private String giftName;
     private String giftCover;
+    private String nickname;
     private Integer status;
     private Integer count;
     private Boolean canConfirmReceived;
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/patient/service/AppMyPatientService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/patient/service/AppMyPatientService.java
index 75387f6..a74cb92 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/patient/service/AppMyPatientService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/patient/service/AppMyPatientService.java
@@ -236,6 +236,7 @@
             item.setOrderNo(trimToEmpty(row.getOrderNo()));
             item.setGiftName(trimToEmpty(row.getGiftName()));
             item.setGiftCover(trimToEmpty(row.getGiftCover()));
+            item.setNickname(trimToEmpty(row.getNickname()));
             item.setActivityPeriodText(buildActivityPeriodText(row.getActivityStartAt(), row.getActivityEndAt()));
             item.setStatus(row.getStatus());
             item.setStatusText(resolveExchangeStatusText(row.getStatus()));
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/patient/vo/AppMyPatientExchangeItemVO.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/patient/vo/AppMyPatientExchangeItemVO.java
index b728a95..942cb2b 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/patient/vo/AppMyPatientExchangeItemVO.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/patient/vo/AppMyPatientExchangeItemVO.java
@@ -14,6 +14,7 @@
     private String orderNo;
     private String giftName;
     private String giftCover;
+    private String nickname;
     private String activityPeriodText;
     private Integer status;
     private String statusText;
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/settings/service/AppSettingsService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/settings/service/AppSettingsService.java
index 7a2a934..5cd0c21 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/settings/service/AppSettingsService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/settings/service/AppSettingsService.java
@@ -2,6 +2,7 @@
 
 import cn.dev33.satoken.stp.SaTokenInfo;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.tcm.training.admin.app.auth.dto.AppWechatLoginRequest;
 import com.tcm.training.admin.app.auth.service.AppAuthSessionService;
 import com.tcm.training.admin.app.auth.vo.AppLoginResponse;
@@ -266,12 +267,20 @@
     }
 
     /**
-     * 合并后软删除第三方临时账号,避免产生重复用户。
+     * 合并后清空第三方票据并逻辑删除临时账号,避免同一 openid 或苹果 subject 命中多个账号。
      */
     private void disableMergedTemporaryUser(AppUser currentUser) {
-        currentUser.setStatus(0);
-        currentUser.setDeleted(1);
-        userMapper.updateById(currentUser);
+        userMapper.update(null, new LambdaUpdateWrapper<AppUser>()
+                .eq(AppUser::getId, currentUser.getId())
+                .set(AppUser::getStatus, 0)
+                .set(AppUser::getWechatOpenid, null)
+                .set(AppUser::getWechatNickname, null)
+                .set(AppUser::getWechatAvatar, null)
+                .set(AppUser::getWechatBoundAt, null)
+                .set(AppUser::getAppleUserIdentifier, null)
+                .set(AppUser::getAppleIdentitySubject, null)
+                .set(AppUser::getAppleBoundAt, null)
+                .set(AppUser::getDeleted, 1));
     }
 
     /**
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/share/service/AppShareService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/share/service/AppShareService.java
index 6a0ae31..9d9ffbf 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/share/service/AppShareService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/share/service/AppShareService.java
@@ -338,7 +338,7 @@
     private AppShareBoundUserItemVO toBoundUserItem(AppUser user) {
         AppShareBoundUserItemVO item = new AppShareBoundUserItemVO();
         item.setId(user.getId());
-        item.setNickname(resolveNickname(user));
+        item.setNickname(resolveBoundUserPhone(user));
         item.setAvatar(resolveAvatar(user));
         item.setRegisteredAt(resolveRegisteredAt(user));
         return item;
@@ -379,17 +379,9 @@
     }
 
     /**
-     * 优先使用昵称,没有时回退手机号。
+     * 绑定用户列表按业务要求直接在昵称字段展示完整手机号。
      */
-    private String resolveNickname(AppUser user) {
-        String nickname = trimToNull(user == null ? null : user.getNickname());
-        if (nickname != null) {
-            return nickname;
-        }
-        String wechatNickname = trimToNull(user == null ? null : user.getWechatNickname());
-        if (wechatNickname != null) {
-            return wechatNickname;
-        }
+    private String resolveBoundUserPhone(AppUser user) {
         return trimToEmpty(user == null ? null : user.getPhone());
     }
 
diff --git a/tcm-training-admin-backend/src/main/resources/mapper/AppMyPatientQueryMapper.xml b/tcm-training-admin-backend/src/main/resources/mapper/AppMyPatientQueryMapper.xml
index 9e73ed7..3de8370 100644
--- a/tcm-training-admin-backend/src/main/resources/mapper/AppMyPatientQueryMapper.xml
+++ b/tcm-training-admin-backend/src/main/resources/mapper/AppMyPatientQueryMapper.xml
@@ -62,6 +62,7 @@
             o.order_no AS orderNo,
             o.gift_name AS giftName,
             o.gift_cover AS giftCover,
+            MAX(COALESCE(NULLIF(TRIM(u.phone), ''), NULLIF(TRIM(i.user_phone), ''))) AS nickname,
             o.status,
             COUNT(i.id) AS count,
             CASE WHEN o.status = 1 THEN TRUE ELSE FALSE END AS canConfirmReceived,
@@ -94,7 +95,7 @@
             i.id,
             i.order_id AS orderId,
             u.id AS patientId,
-            COALESCE(NULLIF(TRIM(u.nickname), ''), NULLIF(TRIM(i.user_nickname), ''), NULLIF(TRIM(u.phone), ''), '用户') AS patientName,
+            COALESCE(NULLIF(TRIM(u.phone), ''), NULLIF(TRIM(i.user_phone), ''), '用户') AS patientName,
             COALESCE(NULLIF(TRIM(u.phone), ''), NULLIF(TRIM(i.user_phone), '')) AS patientPhone,
             i.settled_points AS settledPoints,
             i.status,

--
Gitblit v1.7.1