From 34981c30a78e8bbd7791131059a9210f9928b62c Mon Sep 17 00:00:00 2001
From: 刘光辉 <347230014@qq.com>
Date: 星期四, 17 九月 2026 09:24:09 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into master

---
 jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsPermission/DmsPrincipalValidator.java |  100 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 100 insertions(+), 0 deletions(-)

diff --git a/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsPermission/DmsPrincipalValidator.java b/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsPermission/DmsPrincipalValidator.java
new file mode 100644
index 0000000..354f11f
--- /dev/null
+++ b/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsPermission/DmsPrincipalValidator.java
@@ -0,0 +1,100 @@
+package jnpf.dmsPermission;
+
+import jnpf.dmsEntity.permission.enums.DmsPrincipalType;
+import jnpf.dmsEntity.permission.form.PermissionGrantItemForm;
+import jnpf.dmsMapper.DmsPermissionGroupMapper;
+import jnpf.permission.OrganizeApi;
+import jnpf.permission.PositionApi;
+import jnpf.permission.RoleApi;
+import jnpf.permission.UserApi;
+import jnpf.permission.entity.OrganizeEntity;
+import jnpf.permission.entity.PermissionGroupEntity;
+import jnpf.permission.entity.PositionEntity;
+import jnpf.permission.entity.RoleEntity;
+import jnpf.permission.entity.UserEntity;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EnumMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+
+@Component
+@RequiredArgsConstructor
+public class DmsPrincipalValidator {
+    private final UserApi userApi;
+    private final OrganizeApi organizeApi;
+    private final PositionApi positionApi;
+    private final RoleApi roleApi;
+    private final DmsPermissionGroupMapper permissionGroupMapper;
+
+    public void validate(List<PermissionGrantItemForm> items) {
+        Map<DmsPrincipalType, Set<String>> expected = new EnumMap<>(DmsPrincipalType.class);
+        for (PermissionGrantItemForm item : items) {
+            expected.computeIfAbsent(item.getPrincipalType(), key -> new HashSet<>())
+                    .add(item.getPrincipalId().trim());
+        }
+        if (expected.containsKey(DmsPrincipalType.USER)) {
+            validateType(expected, DmsPrincipalType.USER, ids(userApi.getUserName(list(expected,
+                    DmsPrincipalType.USER)), UserEntity::getId));
+        }
+        if (expected.containsKey(DmsPrincipalType.ORG)) {
+            validateType(expected, DmsPrincipalType.ORG, ids(organizeApi.getListByIds(list(expected,
+                    DmsPrincipalType.ORG)), OrganizeEntity::getId));
+        }
+        if (expected.containsKey(DmsPrincipalType.POSITION)) {
+            validateType(expected, DmsPrincipalType.POSITION, ids(positionApi.getListByIds(list(expected,
+                    DmsPrincipalType.POSITION)), PositionEntity::getId));
+        }
+        if (expected.containsKey(DmsPrincipalType.ROLE)) {
+            validateType(expected, DmsPrincipalType.ROLE, ids(roleApi.getListByIds(list(expected,
+                    DmsPrincipalType.ROLE)), RoleEntity::getId));
+        }
+        if (expected.containsKey(DmsPrincipalType.GROUP)) {
+            validateType(expected, DmsPrincipalType.GROUP,
+                    ids(permissionGroupMapper.selectEnabledByIds(expected.get(DmsPrincipalType.GROUP)),
+                            PermissionGroupEntity::getId));
+        }
+    }
+
+    public void validateUsers(Collection<String> userIds) {
+        Set<String> expected = userIds.stream().map(String::trim).collect(Collectors.toSet());
+        Set<String> actual = ids(userApi.getUserName(new ArrayList<>(expected)), UserEntity::getId);
+        Set<String> missing = new HashSet<>(expected);
+        missing.removeAll(actual);
+        if (!missing.isEmpty()) {
+            throw DmsPermissionException.of(DmsPermissionError.PRINCIPAL_NOT_FOUND,
+                    DmsPrincipalType.USER.name() + " 涓讳綋涓嶅瓨鍦ㄦ垨涓讳綋鏈嶅姟涓嶅彲鐢�: " + missing);
+        }
+    }
+
+    private List<String> list(Map<DmsPrincipalType, Set<String>> values, DmsPrincipalType type) {
+        Set<String> ids = values.get(type);
+        return ids == null ? Collections.<String>emptyList() : new ArrayList<>(ids);
+    }
+
+    private <T> Set<String> ids(List<T> values, Function<T, String> getter) {
+        if (values == null) {
+            return Collections.emptySet();
+        }
+        return values.stream().filter(value -> value != null && getter.apply(value) != null)
+                .map(getter).collect(Collectors.toSet());
+    }
+
+    private void validateType(Map<DmsPrincipalType, Set<String>> expected, DmsPrincipalType type,
+                              Set<String> actual) {
+        Set<String> missing = new HashSet<>(expected.getOrDefault(type, Collections.<String>emptySet()));
+        missing.removeAll(actual);
+        if (!missing.isEmpty()) {
+            throw DmsPermissionException.of(DmsPermissionError.PRINCIPAL_NOT_FOUND,
+                    type.name() + " 涓讳綋涓嶅瓨鍦ㄦ垨涓讳綋鏈嶅姟涓嶅彲鐢�: " + missing);
+        }
+    }
+}

--
Gitblit v1.8.0