From 884989f61f559f98a9b56b8c004697e8270d7241 Mon Sep 17 00:00:00 2001 From: yanglin Date: Fri, 21 Mar 2025 15:22:25 +0800 Subject: [PATCH 01/11] =?UTF-8?q?REQ-3540:=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=A7=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nanopart/doc/file/filedb/FileDatabaseService.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/filedb/FileDatabaseService.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/filedb/FileDatabaseService.java index 45ae505a..9d054f01 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/filedb/FileDatabaseService.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/filedb/FileDatabaseService.java @@ -56,6 +56,8 @@ import cn.azxo.framework.common.model.Page; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import javax.annotation.Nullable; + /** * @author yanglin */ @@ -118,7 +120,7 @@ public class FileDatabaseService { asyncUtils.getOrTimeout(future, "激活"); } - private Future asyncCopySubtree(FileDatabase db, IndexNode templateRoot, Runnable nullablePostProcessor) { + private Future asyncCopySubtree(FileDatabase db, IndexNode templateRoot, @Nullable Runnable postProcessor) { return indexManager.async(() -> { // don't inline in transaction CopiedOssFiles copiedOssFiles = indexManager.copySubtreeOssFiles(templateRoot); @@ -129,8 +131,8 @@ public class FileDatabaseService { indexManager.copySubTree(templateRoot, null, new SetScopeCopyFileVisitor(copiedOssFiles, db)); fileDatabaseDao.updateState(db.getCode(), FileDatabaseState.ACTIVATED); fileDatabaseDao.setPurchaseTime(db.getCode(), new Date()); - if (nullablePostProcessor != null) - nullablePostProcessor.run(); + if (postProcessor != null) + postProcessor.run(); }); }); } From ab7ca307a521c8f3f31ed5267a2237c7e866811d Mon Sep 17 00:00:00 2001 From: yanglin Date: Fri, 21 Mar 2025 15:23:38 +0800 Subject: [PATCH 02/11] =?UTF-8?q?REQ-3540:=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=A7=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../axzo/nanopart/doc/file/filedb/FileDatabaseService.java | 6 +++--- .../java/cn/axzo/nanopart/doc/file/index/IndexManager.java | 6 +++--- .../axzo/nanopart/doc/file/index/copy/CopyFileVisitor.java | 4 ++-- .../index/copy/{CopiedOssFiles.java => OssFilesCopy.java} | 2 +- .../doc/file/index/copy/SetScopeCopyFileVisitor.java | 4 ++-- 5 files changed, 11 insertions(+), 11 deletions(-) rename doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/copy/{CopiedOssFiles.java => OssFilesCopy.java} (91%) diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/filedb/FileDatabaseService.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/filedb/FileDatabaseService.java index 9d054f01..99809897 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/filedb/FileDatabaseService.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/filedb/FileDatabaseService.java @@ -45,7 +45,7 @@ import cn.axzo.nanopart.doc.entity.IndexNode; import cn.axzo.nanopart.doc.entity.TemplateDatabase; import cn.axzo.nanopart.doc.file.index.IndexManager; import cn.axzo.nanopart.doc.file.index.IndexQueryService; -import cn.axzo.nanopart.doc.file.index.copy.CopiedOssFiles; +import cn.axzo.nanopart.doc.file.index.copy.OssFilesCopy; import cn.axzo.nanopart.doc.file.index.copy.SetScopeCopyFileVisitor; import cn.axzo.nanopart.doc.file.index.domain.IndexNodes; import cn.axzo.nanopart.doc.file.templatedb.TemplateDatabaseQueryService; @@ -123,12 +123,12 @@ public class FileDatabaseService { private Future asyncCopySubtree(FileDatabase db, IndexNode templateRoot, @Nullable Runnable postProcessor) { return indexManager.async(() -> { // don't inline in transaction - CopiedOssFiles copiedOssFiles = indexManager.copySubtreeOssFiles(templateRoot); + OssFilesCopy filesCopy = indexManager.copySubtreeOssFiles(templateRoot); transaction.executeWithoutResult(unused -> { FileDatabase reload = fileDatabaseDao.getForUpdateOrThrow(db.getCode()); if (reload.isActivated()) return; - indexManager.copySubTree(templateRoot, null, new SetScopeCopyFileVisitor(copiedOssFiles, db)); + indexManager.copySubTree(templateRoot, null, new SetScopeCopyFileVisitor(filesCopy, db)); fileDatabaseDao.updateState(db.getCode(), FileDatabaseState.ACTIVATED); fileDatabaseDao.setPurchaseTime(db.getCode(), new Date()); if (postProcessor != null) diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexManager.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexManager.java index 90ae521a..d4f2a220 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexManager.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexManager.java @@ -25,7 +25,7 @@ import cn.axzo.nanopart.doc.dao.DocLogDao; import cn.axzo.nanopart.doc.dao.IndexNodeDao; import cn.axzo.nanopart.doc.entity.IndexNode; import cn.axzo.nanopart.doc.file.index.copy.ConnectNodeVisitor; -import cn.axzo.nanopart.doc.file.index.copy.CopiedOssFiles; +import cn.axzo.nanopart.doc.file.index.copy.OssFilesCopy; import cn.axzo.nanopart.doc.file.index.copy.CopyFileVisitor; import cn.axzo.nanopart.doc.file.index.copy.CopyNodeVisitor; import cn.axzo.nanopart.doc.file.index.domain.NameUsedException; @@ -157,10 +157,10 @@ public class IndexManager { return subtree; } - public CopiedOssFiles copySubtreeOssFiles(IndexNode srcNode) { + public OssFilesCopy copySubtreeOssFiles(IndexNode srcNode) { BizAssertions.assertFalse(TransactionSynchronizationManager.isActualTransactionActive(), "不能在事务中使用"); List ossFileKeys = indexNodeDao.collectValidSubtreeFileOssKeys(srcNode); - return new CopiedOssFiles(ossClient.copy(ossFileKeys)); + return new OssFilesCopy(ossClient.copy(ossFileKeys)); } /** diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/copy/CopyFileVisitor.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/copy/CopyFileVisitor.java index 95dc316f..c2179fee 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/copy/CopyFileVisitor.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/copy/CopyFileVisitor.java @@ -13,14 +13,14 @@ import lombok.RequiredArgsConstructor; @RequiredArgsConstructor public class CopyFileVisitor extends CopyNodeVisitor { - private final CopiedOssFiles copiedOssFiles; + private final OssFilesCopy ossFilesCopy; @Override public WalkingDecision visit(ValueNode node) { IndexNode copy = node.getValue(); if (copy.isFile()) { FileAttributes fileAttributes = copy.getOrCreateFileAttributes(); - String newOssFileKey = copiedOssFiles.getCopyOssFileKey(fileAttributes.getOssFileKey()); + String newOssFileKey = ossFilesCopy.getCopyOssFileKey(fileAttributes.getOssFileKey()); fileAttributes.setOssFileKey(newOssFileKey); } return super.visit(node); diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/copy/CopiedOssFiles.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/copy/OssFilesCopy.java similarity index 91% rename from doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/copy/CopiedOssFiles.java rename to doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/copy/OssFilesCopy.java index e05d5ad5..42ba1466 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/copy/CopiedOssFiles.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/copy/OssFilesCopy.java @@ -9,7 +9,7 @@ import lombok.RequiredArgsConstructor; * @author yanglin */ @RequiredArgsConstructor -public class CopiedOssFiles { +public class OssFilesCopy { private final Map old2newOssFileKey; diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/copy/SetScopeCopyFileVisitor.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/copy/SetScopeCopyFileVisitor.java index b2415ff0..b02e3542 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/copy/SetScopeCopyFileVisitor.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/copy/SetScopeCopyFileVisitor.java @@ -13,8 +13,8 @@ public class SetScopeCopyFileVisitor extends CopyFileVisitor { private final IndexNodeScope nodeScope; - public SetScopeCopyFileVisitor(CopiedOssFiles copiedOssFiles, IndexNodeScope nodeScope) { - super(copiedOssFiles); + public SetScopeCopyFileVisitor(OssFilesCopy ossFilesCopy, IndexNodeScope nodeScope) { + super(ossFilesCopy); this.nodeScope = nodeScope; } From 0b1ee671bc281327c3037907d7b249cc87e8f954 Mon Sep 17 00:00:00 2001 From: yanglin Date: Fri, 21 Mar 2025 15:28:22 +0800 Subject: [PATCH 03/11] =?UTF-8?q?REQ-3540:=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E5=A4=A7=E5=B0=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/axzo/nanopart/doc/file/filedb/FileDatabaseService.java | 2 +- .../java/cn/axzo/nanopart/doc/file/index/IndexManager.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/filedb/FileDatabaseService.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/filedb/FileDatabaseService.java index 99809897..50d65e53 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/filedb/FileDatabaseService.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/filedb/FileDatabaseService.java @@ -128,7 +128,7 @@ public class FileDatabaseService { FileDatabase reload = fileDatabaseDao.getForUpdateOrThrow(db.getCode()); if (reload.isActivated()) return; - indexManager.copySubTree(templateRoot, null, new SetScopeCopyFileVisitor(filesCopy, db)); + indexManager.copySubtree(templateRoot, null, new SetScopeCopyFileVisitor(filesCopy, db)); fileDatabaseDao.updateState(db.getCode(), FileDatabaseState.ACTIVATED); fileDatabaseDao.setPurchaseTime(db.getCode(), new Date()); if (postProcessor != null) diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexManager.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexManager.java index d4f2a220..78c60129 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexManager.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexManager.java @@ -177,7 +177,7 @@ public class IndexManager { return transaction.execute(unused -> { docLogDao.log("indexNode:asyncCopy", srcCode, "srcCode", srcCode, "destParentCode", destParentCode); //noinspection SpringTransactionalMethodCallsInspection - return copySubTree(srcNode, destParentNode, copyNodeVisitor); + return copySubtree(srcNode, destParentNode, copyNodeVisitor); }); }); } @@ -209,7 +209,7 @@ public class IndexManager { } @BizTransactional - public IndexNode copySubTree(IndexNode src, @Nullable IndexNode destParent, CopyNodeVisitor copyNodeVisitor) { + public IndexNode copySubtree(IndexNode src, @Nullable IndexNode destParent, CopyNodeVisitor copyNodeVisitor) { List subtreeNodes = indexSupport.collectValidSubtreeAsValueRoot(src); RootNode srcRoot = TreeUtils.transform(subtreeNodes, IndexNode.class, true); srcRoot.walkDown(copyNodeVisitor); From 80ce7ac4aae62cc5c1ac09ce0bfd7cb8353f4da0 Mon Sep 17 00:00:00 2001 From: yanglin Date: Fri, 21 Mar 2025 15:32:36 +0800 Subject: [PATCH 04/11] REQ-3540: misc --- .../axzo/nanopart/doc/file/index/copy/ConnectNodeVisitor.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/copy/ConnectNodeVisitor.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/copy/ConnectNodeVisitor.java index 50b64c91..1ed7dc68 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/copy/ConnectNodeVisitor.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/copy/ConnectNodeVisitor.java @@ -46,12 +46,12 @@ public class ConnectNodeVisitor extends ValueNodeRecursiveVisitor { continue; } // IMPORTANT: append REVERSED parent path but not parent id, because: - // 1. We're walking the tree up + // 1. We're walking up the tree // 2. The dest parent node may not be the tree root if (destParentNode != null) path = path.append(destParentNode.path().reverse()); } - // reserve the path because we're walking up the tree while building the path + // reserve the path because we're walking up the tree while building the path return path.reverse(); } From ae07c79302be1792458f4cea26132bcb1368a2bd Mon Sep 17 00:00:00 2001 From: yanglin Date: Fri, 21 Mar 2025 15:35:37 +0800 Subject: [PATCH 05/11] REQ-3540: misc --- .../cn/axzo/nanopart/doc/api/domain/DirectoryAttributes.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/domain/DirectoryAttributes.java b/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/domain/DirectoryAttributes.java index 6f981d7d..9cd898b4 100644 --- a/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/domain/DirectoryAttributes.java +++ b/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/domain/DirectoryAttributes.java @@ -11,4 +11,9 @@ import lombok.Setter; @Getter public class DirectoryAttributes { + /** + * mock字段, 暂时避免序列化错误 + */ + private boolean placeholder; + } From dc34bfe806dcb8b21dece468ddcf91e7b0b30bbf Mon Sep 17 00:00:00 2001 From: yanglin Date: Fri, 21 Mar 2025 16:08:35 +0800 Subject: [PATCH 06/11] REQ-3540: misc --- .../nanopart/doc/wps/wpsedit/WpsEditManager.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/wps/wpsedit/WpsEditManager.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/wps/wpsedit/WpsEditManager.java index 186f5953..990c0c23 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/wps/wpsedit/WpsEditManager.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/wps/wpsedit/WpsEditManager.java @@ -4,12 +4,12 @@ import java.util.HashMap; import java.util.Map; import java.util.Objects; -import cn.axzo.nanopart.doc.api.domain.FileAttributes; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.stereotype.Component; import com.alibaba.excel.util.StringUtils; +import cn.axzo.nanopart.doc.api.domain.FileAttributes; import cn.axzo.nanopart.doc.api.wps.request.WpsEditUploadAddressRequest; import cn.axzo.nanopart.doc.api.wps.request.WpsEditUploadCompleteRequest; import cn.axzo.nanopart.doc.api.wps.request.WpsEditUploadPrepareRequest; @@ -18,16 +18,15 @@ import cn.axzo.nanopart.doc.api.wps.response.WpsEditUploadCompleteResponse; import cn.axzo.nanopart.doc.api.wps.response.WpsEditUploadPrepareResponse; import cn.axzo.nanopart.doc.config.DocProps; import cn.axzo.nanopart.doc.dao.IndexNodeDao; -import cn.axzo.nanopart.doc.dao.TemplateDatabaseDao; import cn.axzo.nanopart.doc.entity.IndexNode; import cn.axzo.nanopart.doc.file.index.IndexManager; import cn.axzo.nanopart.doc.file.mq.FileBroadcaster; import cn.axzo.nanopart.doc.integration.DocOssGateway; +import cn.axzo.nanopart.doc.utils.BizTransactional; import cn.axzo.oss.http.model.ApiSignUrlUploadRequest; import cn.axzo.oss.http.model.ApiSignUrlUploadResponse; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.transaction.annotation.Transactional; /** * 文档编辑 @@ -43,7 +42,6 @@ import org.springframework.transaction.annotation.Transactional; public class WpsEditManager { private final IndexManager indexManager; - private final TemplateDatabaseDao templateDatabaseDao; private final IndexNodeDao indexNodeDao; private final DocOssGateway docOssGateway; private final FileBroadcaster fileBroadcaster; @@ -109,7 +107,7 @@ public class WpsEditManager { * 3 上传完成后,回调通知上传结果 * 说明:WebOffice 在将新版本文件上传到指定地址后,将会回调通知接入方 */ - @Transactional + @BizTransactional public WpsEditUploadCompleteResponse uploadComplete(WpsEditUploadCompleteRequest request) { log.info("wpsEditManager-uploadComplete-params,request:{}", request); //加锁 @@ -139,9 +137,7 @@ public class WpsEditManager { } fileAttributes.setVersion(fileAttributes.fetchVersion() + 1); indexNodeDao.updateAttributes(node); - indexNodeDao.updateFileSize(request.getDocCode(), request.getSize()); - - fileBroadcaster.fireFileSizeChanged(request.getDocCode()); + indexManager.updateFileSize(node, request.getSize()); } From ec1790137c5fc7e7696a7592e8212577b83e1917 Mon Sep 17 00:00:00 2001 From: yanglin Date: Fri, 21 Mar 2025 17:13:32 +0800 Subject: [PATCH 07/11] REQ-3540: misc --- .../java/cn/axzo/nanopart/doc/config/DocProps.java | 12 ------------ .../axzo/nanopart/doc/file/index/IndexManager.java | 6 ++++-- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/config/DocProps.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/config/DocProps.java index 0ac88f81..e97fa37c 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/config/DocProps.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/config/DocProps.java @@ -5,7 +5,6 @@ import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.context.annotation.Configuration; -import cn.axzo.nanopart.doc.api.enums.FileFormat; import lombok.Getter; import lombok.Setter; @@ -21,7 +20,6 @@ public class DocProps { private String createFileOssFileKeyWord = "ent-workspace-empty-docx"; private String createFileFileKeyExcel = "ent-workspace-empty-xlsx"; - private String createFileFileKeyPpt = "ent-workspace-empty-pptx"; private int indexNodeMaxChildrenSize = 200; private int indexNodeMaxDepth = 10; private int indexNodeMaxCopyFileSize = 1000; @@ -35,14 +33,4 @@ public class DocProps { private String defaultIconWord = "https://axzo-obs-public.obs.cn-north-4.myhuaweicloud.com:443/doc/doc/word.png"; private String defaultIconPdf = "https://axzo-obs-public.obs.cn-north-4.myhuaweicloud.com:443/doc/doc/pdf.png"; - public String createFileOssFileKey(FileFormat format) { - if (format == FileFormat.WORD) - return createFileOssFileKeyWord; - if (format == FileFormat.EXCEL) - return createFileFileKeyExcel; - if (format == FileFormat.PDF) - return createFileFileKeyPpt; - return ""; - } - } diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexManager.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexManager.java index 78c60129..a37675ad 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexManager.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexManager.java @@ -25,9 +25,9 @@ import cn.axzo.nanopart.doc.dao.DocLogDao; import cn.axzo.nanopart.doc.dao.IndexNodeDao; import cn.axzo.nanopart.doc.entity.IndexNode; import cn.axzo.nanopart.doc.file.index.copy.ConnectNodeVisitor; -import cn.axzo.nanopart.doc.file.index.copy.OssFilesCopy; import cn.axzo.nanopart.doc.file.index.copy.CopyFileVisitor; import cn.axzo.nanopart.doc.file.index.copy.CopyNodeVisitor; +import cn.axzo.nanopart.doc.file.index.copy.OssFilesCopy; import cn.axzo.nanopart.doc.file.index.domain.NameUsedException; import cn.axzo.nanopart.doc.file.mq.FileBroadcaster; import cn.axzo.nanopart.doc.integration.OssClient; @@ -70,7 +70,9 @@ public class IndexManager { // check without lock ensureChildNameNotUsed(create, IndexNodeType.FILE, false); String fullFileName = String.format("%s.%s", create.name(), format.createFileExtension()); - String ossFileKey = ossClient.copy(docProps.createFileOssFileKey(format), fullFileName); + String emptyOssFileKey = format == FileFormat.WORD ? docProps.getCreateFileOssFileKeyWord() + : docProps.getCreateFileFileKeyExcel(); + String ossFileKey = ossClient.copy(emptyOssFileKey, fullFileName); return OssFile.create(format, format.createFileExtension(), 0, ossFileKey); } From a13a4bb45a389559eb5692c201f7c430f7b251e4 Mon Sep 17 00:00:00 2001 From: yanglin Date: Fri, 21 Mar 2025 17:54:09 +0800 Subject: [PATCH 08/11] REQ-3540: misc --- .../doc/api/domain/IndexNodeParentScope.java | 20 +++++++++++++++++++ .../doc/api/domain/IndexNodeScope.java | 20 ------------------- .../nanopart/doc/file/index/IndexManager.java | 6 +++--- .../nanopart/doc/file/index/IndexSupport.java | 14 ++++++++++++- 4 files changed, 36 insertions(+), 24 deletions(-) diff --git a/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/domain/IndexNodeParentScope.java b/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/domain/IndexNodeParentScope.java index adf82da5..df99ae2b 100644 --- a/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/domain/IndexNodeParentScope.java +++ b/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/domain/IndexNodeParentScope.java @@ -8,6 +8,26 @@ public interface IndexNodeParentScope { IndexNodeScope nodeScope(); + default boolean isChildrenNameDuplicatable() { + switch (nodeScope().context()) { + case FILE_TEMPLATE: + case TEMPLATE_DATABASE: + return false; + default: + return nodeScope().scope().getChildNameDuplicatable(); + } + } + + default boolean isLimitChildrenCount() { + switch (nodeScope().context()) { + case FILE_TEMPLATE: + case TEMPLATE_DATABASE: + return true; + default: + return nodeScope().scope().getLimitChildrenCount(); + } + } + default String parentCode() { return IndexNodeScope.TREE_ROOT_NODE_CODE; } diff --git a/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/domain/IndexNodeScope.java b/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/domain/IndexNodeScope.java index b527c2d3..bbb5eed7 100644 --- a/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/domain/IndexNodeScope.java +++ b/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/domain/IndexNodeScope.java @@ -19,26 +19,6 @@ public interface IndexNodeScope { return TREE_ROOT_NODE_CODE; } - default boolean isChildrenNameDuplicatable() { - switch (context()) { - case FILE_TEMPLATE: - case TEMPLATE_DATABASE: - return false; - default: - return scope().getChildNameDuplicatable(); - } - } - - default boolean isLimitChildrenCount() { - switch (context()) { - case FILE_TEMPLATE: - case TEMPLATE_DATABASE: - return true; - default: - return scope().getLimitChildrenCount(); - } - } - String TREE_ROOT_NODE_CODE = ""; Long TREE_ROOT_NODE_ID = 0L; diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexManager.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexManager.java index a37675ad..4b546454 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexManager.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexManager.java @@ -125,7 +125,7 @@ public class IndexManager { } private void ensureChildNameNotUsed(NodeCreate create, IndexNodeType nodeType, boolean withLock) { - if (create.nodeScope().isChildrenNameDuplicatable()) + if (indexSupport.isChildrenNameDuplicatable(create)) return; if (withLock) indexSupport.lockParentAndReleaseOnCommit(create); @@ -138,7 +138,7 @@ public class IndexManager { if (indexNode.getName().equals(newName)) return; docLogDao.log("indexNode:rename", code, "newName", newName); - if (!indexNode.isChildrenNameDuplicatable()) { + if (!indexSupport.isChildrenNameDuplicatable(indexNode)) { indexSupport.lockParentAndReleaseOnCommit(indexNode); indexSupport.ensureChildNameNotUsed(indexNode, indexNode.getNodeType(), newName); } @@ -228,7 +228,7 @@ public class IndexManager { indexNodeDao.connectNodes(TreeUtils.collectValues(connectRoot)); IndexNode rootNode = connectRoot.getChildren().get(0).tryGetValue(); // resolve the name issue - if (!rootNode.isChildrenNameDuplicatable()) + if (!indexSupport.isChildrenNameDuplicatable(rootNode)) indexSupport.incrNameIfDuplicate(rootNode); // get the coped root with full props return indexNodeDao.findOrNull(rootNode.getCode()); diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexSupport.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexSupport.java index a8f61524..2a870d96 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexSupport.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexSupport.java @@ -96,11 +96,23 @@ public class IndexSupport { BizAssertions.assertTrue( indexNodeDao.validChildrenCount(parent.getCode()) < docProps.getIndexNodeMaxChildrenSize(), "创建失败, 子节点数量不能超过 {}", docProps.getIndexNodeMaxChildrenSize()); - if (!parent.isRoot() && parent.isLimitChildrenCount()) + if (!parent.isRoot() && isLimitChildrenCount(child)) BizAssertions.assertTrue(parent.path().depth() < docProps.getIndexNodeMaxDepth(), // "节点深度超过限制{}, 无法再创建新节点", docProps.getIndexNodeMaxDepth()); } + boolean isChildrenNameDuplicatable(IndexNodeParentScope parentScope) { + if (StringUtils.isNotBlank(parentScope.parentCode())) + return indexNodeDao.getOrThrow(parentScope.parentCode()).isChildrenNameDuplicatable(); + return parentScope.isChildrenNameDuplicatable(); + } + + boolean isLimitChildrenCount(IndexNodeParentScope parentScope) { + if (StringUtils.isNotBlank(parentScope.parentCode())) + return indexNodeDao.getOrThrow(parentScope.parentCode()).isLimitChildrenCount(); + return parentScope.isLimitChildrenCount(); + } + List collectValidSubtreeAsValueRoot(IndexNode srcNode) { List subtreeNodes = indexNodeDao.collectValidSubtreeNodes(srcNode); subtreeNodes.stream() // From d075ff8443c925768c320cf8b8de50a835dcf38a Mon Sep 17 00:00:00 2001 From: yanglin Date: Fri, 21 Mar 2025 18:07:33 +0800 Subject: [PATCH 09/11] REQ-3540: misc --- .../doc/api/domain/IndexNodeParentScope.java | 20 ------------------- .../axzo/nanopart/doc/entity/IndexNode.java | 2 +- .../nanopart/doc/file/index/IndexSupport.java | 20 +++++++++++++------ 3 files changed, 15 insertions(+), 27 deletions(-) diff --git a/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/domain/IndexNodeParentScope.java b/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/domain/IndexNodeParentScope.java index df99ae2b..adf82da5 100644 --- a/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/domain/IndexNodeParentScope.java +++ b/doc/doc-api/src/main/java/cn/axzo/nanopart/doc/api/domain/IndexNodeParentScope.java @@ -8,26 +8,6 @@ public interface IndexNodeParentScope { IndexNodeScope nodeScope(); - default boolean isChildrenNameDuplicatable() { - switch (nodeScope().context()) { - case FILE_TEMPLATE: - case TEMPLATE_DATABASE: - return false; - default: - return nodeScope().scope().getChildNameDuplicatable(); - } - } - - default boolean isLimitChildrenCount() { - switch (nodeScope().context()) { - case FILE_TEMPLATE: - case TEMPLATE_DATABASE: - return true; - default: - return nodeScope().scope().getLimitChildrenCount(); - } - } - default String parentCode() { return IndexNodeScope.TREE_ROOT_NODE_CODE; } diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/entity/IndexNode.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/entity/IndexNode.java index 3684e37a..44a76028 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/entity/IndexNode.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/entity/IndexNode.java @@ -239,4 +239,4 @@ public class IndexNode extends BaseEntity implements NodeValue, Index // my parent scope return parentCode; } -} +} \ No newline at end of file diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexSupport.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexSupport.java index 2a870d96..da507207 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexSupport.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexSupport.java @@ -102,15 +102,23 @@ public class IndexSupport { } boolean isChildrenNameDuplicatable(IndexNodeParentScope parentScope) { - if (StringUtils.isNotBlank(parentScope.parentCode())) - return indexNodeDao.getOrThrow(parentScope.parentCode()).isChildrenNameDuplicatable(); - return parentScope.isChildrenNameDuplicatable(); + switch (parentScope.nodeScope().context()) { + case FILE_TEMPLATE: + case TEMPLATE_DATABASE: + return false; + default: + return parentScope.nodeScope().scope().getChildNameDuplicatable(); + } } boolean isLimitChildrenCount(IndexNodeParentScope parentScope) { - if (StringUtils.isNotBlank(parentScope.parentCode())) - return indexNodeDao.getOrThrow(parentScope.parentCode()).isLimitChildrenCount(); - return parentScope.isLimitChildrenCount(); + switch (parentScope.nodeScope().context()) { + case FILE_TEMPLATE: + case TEMPLATE_DATABASE: + return true; + default: + return parentScope.nodeScope().scope().getLimitChildrenCount(); + } } List collectValidSubtreeAsValueRoot(IndexNode srcNode) { From 8638e855c9e101042eb0c542d7c08d82dc0d9cea Mon Sep 17 00:00:00 2001 From: yanglin Date: Fri, 21 Mar 2025 18:07:48 +0800 Subject: [PATCH 10/11] REQ-3540: misc --- .../nanopart/doc/file/index/IndexSupport.java | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexSupport.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexSupport.java index da507207..42ec5bf9 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexSupport.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexSupport.java @@ -101,26 +101,6 @@ public class IndexSupport { "节点深度超过限制{}, 无法再创建新节点", docProps.getIndexNodeMaxDepth()); } - boolean isChildrenNameDuplicatable(IndexNodeParentScope parentScope) { - switch (parentScope.nodeScope().context()) { - case FILE_TEMPLATE: - case TEMPLATE_DATABASE: - return false; - default: - return parentScope.nodeScope().scope().getChildNameDuplicatable(); - } - } - - boolean isLimitChildrenCount(IndexNodeParentScope parentScope) { - switch (parentScope.nodeScope().context()) { - case FILE_TEMPLATE: - case TEMPLATE_DATABASE: - return true; - default: - return parentScope.nodeScope().scope().getLimitChildrenCount(); - } - } - List collectValidSubtreeAsValueRoot(IndexNode srcNode) { List subtreeNodes = indexNodeDao.collectValidSubtreeNodes(srcNode); subtreeNodes.stream() // @@ -184,6 +164,26 @@ public class IndexSupport { .list(); } + boolean isChildrenNameDuplicatable(IndexNodeParentScope parentScope) { + switch (parentScope.nodeScope().context()) { + case FILE_TEMPLATE: + case TEMPLATE_DATABASE: + return false; + default: + return parentScope.nodeScope().scope().getChildNameDuplicatable(); + } + } + + boolean isLimitChildrenCount(IndexNodeParentScope parentScope) { + switch (parentScope.nodeScope().context()) { + case FILE_TEMPLATE: + case TEMPLATE_DATABASE: + return true; + default: + return parentScope.nodeScope().scope().getLimitChildrenCount(); + } + } + Future submit(Callable callable) { return executor.submit(() -> { try { From bd40d4c229a1563edb9193316593ef5dc8814eb3 Mon Sep 17 00:00:00 2001 From: yanglin Date: Fri, 21 Mar 2025 18:08:02 +0800 Subject: [PATCH 11/11] REQ-3540: misc --- .../cn/axzo/nanopart/doc/file/index/IndexSupport.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexSupport.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexSupport.java index 42ec5bf9..6ae86c88 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexSupport.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/file/index/IndexSupport.java @@ -165,22 +165,24 @@ public class IndexSupport { } boolean isChildrenNameDuplicatable(IndexNodeParentScope parentScope) { - switch (parentScope.nodeScope().context()) { + IndexNodeScope nodeScope = parentScope.nodeScope(); + switch (nodeScope.context()) { case FILE_TEMPLATE: case TEMPLATE_DATABASE: return false; default: - return parentScope.nodeScope().scope().getChildNameDuplicatable(); + return nodeScope.scope().getChildNameDuplicatable(); } } boolean isLimitChildrenCount(IndexNodeParentScope parentScope) { - switch (parentScope.nodeScope().context()) { + IndexNodeScope nodeScope = parentScope.nodeScope(); + switch (nodeScope.context()) { case FILE_TEMPLATE: case TEMPLATE_DATABASE: return true; default: - return parentScope.nodeScope().scope().getLimitChildrenCount(); + return nodeScope.scope().getLimitChildrenCount(); } }