Procházet zdrojové kódy

删除子账号,踢出子账号登录

liudongzhi před 2 měsíci
rodič
revize
3c5e37e900

+ 37 - 4
alien-store-platform/src/main/java/shop/alien/storeplatform/service/impl/StorePlatformUserRoleServiceImpl.java

@@ -7,6 +7,7 @@ import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import shop.alien.config.redis.BaseRedisService;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.StorePlatformMenu;
 import shop.alien.entity.store.StorePlatformRole;
@@ -44,6 +45,7 @@ public class StorePlatformUserRoleServiceImpl extends ServiceImpl<StorePlatformU
     private final StorePlatformRoleMenuService storePlatformRoleMenuService;
     private final StorePlatformRoleMapper storePlatformRoleMapper;
     private final StorePlatformMenuMapper storePlatformMenuMapper;
+    private final BaseRedisService baseRedisService;
 
     @Override
     public List<Long> getRoleIdsByUserId(Integer userId, Integer storeId) {
@@ -177,14 +179,30 @@ public class StorePlatformUserRoleServiceImpl extends ServiceImpl<StorePlatformU
                 return false;
             }
 
+
+            StoreUser storeUser = storeUserMapper.selectById(userId);
+            if (storeUser != null && storeUser.getPhone() != null) {
+                // 删除Redis中的token,key格式:storePlatform_手机号
+                String tokenKey = "store_" + storeUser.getPhone();
+                String existingToken = baseRedisService.getString(tokenKey);
+                if (existingToken != null) {
+                    baseRedisService.delete(tokenKey);
+                    log.info("清除角色编辑后的用户token成功, userId={}, phone={}, tokenKey={}",
+                             userId, storeUser.getPhone(), tokenKey);
+                } else {
+                    log.warn("用户token不存在或已过期, userId={}, phone={}, tokenKey={}",
+                             userId, storeUser.getPhone(), tokenKey);
+                }
+            }
+
             // 3. 如果只是一个账号的子账号(删除前只有1个),则需要进一步判断是否为主账号,再决定是否同时逻辑删除 store_user 表
             if (subAccountCount == 1) {
                 // 查询用户信息以判断是否为主账号
-                StoreUser user = storeUserMapper.selectById(userId);
-                if (user != null) {
+
+                if (storeUser != null) {
                     // 如果用户有 storeId 字段值,说明是主账号,不应删除
-                    if (user.getStoreId() != null && user.getStoreId() > 0) {
-                        log.info("用户是主账号,不删除 store_user 记录: userId={}, storeId={}", userId, user.getStoreId());
+                    if (storeUser.getStoreId() != null && storeUser.getStoreId() > 0) {
+                        log.info("用户是主账号,不删除 store_user 记录: userId={}, storeId={}", userId, storeUser.getStoreId());
                     } else {
                         // 不是主账号,可以安全删除
                         LambdaUpdateWrapper<StoreUser> userUpdateWrapper = new LambdaUpdateWrapper<>();
@@ -510,6 +528,21 @@ public class StorePlatformUserRoleServiceImpl extends ServiceImpl<StorePlatformU
                     continue; // 继续处理下一个用户
                 }
 
+                StoreUser storeUser = storeUserMapper.selectById(userId);
+                if (storeUser != null && storeUser.getPhone() != null) {
+                    // 删除Redis中的token,key格式:storePlatform_手机号
+                    String tokenKey = "store_" + storeUser.getPhone();
+                    String existingToken = baseRedisService.getString(tokenKey);
+                    if (existingToken != null) {
+                        baseRedisService.delete(tokenKey);
+                        log.info("清除角色编辑后的用户token成功 userId={}, phone={}, tokenKey={}",
+                                 userId, storeUser.getPhone(), tokenKey);
+                    } else {
+                        log.warn("用户token不存在或已过期,userId={}, phone={}, tokenKey={}",
+                                 userId, storeUser.getPhone(), tokenKey);
+                    }
+                }
+
                 log.info("逻辑删除 store_platform_user_role 记录成功: userId={}, storeId={}, 删除数量={}", userId, storeId, result);
 
                 // 3. 判断是否只有一个子账号,如果是则同时逻辑删除 store_user 表