FengChaoYu hai 1 mes
pai
achega
12c525e94f

+ 60 - 0
src/main/java/com/gree/mall/manager/logic/admin/AdminUserLogic.java

@@ -339,8 +339,68 @@ public class AdminUserLogic {
                 .eq(AdminUserPermissionsRela::getAdminUserId, adminUser.getAdminUserId())
                 .list();
 
+        // 商家id集合
+        final List<String> websitIdList = permissionsRelaList.stream()
+                .map(AdminUserPermissionsRela::getAdminUserPermissionsId)
+                .collect(Collectors.toList());
+
+        // 根据商家id集合查找有关联的账号
+        final List<AdminUserPermissionsRela> adminUserPermissionsRelaList = adminUserPermissionsRelaService.lambdaQuery()
+                .select(AdminUserPermissionsRela::getAdminUserId)
+                .eq(AdminUserPermissionsRela::getAdminUserPermissionsId, websitIdList)
+                .groupBy(AdminUserPermissionsRela::getAdminUserId)
+                .list();
+
+        List<String> queryAdminUserIdList = adminUserPermissionsRelaList.stream()
+                .map(AdminUserPermissionsRela::getAdminUserId)
+                .filter(v -> !v.equals(adminUser.getAdminUserId()))
+                .collect(Collectors.toList());
+
+        // 当前登录账号为商家需要排除商户、平台账号;当前登录账号为商户需要排除平台账号
+        if (adminUser.getType() != 0) {
+            List<AdminUser> adminUserList = adminUserService.lambdaQuery()
+                    .select(AdminUser::getAdminUserId, AdminUser::getType)
+                    .in(AdminUser::getAdminUserId, queryAdminUserIdList)
+                    .list();
+            final Map<Integer, List<AdminUser>> userTypeMap = adminUserList.stream().collect(Collectors.groupingBy(AdminUser::getType));
+
+            // 当前登录账号为商户或主商家或商家账号类型
+            if ((adminUser.getType() == 3 || adminUser.getType() == 2 || adminUser.getType() == 4)
+                    && userTypeMap.containsKey(1)) {
+                // 排除商户主账号
+                this.clearNotCanSeeAdminUserId(userTypeMap, 1, queryAdminUserIdList);
+            }
+
+            // 当前登录账号为主商家或商家账号类型
+            if ((adminUser.getType() == 2 || adminUser.getType() == 4)
+                    && userTypeMap.containsKey(3)) {
+                // 排除商户账号
+                this.clearNotCanSeeAdminUserId(userTypeMap, 3, queryAdminUserIdList);
+            }
+
+            // 当前登录账号为商家账号类型
+            if (adminUser.getType() == 4 && userTypeMap.containsKey(2)) {
+                // 排除商家主账号
+                this.clearNotCanSeeAdminUserId(userTypeMap, 2, queryAdminUserIdList);
+            }
+
+            if (userTypeMap.containsKey(0)) {
+                // 排除平台账号
+                this.clearNotCanSeeAdminUserId(userTypeMap, 0, queryAdminUserIdList);
+            }
+        }
+
+        adminUserIdList.addAll(queryAdminUserIdList);
     }
 
+    private void clearNotCanSeeAdminUserId(Map<Integer, List<AdminUser>> userTypeMap, int type, List<String> queryAdminUserIdList) {
+        final List<String> adminUsers = userTypeMap.get(type).stream().map(AdminUser::getAdminUserId).collect(Collectors.toList());
+        final List<String> userIdList = queryAdminUserIdList.stream()
+                .filter(adminUsers::contains)
+                .collect(Collectors.toList());
+
+        queryAdminUserIdList.removeAll(userIdList);
+    }
 
     /**
      * 商户列表