From 75c13bada869e2fabb62125b109a1a5f86964ed6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E5=BF=A0=E6=9E=97?= <170083662@qq.com> Date: Sun, 29 Mar 2026 01:19:48 +0800 Subject: [PATCH] =?UTF-8?q?refactor(app-user):=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E8=B7=A8=E5=BA=93JOIN=E4=BE=9D=E8=B5=96=EF=BC=8C=E6=94=B9?= =?UTF-8?q?=E7=94=A8=E5=86=97=E4=BD=99=E5=AD=97=E6=AE=B5=E5=AD=98=E5=82=A8?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在AppUser实体中新增nickname和phone冗余字段 - 移除AppUserMapper.xml中的跨库JOIN查询gxwebsoft_core.sys_user表 - 更新搜索条件使用本地冗余字段而非关联表字段 - 注入UserService用于写入冗余用户基础信息 - 邀请成员时查询系统用户信息并冗余存储到本地表 - 日志输出中增加用户名信息便于调试追踪 --- .../com/gxwebsoft/app/entity/AppUser.java | 6 ++++++ .../app/mapper/xml/AppUserMapper.xml | 11 ++++------ .../app/service/impl/AppUserServiceImpl.java | 20 ++++++++++++++++++- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/gxwebsoft/app/entity/AppUser.java b/src/main/java/com/gxwebsoft/app/entity/AppUser.java index a5d3ad3..09ade12 100644 --- a/src/main/java/com/gxwebsoft/app/entity/AppUser.java +++ b/src/main/java/com/gxwebsoft/app/entity/AppUser.java @@ -35,9 +35,15 @@ public class AppUser implements Serializable { @Schema(description = "用户名(冗余)") private String username; + @Schema(description = "昵称(冗余)") + private String nickname; + @Schema(description = "头像(冗余)") private String avatar; + @Schema(description = "手机号(冗余,脱敏存储)") + private String phone; + @Schema(description = "角色: owner/admin/developer/viewer") private String role; diff --git a/src/main/java/com/gxwebsoft/app/mapper/xml/AppUserMapper.xml b/src/main/java/com/gxwebsoft/app/mapper/xml/AppUserMapper.xml index 46d080d..eab0732 100644 --- a/src/main/java/com/gxwebsoft/app/mapper/xml/AppUserMapper.xml +++ b/src/main/java/com/gxwebsoft/app/mapper/xml/AppUserMapper.xml @@ -2,13 +2,11 @@ - + - SELECT a.*, w.website_name, w.website_code, w.website_icon, - u.nickname, u.avatar AS user_avatar, u.phone + SELECT a.*, w.website_name, w.website_code, w.website_icon FROM app_user a LEFT JOIN cms_website w ON a.website_id = w.website_id AND w.deleted = 0 - LEFT JOIN gxwebsoft_core.sys_user u ON a.user_id = u.user_id AND a.id = #{param.id} @@ -21,7 +19,7 @@ AND (a.username LIKE CONCAT('%', #{param.username}, '%') - OR u.nickname LIKE CONCAT('%', #{param.username}, '%')) + OR a.nickname LIKE CONCAT('%', #{param.username}, '%')) AND a.role = #{param.role} @@ -46,8 +44,7 @@ AND (a.username LIKE CONCAT('%', #{param.keywords}, '%') - OR u.nickname LIKE CONCAT('%', #{param.keywords}, '%') - ) + OR a.nickname LIKE CONCAT('%', #{param.keywords}, '%')) diff --git a/src/main/java/com/gxwebsoft/app/service/impl/AppUserServiceImpl.java b/src/main/java/com/gxwebsoft/app/service/impl/AppUserServiceImpl.java index 47ff990..0732a7d 100644 --- a/src/main/java/com/gxwebsoft/app/service/impl/AppUserServiceImpl.java +++ b/src/main/java/com/gxwebsoft/app/service/impl/AppUserServiceImpl.java @@ -10,9 +10,12 @@ import com.gxwebsoft.app.entity.AppUser; import com.gxwebsoft.app.param.AppUserParam; import com.gxwebsoft.common.core.web.PageParam; import com.gxwebsoft.common.core.web.PageResult; +import com.gxwebsoft.common.system.entity.User; +import com.gxwebsoft.common.system.service.UserService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.List; @@ -26,6 +29,10 @@ import java.util.List; @Service public class AppUserServiceImpl extends ServiceImpl implements AppUserService { + /** 注入同 jar 包内的 UserService,用于写入冗余用户信息,不做跨库 JOIN */ + @Resource + private UserService userService; + @Override public PageResult pageRel(AppUserParam param) { PageParam page = new PageParam<>(param); @@ -56,6 +63,12 @@ public class AppUserServiceImpl extends ServiceImpl impl throw new RuntimeException("该用户已经是应用成员"); } + // 查询用户基础信息并冗余写入,避免跨库 JOIN + User sysUser = userService.getByIdIgnoreTenant(userId); + if (sysUser == null) { + throw new RuntimeException("用户不存在,userId=" + userId); + } + AppUser appUser = new AppUser(); appUser.setWebsiteId(websiteId); appUser.setUserId(userId); @@ -64,9 +77,14 @@ public class AppUserServiceImpl extends ServiceImpl impl appUser.setInviteTime(LocalDateTime.now()); appUser.setStatus(0); appUser.setSortNumber(0); + // 冗余写入用户基础信息,彻底解除跨库 JOIN 依赖 + appUser.setUsername(sysUser.getUsername()); + appUser.setNickname(sysUser.getNickname()); + appUser.setAvatar(sysUser.getAvatar()); + appUser.setPhone(sysUser.getPhone()); save(appUser); - log.info("邀请成员成功,websiteId={}, userId={}, role={}", websiteId, userId, role); + log.info("邀请成员成功,websiteId={}, userId={}, username={}, role={}", websiteId, userId, sysUser.getUsername(), role); return appUser; }