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; }