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/dmsService/DmsResourceQueryService.java |  137 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 137 insertions(+), 0 deletions(-)

diff --git a/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsService/DmsResourceQueryService.java b/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsService/DmsResourceQueryService.java
new file mode 100644
index 0000000..3d64732
--- /dev/null
+++ b/jnpf-dms/jnpf-dms-biz/src/main/java/jnpf/dmsService/DmsResourceQueryService.java
@@ -0,0 +1,137 @@
+package jnpf.dmsService;
+
+import jnpf.dmsEntity.permission.entity.DmsDocumentEntity;
+import jnpf.dmsEntity.permission.entity.DmsFileVersionEntity;
+import jnpf.dmsEntity.permission.entity.DmsFolderEntity;
+import jnpf.dmsEntity.permission.enums.DmsResourceType;
+import jnpf.dmsEntity.permission.vo.DmsCursorPageVO;
+import jnpf.dmsEntity.permission.vo.DmsPermissionResourceVO;
+import jnpf.dmsEntity.permission.vo.DmsResourceTypeDefinitionVO;
+import jnpf.dmsMapper.DmsDocumentMapper;
+import jnpf.dmsMapper.DmsFileVersionMapper;
+import jnpf.dmsMapper.DmsFolderMapper;
+import jnpf.dmsMapper.DmsPermissionResourceMapper;
+import jnpf.dmsPermission.DmsCurrentIdentity;
+import jnpf.dmsPermission.DmsCursorCodec;
+import jnpf.dmsPermission.DmsPermissionError;
+import jnpf.dmsPermission.DmsPermissionException;
+import jnpf.dmsPermission.DmsPermissionProperties;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+import java.util.UUID;
+
+@Service
+@RequiredArgsConstructor
+public class DmsResourceQueryService {
+    private final DmsCurrentIdentity currentIdentity;
+    private final DmsPermissionProperties properties;
+    private final DmsCursorCodec cursorCodec;
+    private final DmsPermissionResourceMapper resourceMapper;
+    private final DmsFolderMapper folderMapper;
+    private final DmsDocumentMapper documentMapper;
+    private final DmsFileVersionMapper fileVersionMapper;
+
+    public List<DmsResourceTypeDefinitionVO> typeDefinitions() {
+        currentIdentity.requirePermissionAdministrator();
+        return Arrays.asList(
+                new DmsResourceTypeDefinitionVO("FOLDER", "FOLDER",
+                        Arrays.asList("SELF", "SUBTREE"),
+                        Arrays.asList("CREATE", "READ", "UPDATE", "DELETE")),
+                new DmsResourceTypeDefinitionVO("DOCUMENT", "FOLDER",
+                        Collections.singletonList("SELF"), Arrays.asList("READ", "UPDATE", "DELETE")),
+                new DmsResourceTypeDefinitionVO("FILE_VERSION", "DOCUMENT",
+                        Collections.singletonList("SELF"), Arrays.asList("READ", "UPDATE", "DELETE")));
+    }
+
+    @Transactional(readOnly = true)
+    public DmsCursorPageVO<DmsPermissionResourceVO> page(String resourceType, String cursor, Integer pageSize) {
+        currentIdentity.requirePermissionAdministrator();
+        String normalizedType = normalizeResourceType(resourceType);
+        int limit = pageSize(pageSize);
+        DmsCursorCodec.Cursor decoded = cursorCodec.decode(cursor);
+        List<DmsPermissionResourceVO> rows = resourceMapper.selectPage(currentIdentity.tenantId(), normalizedType,
+                decoded.getTime(), decoded.getId(), limit + 1);
+        return page(rows, limit);
+    }
+
+    @Transactional(readOnly = true)
+    public List<DmsPermissionResourceVO> children(UUID parentId, Integer pageSize) {
+        currentIdentity.requirePermissionAdministrator();
+        return resourceMapper.selectChildren(currentIdentity.tenantId(), parentId, pageSize(pageSize));
+    }
+
+    @Transactional(readOnly = true)
+    public DmsPermissionResourceVO resource(UUID id) {
+        currentIdentity.requirePermissionAdministrator();
+        DmsPermissionResourceVO value = resourceMapper.selectView(currentIdentity.tenantId(), id);
+        return require(value, id);
+    }
+
+    @Transactional(readOnly = true)
+    public DmsFolderEntity folder(UUID id) {
+        currentIdentity.requirePermissionAdministrator();
+        DmsFolderEntity value = folderMapper.selectByTenantAndId(currentIdentity.tenantId(), id);
+        return require(value, id);
+    }
+
+    @Transactional(readOnly = true)
+    public DmsDocumentEntity document(UUID id) {
+        currentIdentity.requirePermissionAdministrator();
+        DmsDocumentEntity value = documentMapper.selectByTenantAndId(currentIdentity.tenantId(), id);
+        return require(value, id);
+    }
+
+    @Transactional(readOnly = true)
+    public DmsFileVersionEntity fileVersion(UUID id) {
+        currentIdentity.requirePermissionAdministrator();
+        DmsFileVersionEntity value = fileVersionMapper.selectByTenantAndId(currentIdentity.tenantId(), id);
+        return require(value, id);
+    }
+
+    private DmsCursorPageVO<DmsPermissionResourceVO> page(List<DmsPermissionResourceVO> rows, int limit) {
+        DmsCursorPageVO<DmsPermissionResourceVO> result = new DmsCursorPageVO<>();
+        boolean hasMore = rows.size() > limit;
+        if (hasMore) {
+            rows = rows.subList(0, limit);
+        }
+        result.setList(rows);
+        result.setHasMore(hasMore);
+        if (hasMore && !rows.isEmpty()) {
+            DmsPermissionResourceVO last = rows.get(rows.size() - 1);
+            result.setNextCursor(cursorCodec.encode(last.getCreatedAt(), last.getId()));
+        }
+        return result;
+    }
+
+    private int pageSize(Integer requested) {
+        int value = requested == null ? properties.getDefaultPageSize() : requested;
+        if (value < 1 || value > properties.getMaxPageSize()) {
+            throw DmsPermissionException.of(DmsPermissionError.INVALID_REQUEST,
+                    "pageSize 蹇呴』鍦� 1 鍒� " + properties.getMaxPageSize() + " 涔嬮棿");
+        }
+        return value;
+    }
+
+    private String normalizeResourceType(String resourceType) {
+        if (resourceType == null || resourceType.trim().isEmpty()) {
+            return null;
+        }
+        try {
+            return DmsResourceType.valueOf(resourceType.trim().toUpperCase()).name();
+        } catch (IllegalArgumentException ex) {
+            throw DmsPermissionException.of(DmsPermissionError.INVALID_REQUEST, "resourceType 鏃犳晥");
+        }
+    }
+
+    private <T> T require(T value, UUID id) {
+        if (value == null) {
+            throw DmsPermissionException.of(DmsPermissionError.RESOURCE_NOT_FOUND, "璧勬簮涓嶅瓨鍦�: " + id);
+        }
+        return value;
+    }
+}

--
Gitblit v1.8.0