FengChaoYu před 1 měsícem
rodič
revize
33ce236112

+ 46 - 3
src/main/java/com/gree/mall/manager/logic/admin/AdminUserLogic.java

@@ -212,6 +212,13 @@ public class AdminUserLogic {
                 && curLoginAmin.getUserName().equals("admin")) {
             throw new RemoteServiceException("不允许修改账号");
         }
+
+        if (curLoginAmin.getType() == 0 && adminUser.getType() != 0) {
+            if (StringUtils.isBlank(adminUser.getCompanyId()) || StringUtils.isBlank(adminUser.getCompanyName()) ) {
+                throw new RemoteServiceException("管理员创建“非平台账号”账号,必须指定所属公司");
+            }
+        }
+
         // 检查账号类型
         if (curLoginAmin.getType() == 2 || curLoginAmin.getType() == 4) {
             // 如果创建人账号是商家, 所建账号为“商家类型”
@@ -225,6 +232,8 @@ public class AdminUserLogic {
             if (curLoginAmin.getType() == 4 && !adminUser.getType().equals(curLoginAmin.getType())) {
                 throw new RemoteServiceException("操作者账号类型为“商家账号”, 只能操作选择“商家账号”");
             }
+            adminUser.setCompanyId(curLoginAmin.getCompanyId());
+            adminUser.setCompanyName(curLoginAmin.getCompanyName());
         } else if (curLoginAmin.getType() == 1 || curLoginAmin.getType() == 3) {
             // 如果创建人账号是商户, 所建账号为“商户类型”或“商家类型”
             if (adminUser.getType() == 0) {
@@ -234,9 +243,10 @@ public class AdminUserLogic {
             if (CollectionUtil.isEmpty(adminUser.getDeptList()) && CollectionUtil.isEmpty(adminUser.getPermissions())) {
                 throw new RemoteServiceException("账号类型为“商户账号”, 请选择至少1个部门或者1个商家");
             }
+            adminUser.setCompanyId(curLoginAmin.getCompanyId());
+            adminUser.setCompanyName(curLoginAmin.getCompanyName());
         }
-        adminUser.setCompanyId(curLoginAmin.getCompanyId());
-        adminUser.setCompanyName(curLoginAmin.getCompanyName());
+
         // 检查角色
         AdminRole addUserRole;
         if (StringUtils.isEmpty(adminUser.getRoleId()) ||
@@ -354,6 +364,8 @@ public class AdminUserLogic {
                 .eq(AdminUserPermissionsRela::getAdminUserId, adminUser.getAdminUserId())
                 .list();
 
+        Set<String> deptIdList = new HashSet<>();
+
         // 商家id集合
         Set<String> websitIdList = permissionsRelaList.stream()
                 .filter(v -> !v.getIsDept())
@@ -376,18 +388,32 @@ public class AdminUserLogic {
                         .map(AdminDeptWebsit::getWebsitId)
                         .collect(Collectors.toList());
                 websitIdList.addAll(websitIds);
+
+                // 遍历部门递归找出子部门
+                this.querySubDeptId(deptId, deptIdList);
+                deptIdList.add(deptId);
             }
         }
 
         // 根据商家id集合查找有关联的账号
-        final List<AdminUserPermissionsRela> adminUserPermissionsRelaList = adminUserPermissionsRelaService.lambdaQuery()
+        List<AdminUserPermissionsRela> adminUserPermissionsRelaList = adminUserPermissionsRelaService.lambdaQuery()
                 .select(AdminUserPermissionsRela::getAdminUserId)
                 .in(AdminUserPermissionsRela::getAdminUserPermissionsId, websitIdList)
                 .groupBy(AdminUserPermissionsRela::getAdminUserId)
                 .list();
 
+        if (CollectionUtil.isNotEmpty(deptIdList)) {
+            final List<AdminUserPermissionsRela> relaDeptList = adminUserPermissionsRelaService.lambdaQuery()
+                    .select(AdminUserPermissionsRela::getAdminUserId)
+                    .in(AdminUserPermissionsRela::getAdminUserPermissionsId, deptIdList)
+                    .groupBy(AdminUserPermissionsRela::getAdminUserId)
+                    .list();
+            adminUserPermissionsRelaList.addAll(relaDeptList);
+        }
+
         List<String> queryAdminUserIdList = adminUserPermissionsRelaList.stream()
                 .map(AdminUserPermissionsRela::getAdminUserId)
+                .distinct()
 //                .filter(v -> !v.equals(adminUser.getAdminUserId()))
                 .collect(Collectors.toList());
 
@@ -428,6 +454,23 @@ public class AdminUserLogic {
         adminUserIdList.addAll(queryAdminUserIdList);
     }
 
+    private void querySubDeptId(String deptId, Set<String> deptIdList) {
+        final List<AdminDept> deptList = adminDeptService.lambdaQuery()
+                .select(AdminDept::getAdminDeptId)
+                .eq(AdminDept::getPId, deptId)
+                .list();
+
+        if (CollectionUtil.isEmpty(deptIdList)) {
+            return;
+        }
+
+        for (AdminDept adminDept : deptList) {
+            this.querySubDeptId(adminDept.getAdminDeptId(), deptIdList);
+        }
+
+        deptIdList.addAll(deptList.stream().map(AdminDept::getAdminDeptId).collect(Collectors.toSet()));
+    }
+
     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()