From e429c291995f3f20184079e480031533ae5c03e6 Mon Sep 17 00:00:00 2001
From: zjk <852185829@qq.com>
Date: 星期五, 18 九月 2026 17:24:28 +0800
Subject: [PATCH] refactor(全项目): 综合优化全端业务与修复各类问题
---
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/service/UserAppService.java | 61 +++++++++++++++++++++---------
1 files changed, 43 insertions(+), 18 deletions(-)
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/service/UserAppService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/service/UserAppService.java
index c8ab19b..2b59e25 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/service/UserAppService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/service/UserAppService.java
@@ -7,7 +7,6 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tcm.training.admin.common.DateTimes;
import com.tcm.training.admin.common.PageResponse;
-import com.tcm.training.admin.common.PhoneMasker;
import com.tcm.training.admin.live.entity.Clinic;
import com.tcm.training.admin.live.mapper.ClinicMapper;
import com.tcm.training.admin.member.dto.UserBatchClinicUpdateRequest;
@@ -147,12 +146,8 @@
/** 更新用户信息。 */
public UserDetailVO update(Long id, UserUpdateRequest req) {
AppUser user = requireUser(id);
- if (req.getClinicId() != null) {
- Clinic clinic = clinicMapper.selectById(req.getClinicId());
- if (clinic == null || (clinic.getDeleted() != null && clinic.getDeleted() == 1)) {
- throw new IllegalArgumentException("绑定诊所不存在");
- }
- }
+ boolean personalUser = Integer.valueOf(0).equals(user.getType());
+ Long clinicUserId = personalUser ? resolveClinicUserId(req.getClinicId()) : null;
AppUser phoneConflict = userMapper.selectOne(new LambdaQueryWrapper<AppUser>()
.eq(AppUser::getPhone, req.getPhone().trim())
.ne(AppUser::getId, id)
@@ -166,9 +161,11 @@
user.setPhone(req.getPhone().trim());
user.setAvatar(trimToNull(req.getAvatar()));
user.setStatus(req.getStatus());
- user.setClinicId(req.getClinicId());
user.setMemberExpireAt(req.getMemberExpireAt());
userMapper.updateById(user);
+ if (personalUser) {
+ updateClinicBinding(java.util.Collections.singletonList(id), req.getClinicId(), clinicUserId);
+ }
return detail(id);
}
@@ -216,20 +213,48 @@
@Transactional(rollbackFor = Exception.class)
/** 批量更新用户诊所归属。 */
public void batchUpdateClinic(UserBatchClinicUpdateRequest req) {
- Clinic clinic = clinicMapper.selectById(req.getClinicId());
- if (clinic == null || Integer.valueOf(1).equals(clinic.getDeleted())) {
- throw new IllegalArgumentException("诊所不存在");
- }
+ Long clinicUserId = resolveClinicUserId(req.getClinicId());
Long userCount = userMapper.selectCount(new LambdaQueryWrapper<AppUser>()
.in(AppUser::getId, req.getUserIds())
+ .eq(AppUser::getType, 0)
.eq(AppUser::getDeleted, 0));
if (userCount != req.getUserIds().size()) {
- throw new IllegalArgumentException("部分用户不存在");
+ throw new IllegalArgumentException("部分用户不存在或不是普通用户");
}
- userMapper.update(null, new LambdaUpdateWrapper<AppUser>()
- .in(AppUser::getId, req.getUserIds())
+ updateClinicBinding(req.getUserIds(), req.getClinicId(), clinicUserId);
+ }
+
+ /** 诊所 ID 与诊所账号用户 ID 不同,患者查询依赖后者。 */
+ private Long resolveClinicUserId(Long clinicId) {
+ if (clinicId == null) {
+ return null;
+ }
+ Clinic clinic = clinicMapper.selectById(clinicId);
+ if (clinic == null || Integer.valueOf(1).equals(clinic.getDeleted())) {
+ throw new IllegalArgumentException("绑定诊所不存在");
+ }
+ List<AppUser> clinicUsers = userMapper.selectList(new LambdaQueryWrapper<AppUser>()
+ .eq(AppUser::getClinicId, clinicId)
+ .eq(AppUser::getType, 1)
.eq(AppUser::getDeleted, 0)
- .set(AppUser::getClinicId, req.getClinicId()));
+ .last("limit 2"));
+ if (clinicUsers.isEmpty()) {
+ throw new IllegalArgumentException("目标诊所尚未关联诊所账号,无法绑定患者");
+ }
+ if (clinicUsers.size() > 1) {
+ throw new IllegalArgumentException("目标诊所关联多个账号,请先确认患者归属");
+ }
+ return clinicUsers.get(0).getId();
+ }
+
+ /** 同步两个归属字段;显式 set 确保解除绑定时 null 也能写入。 */
+ private void updateClinicBinding(List<Long> userIds, Long clinicId, Long clinicUserId) {
+ userMapper.update(null, new LambdaUpdateWrapper<AppUser>()
+ .in(AppUser::getId, userIds)
+ .eq(AppUser::getType, 0)
+ .eq(AppUser::getDeleted, 0)
+ .set(AppUser::getClinicId, clinicId)
+ .set(AppUser::getSuperiorClinicUserId, clinicUserId));
}
/** 查询诊所选项。 */
@@ -281,7 +306,7 @@
MemberUserExcelRow excel = new MemberUserExcelRow();
excel.setId(row.getId());
excel.setNickname(row.getNickname());
- excel.setPhone(PhoneMasker.mask(row.getPhone()));
+ excel.setPhone(row.getPhone());
excel.setMemberStatus(row.getIsMember() != null && row.getIsMember() == 1 ? "生效中" : "已失效");
excel.setMemberExpireAt(DateTimes.format(row.getMemberExpireAt()));
memberExcelRows.add(excel);
@@ -297,7 +322,7 @@
excel.setId(row.getId());
excel.setNickname(row.getNickname());
excel.setType(typeText(row.getType()));
- excel.setPhone(PhoneMasker.mask(row.getPhone()));
+ excel.setPhone(row.getPhone());
excel.setClinicName(row.getClinicName() == null ? "-" : row.getClinicName());
excel.setAge(row.getAge());
excel.setGender(genderText(row.getGender()));
--
Gitblit v1.7.1