diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/dao/IndexNodeDao.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/dao/IndexNodeDao.java index 7b13591a..4a188c1a 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/dao/IndexNodeDao.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/dao/IndexNodeDao.java @@ -68,8 +68,8 @@ public class IndexNodeDao extends ServiceImpl { .one(); } - public List findValidChildrenNameRightLike(IndexNodeParentScope parentNode, IndexNode node) { - return parentOrScopeRootQuery(parentNode) // + public List findValidChildrenNameRightLike(IndexNode node) { + return parentOrScopeRootQuery(node) // .likeRight(IndexNode::getName, node.getName()) // .eq(IndexNode::getNodeType, node.getNodeType()) // .eq(IndexNode::getState, IndexNodeState.VALID) // 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 9310256f..d9154834 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 @@ -226,7 +226,8 @@ public class IndexNode extends BaseEntity implements NodeValue, Index @Override public String parentCode() { - // as a parent - return code; + // my parent scope + return parentCode; } + } 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 3a0e2641..e5da764f 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 @@ -16,8 +16,6 @@ import cn.axzo.maokai.api.util.Ref; import cn.axzo.maokai.api.vo.response.tree.RootNode; import cn.axzo.maokai.api.vo.response.tree.TreeBuilder; import cn.axzo.maokai.api.vo.response.tree.TreeUtils; -import cn.axzo.nanopart.doc.api.domain.IndexNodeParentScope; -import cn.axzo.nanopart.doc.api.domain.IndexNodeScope; import cn.axzo.nanopart.doc.api.domain.NodeCreate; import cn.axzo.nanopart.doc.api.domain.OssFile; import cn.axzo.nanopart.doc.api.enums.FileFormat; @@ -90,21 +88,21 @@ public class IndexManager { return fileNode; } - public IndexNode createFile(NodeCreate node, OssFile ossFile) { + public IndexNode createFile(NodeCreate create, OssFile ossFile) { Ref deleteOssFile = Ref.create(false); try { return transaction.execute(unused -> { - indexSupport.lockParentAndReleaseOnCommit(node); + indexSupport.lockParentAndReleaseOnCommit(create); try { // check with lock - indexSupport.ensureChildNameNotUsed(node, IndexNodeType.FILE); + indexSupport.ensureChildNameNotUsed(create, IndexNodeType.FILE); } catch (NameUsedException e) { deleteOssFile.set(true); throw e; } - String operatorId = node.operatorId() == null ? "" : node.operatorId() + ""; - IndexNode fileNode = indexSupport.createNode(node, IndexNodeType.FILE); + String operatorId = create.operatorId() == null ? "" : create.operatorId() + ""; + IndexNode fileNode = indexSupport.createNode(create, IndexNodeType.FILE); fileNode.getOrCreateFileAttributes().setOssFileKey(ossFile.getOssFileKey()); fileNode.getOrCreateFileAttributes().setFileFormat(ossFile.getFormat()); fileNode.getOrCreateFileAttributes().setFileExtension(ossFile.getExtension()); @@ -208,19 +206,8 @@ public class IndexManager { connectRoot.walkDown(new ConnectNodeVisitor(destParent)); indexNodeDao.connectNodes(TreeUtils.collectValues(connectRoot)); IndexNode rootNode = connectRoot.getChildren().get(0). asValueNode().getValue(); - IndexNodeParentScope nameScope = new IndexNodeParentScope() { - @Override - public IndexNodeScope nodeScope() { - return rootNode; - } - - @Override - public String parentCode() { - return destParent == null ? "" : destParent.getCode(); - } - }; // resolve the name issue - indexSupport.incrNameIfDuplicate(nameScope, 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 002f61ad..ff57d2f8 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,9 +96,9 @@ class IndexSupport { "节点深度超过限制{}, 无法再创建新节点", docProps.getIndexNodeMaxDepth()); } - void incrNameIfDuplicate(IndexNodeParentScope parentScope, IndexNode rename) { - lockParentAndReleaseOnCommit(parentScope); - List nameLikeNodes = indexNodeDao.findValidChildrenNameRightLike(parentScope, rename); + void incrNameIfDuplicate(IndexNode rename) { + lockParentAndReleaseOnCommit(rename); + List nameLikeNodes = indexNodeDao.findValidChildrenNameRightLike(rename); if (nameLikeNodes.size() == 1 && IndexNode.idEquals(rename, nameLikeNodes.get(0))) return; Pattern pattern = Pattern.compile(Pattern.quote(rename.getName()) + "\\(副本(\\d+)\\)"); @@ -121,8 +121,8 @@ class IndexSupport { ensureChildNameNotUsed(create, nodeType, create.name()); } - void ensureChildNameNotUsed(IndexNodeParentScope parentNode, IndexNodeType nodeType, String childName) { - IndexNode child = indexNodeDao.findValidChildByName(parentNode, nodeType, childName); + void ensureChildNameNotUsed(IndexNodeParentScope parentScope, IndexNodeType nodeType, String childName) { + IndexNode child = indexNodeDao.findValidChildByName(parentScope, nodeType, childName); if (child != null) throw new NameUsedException("名称已被使用"); } diff --git a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/wps/wpsbase/WpsBaseManager.java b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/wps/wpsbase/WpsBaseManager.java index f239e3d0..aa9e1e71 100644 --- a/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/wps/wpsbase/WpsBaseManager.java +++ b/doc/doc-server/src/main/java/cn/axzo/nanopart/doc/wps/wpsbase/WpsBaseManager.java @@ -12,6 +12,7 @@ import cn.axzo.nanopart.doc.api.wps.response.WpsRenameResponse; import cn.axzo.nanopart.doc.api.wps.response.WpsUsersResponse; import cn.axzo.nanopart.doc.dao.IndexNodeDao; import cn.axzo.nanopart.doc.entity.IndexNode; +import cn.axzo.nanopart.doc.file.index.domain.NameUsedException; import cn.axzo.nanopart.doc.rpc.DocOssGateway; import cn.axzo.nanopart.doc.rpc.DocUserProfileGateway; import cn.axzo.oss.http.model.ApiSignUrlDownloadRequest; @@ -140,6 +141,12 @@ public class WpsBaseManager { || StringUtils.isBlank(node.getAttributes().getFileAttributes().getOssFileKey())) { return WpsRenameResponse.builder().updateFlag(false).build(); } + //TODO: 文件名重复 + //try { + // 调用IndexManager.rename(); + //} catch (NameUsedException e) { + // // 处理文件已被使用的情况 + //} indexNodeDao.rename(request.getDocCode(), request.getName()); UpdateFileInfoResponse response = this.docOssGateway.updateFileInfo(UpdateFileInfoRequest.builder().fileKey(node.getAttributes().getFileAttributes().getOssFileKey()).build()); return WpsRenameResponse.builder().updateFlag(response.isUpdateFlag()).build(); 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 7b782a34..d0ba6d3f 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 @@ -90,6 +90,7 @@ public class WpsEditManager { public WpsEditUploadCompleteResponse uploadComplete(WpsEditUploadCompleteRequest request) { IndexNode node = indexNodeDao.findOrNull(request.getDocCode()); + //TODO: 调用FileBroadcaster#fireFileSizeChanged 通知文件大小变更 return WpsEditUploadCompleteResponse.builder() .docCode(request.getDocCode()) .name(node.getName())