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