“mitao”
2026-05-01 74232f3f2a69a99c40a1e54854f0ae419a73a3bc
fix:登录注册修改
7个文件已修改
49 ■■■■■ 已修改文件
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/auth/service/AppAuthService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/patient/row/AppMyPatientExchangeRow.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/patient/service/AppMyPatientService.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/patient/vo/AppMyPatientExchangeItemVO.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/settings/service/AppSettingsService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/share/service/AppShareService.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
tcm-training-admin-backend/src/main/resources/mapper/AppMyPatientQueryMapper.xml 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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"));
    }
    /**
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;
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()));
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;
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));
    }
    /**
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());
    }
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,