Merge remote-tracking branch 'origin/feature/REQ-3540' into feature/REQ-3540
# Conflicts: # doc/doc-server/src/main/java/cn/axzo/nanopart/doc/wps/wpsbase/WpsBaseController.java # doc/doc-server/src/main/java/cn/axzo/nanopart/doc/wps/wpsedit/WpsEditController.java
This commit is contained in:
commit
9ba3caf8d3
@ -0,0 +1,26 @@
|
||||
package cn.axzo.nanopart.doc.api.domain;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
import cn.axzo.nanopart.doc.api.enums.FileTemplateState;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
public class FileTemplateNodeInfo {
|
||||
|
||||
/**
|
||||
* 文件模版状态. UNPUBLISH: 未上架, PUBLISHED: 已上架
|
||||
*/
|
||||
private FileTemplateState state;
|
||||
|
||||
/**
|
||||
* 费用
|
||||
*/
|
||||
private BigDecimal fee;
|
||||
|
||||
}
|
||||
@ -1,5 +1,5 @@
|
||||
|
||||
package cn.axzo.nanopart.doc.api.index;
|
||||
package cn.axzo.nanopart.doc.api.domain;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@ -87,4 +87,10 @@ public class IndexNodeInfo {
|
||||
* 是否可以添加更多的子节点
|
||||
*/
|
||||
private boolean addMoreChildren;
|
||||
|
||||
/**
|
||||
* 模版市场节点相关的信息
|
||||
*/
|
||||
private FileTemplateNodeInfo fileTemplateNodeInfo;
|
||||
|
||||
}
|
||||
@ -6,9 +6,15 @@ package cn.axzo.nanopart.doc.api.enums;
|
||||
*/
|
||||
public enum CooperationAccessOption {
|
||||
|
||||
NONE,
|
||||
// 项目内所有企业可见
|
||||
ALL_ORGS_IN_PROJECT,
|
||||
// 指定参建单位可见
|
||||
ORGS_BY_COOPERATE_TYPES
|
||||
|
||||
;
|
||||
|
||||
public boolean isNone() {
|
||||
return this == NONE;
|
||||
}
|
||||
}
|
||||
|
||||
@ -6,6 +6,6 @@ package cn.axzo.nanopart.doc.api.enums;
|
||||
*/
|
||||
public enum FileTemplateState {
|
||||
|
||||
DRAFT, PUBLISHED, DELETED
|
||||
UNPUBLISH, PUBLISHED, DELETED
|
||||
|
||||
}
|
||||
|
||||
@ -15,7 +15,7 @@ import cn.axzo.nanopart.doc.api.filetemplate.request.FileTemplateGetFileInfoRequ
|
||||
import cn.axzo.nanopart.doc.api.filetemplate.request.FileTemplateUpdateFileInfoRequest;
|
||||
import cn.axzo.nanopart.doc.api.filetemplate.request.FileTemplateUploadFileRequest;
|
||||
import cn.axzo.nanopart.doc.api.filetemplate.response.FileTemplateGetFileInfoResponse;
|
||||
import cn.axzo.nanopart.doc.api.index.IndexNodeInfo;
|
||||
import cn.axzo.nanopart.doc.api.domain.IndexNodeInfo;
|
||||
import cn.axzo.nanopart.doc.api.index.request.CopyNodeRequest;
|
||||
import cn.axzo.nanopart.doc.api.index.request.DeleteNodeRequest;
|
||||
import cn.axzo.nanopart.doc.api.index.request.IndexNodePageSearchRequest;
|
||||
|
||||
@ -48,7 +48,7 @@ public class FileTemplateGetFileInfoResponse {
|
||||
private BigDecimal vipFee;
|
||||
|
||||
/**
|
||||
* 状态. DRAFT: 草稿, PUBLISHED: 已发布
|
||||
* 状态. UNPUBLISH: 未发布, PUBLISHED: 已发布
|
||||
*/
|
||||
private FileTemplateState state;
|
||||
|
||||
|
||||
@ -5,9 +5,10 @@ import java.util.Set;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
|
||||
import cn.axzo.basics.common.page.PageRequest;
|
||||
import cn.axzo.nanopart.doc.api.enums.IndexNodeType;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@ -25,7 +26,7 @@ public class IndexNodePageSearchRequest extends PageRequest {
|
||||
private String name;
|
||||
|
||||
/**
|
||||
* 搜索类型, 不指定就搜索所有类型, DIRECTORY: 目录, FILE: 文件
|
||||
* 搜索类型, 不指定就搜索所有类型, DATABASE: 空间, DIRECTORY: 目录, FILE: 文件
|
||||
*/
|
||||
private Set<IndexNodeType> nodeTypes;
|
||||
|
||||
|
||||
@ -9,7 +9,7 @@ import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
|
||||
import cn.axzo.nanopart.doc.api.index.IndexNodeInfo;
|
||||
import cn.axzo.nanopart.doc.api.domain.IndexNodeInfo;
|
||||
import cn.axzo.nanopart.doc.api.index.request.CopyNodeRequest;
|
||||
import cn.axzo.nanopart.doc.api.index.request.DeleteNodeRequest;
|
||||
import cn.axzo.nanopart.doc.api.index.request.IndexNodePageSearchRequest;
|
||||
|
||||
@ -0,0 +1,44 @@
|
||||
|
||||
package cn.axzo.nanopart.doc.api.templatedb.reqeust;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
import cn.axzo.nanopart.doc.api.domain.IndexNodeScope;
|
||||
import cn.axzo.nanopart.doc.api.domain.NodeCreate;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
abstract class NodeCreateTemplateDatabase implements NodeCreate {
|
||||
|
||||
/**
|
||||
* 父节点code
|
||||
*/
|
||||
private String parentCode;
|
||||
|
||||
/**
|
||||
* 节点名称(文件夹/文件)不能为空
|
||||
*/
|
||||
@NotBlank(message = "节点名称不能为空")
|
||||
private String name;
|
||||
|
||||
@Override
|
||||
public IndexNodeScope nodeScope() {
|
||||
return IndexNodeScope.TEMPLATE_DATABASE_SCOPE;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String name() {
|
||||
return StringUtils.isBlank(name) ? "" : name;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String parentCode() {
|
||||
return StringUtils.isBlank(parentCode) ? "" : parentCode;
|
||||
}
|
||||
}
|
||||
@ -1,9 +1,8 @@
|
||||
|
||||
package cn.axzo.nanopart.doc.api.templatedb.reqeust;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import cn.axzo.nanopart.doc.api.domain.NodeCreate;
|
||||
import cn.axzo.nanopart.doc.api.enums.CooperationAccessOption;
|
||||
import cn.axzo.nanopart.doc.api.enums.DatabaseScope;
|
||||
import lombok.Getter;
|
||||
@ -14,17 +13,18 @@ import lombok.Setter;
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
public class TemplateDatabaseCreateDatabaseRequest extends TemplateDatabaseCreateDirRequest implements NodeCreate {
|
||||
public class TemplateDatabaseCreateDatabaseRequest extends TemplateDatabaseCreateDirRequest {
|
||||
|
||||
/**
|
||||
* 归属. ENT_DATABASE: 企业数据库, PROJECT_DATABASE: 项目数据库
|
||||
*/
|
||||
@NotBlank(message = "scope不能为空")
|
||||
@NotNull(message = "scope不能为空")
|
||||
private DatabaseScope scope;
|
||||
|
||||
/**
|
||||
* 协作模版. ALL_ORGS_IN_PROJECT: 项目内所有企业可见, ORGS_BY_COOPERATE_TYPES: 指定参建单位可见
|
||||
* 协作模版. NONE:无, ALL_ORGS_IN_PROJECT: 项目内所有企业可见, ORGS_BY_COOPERATE_TYPES: 指定参建单位可见
|
||||
*/
|
||||
private CooperationAccessOption accessOption;
|
||||
@NotNull(message = "accessOption不能为空")
|
||||
private CooperationAccessOption accessOption = CooperationAccessOption.NONE;
|
||||
|
||||
}
|
||||
|
||||
@ -3,7 +3,6 @@ package cn.axzo.nanopart.doc.api.templatedb.reqeust;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
|
||||
import cn.axzo.nanopart.doc.api.enums.CooperationAccessOption;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import lombok.Getter;
|
||||
@ -14,13 +13,7 @@ import lombok.Setter;
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
public class TemplateDatabaseCreateDirRequest {
|
||||
|
||||
/**
|
||||
* 名称
|
||||
*/
|
||||
@NotBlank(message = "name不能为空")
|
||||
private String name;
|
||||
public class TemplateDatabaseCreateDirRequest extends NodeCreateTemplateDatabase {
|
||||
|
||||
/**
|
||||
* 编码
|
||||
|
||||
@ -1,10 +1,10 @@
|
||||
|
||||
package cn.axzo.nanopart.doc.api.templatedb.reqeust;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import cn.axzo.nanopart.doc.api.enums.FileFormat;
|
||||
import cn.axzo.nanopart.doc.api.util.DefaultIcons;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@ -13,18 +13,7 @@ import lombok.Setter;
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
public class TemplateDatabaseCreateFileRequest {
|
||||
|
||||
/**
|
||||
* 父节点code
|
||||
*/
|
||||
private String parentCode;
|
||||
|
||||
/**
|
||||
* 节点名称(文件夹/文件)不能为空
|
||||
*/
|
||||
@NotBlank(message = "节点名称不能为空")
|
||||
private String name;
|
||||
public class TemplateDatabaseCreateFileRequest extends NodeCreateTemplateDatabase {
|
||||
|
||||
/**
|
||||
* 文件格式. EXCEL, WORD, PDF
|
||||
@ -32,4 +21,9 @@ public class TemplateDatabaseCreateFileRequest {
|
||||
@NotNull(message = "文件格式不能为空")
|
||||
private FileFormat format;
|
||||
|
||||
@Override
|
||||
public String icon() {
|
||||
return DefaultIcons.defaultFileIcon(format);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -2,7 +2,6 @@
|
||||
package cn.axzo.nanopart.doc.api.templatedb.reqeust;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
import cn.axzo.nanopart.doc.api.domain.OssFile;
|
||||
@ -14,18 +13,7 @@ import lombok.Setter;
|
||||
*/
|
||||
@Setter
|
||||
@Getter
|
||||
public class TemplateDatabaseUploadFileRequest {
|
||||
|
||||
/**
|
||||
* 父节点code
|
||||
*/
|
||||
private String parentCode;
|
||||
|
||||
/**
|
||||
* 节点名称(文件夹/文件)不能为空
|
||||
*/
|
||||
@NotBlank(message = "节点名称不能为空")
|
||||
private String name;
|
||||
public class TemplateDatabaseUploadFileRequest extends NodeCreateTemplateDatabase{
|
||||
|
||||
/**
|
||||
* 上传的文件信息
|
||||
|
||||
@ -12,8 +12,8 @@ import lombok.NoArgsConstructor;
|
||||
*/
|
||||
@Builder
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
//@AllArgsConstructor
|
||||
//@NoArgsConstructor
|
||||
public class WpsRenameResponse {
|
||||
|
||||
private boolean updateFlag;
|
||||
|
||||
@ -20,6 +20,7 @@ public class DocProps {
|
||||
|
||||
private String emptyWordOssFileKey;
|
||||
private String emptyExcelFileKey;
|
||||
private int maxChildrenSize = 200;
|
||||
private int indexNodeMaxChildrenSize = 200;
|
||||
private int indexNodeMaxDepth = 10;
|
||||
|
||||
}
|
||||
|
||||
@ -16,10 +16,12 @@ import cn.axzo.nanopart.doc.api.enums.IndexNodeState;
|
||||
import cn.axzo.nanopart.doc.api.util.BizAssertions;
|
||||
import cn.axzo.nanopart.doc.entity.IndexNode;
|
||||
import cn.axzo.nanopart.doc.mapper.IndexNodeMapper;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@Slf4j
|
||||
@Repository
|
||||
public class IndexNodeDao extends ServiceImpl<IndexNodeMapper, IndexNode> {
|
||||
|
||||
@ -109,4 +111,11 @@ public class IndexNodeDao extends ServiceImpl<IndexNodeMapper, IndexNode> {
|
||||
.eq(IndexNode::getScopeCode, nodeScope.scopeCode()).eq(IndexNode::getParentCode, "");
|
||||
}
|
||||
|
||||
public void updateFileSize(String code, long size) {
|
||||
lambdaUpdate() //
|
||||
.eq(IndexNode::getCode, code) //
|
||||
.set(IndexNode::getSize, size) //
|
||||
.update();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -3,6 +3,7 @@ package cn.axzo.nanopart.doc.entity;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
import cn.axzo.nanopart.doc.api.enums.CooperationAccessOption;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
|
||||
@ -62,6 +63,11 @@ public class FileDatabase extends BaseEntity<FileDatabase> {
|
||||
*/
|
||||
private Long ouId;
|
||||
|
||||
/**
|
||||
* 协作模式, NONE: 无, ALL_ORGS_IN_PROJECT: 项目内所有企业可见, ORGS_BY_COOPERATE_TYPES: 指定参建单位可见
|
||||
*/
|
||||
private CooperationAccessOption coopAccessOption;
|
||||
|
||||
/**
|
||||
* 状态. ACTIVATING: 开通中, ACTIVATED: 已开通, EXPIRED: 已到期
|
||||
*/
|
||||
|
||||
@ -15,6 +15,7 @@ import cn.axzo.nanopart.doc.api.enums.IndexNodeContext;
|
||||
import cn.axzo.nanopart.doc.api.enums.IndexNodeState;
|
||||
import cn.axzo.nanopart.doc.api.enums.IndexNodeType;
|
||||
import cn.axzo.nanopart.doc.api.util.UUIDUtil;
|
||||
import cn.axzo.nanopart.doc.entity.domain.Path;
|
||||
import cn.axzo.pokonyan.config.mybatisplus.BaseEntity;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
@ -118,6 +119,10 @@ public class IndexNode extends BaseEntity<IndexNode> implements NodeValue, Index
|
||||
return attributes;
|
||||
}
|
||||
|
||||
public Path path() {
|
||||
return Path.wrap(path);
|
||||
}
|
||||
|
||||
public boolean isFile() {
|
||||
return nodeType == IndexNodeType.FILE;
|
||||
}
|
||||
@ -166,4 +171,4 @@ public class IndexNode extends BaseEntity<IndexNode> implements NodeValue, Index
|
||||
public String parentCode() {
|
||||
return parentCode;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,15 +1,15 @@
|
||||
|
||||
package cn.axzo.nanopart.doc.entity;
|
||||
|
||||
import cn.axzo.nanopart.doc.api.enums.DatabaseScope;
|
||||
import cn.axzo.nanopart.doc.api.domain.DatabaseAccessConfig;
|
||||
import cn.axzo.nanopart.doc.api.domain.DatabaseFeeConfig;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
|
||||
import cn.axzo.pudge.core.persistence.BaseEntity;
|
||||
import com.baomidou.mybatisplus.extension.handlers.FastjsonTypeHandler;
|
||||
|
||||
import cn.axzo.nanopart.doc.api.domain.DatabaseAccessConfig;
|
||||
import cn.axzo.nanopart.doc.api.domain.DatabaseFeeConfig;
|
||||
import cn.axzo.nanopart.doc.api.enums.DatabaseScope;
|
||||
import cn.axzo.pudge.core.persistence.BaseEntity;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
|
||||
@ -0,0 +1,44 @@
|
||||
|
||||
package cn.axzo.nanopart.doc.entity.domain;
|
||||
|
||||
import com.google.common.base.Splitter;
|
||||
|
||||
import lombok.AccessLevel;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author yanglin
|
||||
*/
|
||||
@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class Path {
|
||||
|
||||
private static final Splitter SPLITTER = Splitter.on("/").omitEmptyStrings().trimResults();
|
||||
|
||||
private final String path;
|
||||
|
||||
public static Path wrap(String path) {
|
||||
return new Path(path);
|
||||
}
|
||||
|
||||
public static Path empty() {
|
||||
return new Path("/");
|
||||
}
|
||||
|
||||
public Path append(String path) {
|
||||
String p = path;
|
||||
if (!p.endsWith("/"))
|
||||
p = "/";
|
||||
p = this.path + p + "/";
|
||||
return new Path(p);
|
||||
}
|
||||
|
||||
public int depth() {
|
||||
return SPLITTER.splitToList(path).size();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return path;
|
||||
}
|
||||
|
||||
}
|
||||
@ -1,3 +1,4 @@
|
||||
|
||||
package cn.axzo.nanopart.doc.file.filedb;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@ -9,4 +10,4 @@ import org.springframework.stereotype.Component;
|
||||
@Component
|
||||
@RequiredArgsConstructor
|
||||
public class FileDatabaseManager {
|
||||
}
|
||||
}
|
||||
|
||||
@ -14,7 +14,7 @@ import cn.axzo.nanopart.doc.api.filetemplate.request.FileTemplateGetFileInfoRequ
|
||||
import cn.axzo.nanopart.doc.api.filetemplate.request.FileTemplateUpdateFileInfoRequest;
|
||||
import cn.axzo.nanopart.doc.api.filetemplate.request.FileTemplateUploadFileRequest;
|
||||
import cn.axzo.nanopart.doc.api.filetemplate.response.FileTemplateGetFileInfoResponse;
|
||||
import cn.axzo.nanopart.doc.api.index.IndexNodeInfo;
|
||||
import cn.axzo.nanopart.doc.api.domain.IndexNodeInfo;
|
||||
import cn.axzo.nanopart.doc.api.index.request.CopyNodeRequest;
|
||||
import cn.axzo.nanopart.doc.api.index.request.DeleteNodeRequest;
|
||||
import cn.axzo.nanopart.doc.api.index.request.IndexNodePageSearchRequest;
|
||||
|
||||
@ -48,7 +48,7 @@ public class FileTemplateManager {
|
||||
private String createFileTemplate(IndexNode fileNode) {
|
||||
FileTemplate fileTemplate = new FileTemplate();
|
||||
fileTemplate.setCode(fileNode.getCode());
|
||||
fileTemplate.setState(FileTemplateState.DRAFT);
|
||||
fileTemplate.setState(FileTemplateState.UNPUBLISH);
|
||||
fileTemplateDao.save(fileTemplate);
|
||||
return fileNode.getCode();
|
||||
}
|
||||
|
||||
@ -55,20 +55,28 @@ public class IndexManager {
|
||||
/**
|
||||
* 不能在事务中使用
|
||||
*/
|
||||
public OssFile uploadEmptyFile(NodeCreate node, FileFormat format) {
|
||||
public OssFile uploadEmptyFile(NodeCreate create, FileFormat format) {
|
||||
BizAssertions.assertTrue(format.creatable(), "无法创建: {}", format.readableName());
|
||||
BizAssertions.assertFalse(TransactionSynchronizationManager.isActualTransactionActive(), "不能在事务中使用");
|
||||
indexSupport.ensureChildNameNotUsed(node);
|
||||
indexSupport.ensureChildNameNotUsed(create);
|
||||
String emptyOssFileKey = format == FileFormat.WORD //
|
||||
? docProps.getEmptyWordOssFileKey() //
|
||||
: docProps.getEmptyExcelFileKey();
|
||||
return OssFile.create(format, 0, ossClient.copy(emptyOssFileKey, format, node.name()));
|
||||
return OssFile.create(format, 0, ossClient.copy(emptyOssFileKey, format, create.name()));
|
||||
}
|
||||
|
||||
@BizTransactional
|
||||
public IndexNode uploadFile(NodeCreate node, OssFile ossFile) {
|
||||
indexSupport.ensureChildNameNotUsed(node);
|
||||
return createFile(node, ossFile);
|
||||
IndexNode fileNode = createFile(node, ossFile);
|
||||
updateFileSize(fileNode.getCode(), ossFile.getSize());
|
||||
return fileNode;
|
||||
}
|
||||
|
||||
public void updateFileSize(String code, int size) {
|
||||
IndexNode fileNode = indexNodeDao.getNodeOrThrow(code);
|
||||
BizAssertions.assertTrue(fileNode.isFile(), "不是文件节点, 无法更新文件大小");
|
||||
indexNodeDao.updateFileSize(code, size);
|
||||
}
|
||||
|
||||
public IndexNode createFile(NodeCreate node, OssFile ossFile) {
|
||||
|
||||
@ -31,4 +31,4 @@ public class IndexQueryService {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -18,6 +18,7 @@ import cn.axzo.nanopart.doc.config.DocProps;
|
||||
import cn.axzo.nanopart.doc.dao.DocLockDao;
|
||||
import cn.axzo.nanopart.doc.dao.IndexNodeDao;
|
||||
import cn.axzo.nanopart.doc.entity.IndexNode;
|
||||
import cn.axzo.nanopart.doc.entity.domain.Path;
|
||||
import cn.axzo.nanopart.doc.file.index.domain.NameUsedException;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@ -36,10 +37,13 @@ class IndexSupport {
|
||||
String code = UUIDUtil.uuidString();
|
||||
if (nodeType == IndexNodeType.DATABASE)
|
||||
BizAssertions.assertBlank(create.parentCode(), "创建空间时不能指定父节点");
|
||||
BizAssertions.assertFalse(indexNodeDao.countValidChild(create) < docProps.getMaxChildrenSize(), "子节点数量超过限制");
|
||||
BizAssertions.assertTrue(indexNodeDao.countValidChild(create) <= docProps.getIndexNodeMaxChildrenSize(),
|
||||
"子节点数量超过限制{}, 无法再创建新节点", docProps.getIndexNodeMaxChildrenSize());
|
||||
IndexNode parent = null;
|
||||
if (StringUtils.isNotBlank(create.parentCode())) {
|
||||
parent = indexNodeDao.getNodeOrThrow(create.parentCode());
|
||||
BizAssertions.assertTrue(parent.path().depth() < docProps.getIndexNodeMaxDepth(), //
|
||||
"节点深度超过限制{}, 无法再创建新节点", docProps.getIndexNodeMaxDepth());
|
||||
BizAssertions.assertEquals(parent.getContext(), create.nodeScope().context(), //
|
||||
"创建子节点时父子context不匹配: {}", create.parentCode());
|
||||
BizAssertions.assertEquals(parent.getScope(), create.nodeScope(), //
|
||||
@ -65,10 +69,8 @@ class IndexSupport {
|
||||
child.setNodeType(nodeType);
|
||||
child.setSize(0);
|
||||
indexNodeDao.save(child);
|
||||
String path = parent == null //
|
||||
? String.format("/%s/", child.getId()) //
|
||||
: String.format("%s%s/", parent.getPath(), child.getId());
|
||||
indexNodeDao.updatePath(child.getCode(), path);
|
||||
Path basePath = parent == null ? Path.empty() : parent.path();
|
||||
indexNodeDao.updatePath(child.getCode(), basePath.append(String.valueOf(child.getId())).toString());
|
||||
return indexNodeDao.getNodeOrThrow(child.getCode());
|
||||
}
|
||||
|
||||
|
||||
@ -8,7 +8,7 @@ import java.util.List;
|
||||
|
||||
import cn.axzo.basics.common.BeanMapper;
|
||||
import cn.axzo.nanopart.doc.api.enums.IndexNodeType;
|
||||
import cn.axzo.nanopart.doc.api.index.IndexNodeInfo;
|
||||
import cn.axzo.nanopart.doc.api.domain.IndexNodeInfo;
|
||||
import cn.axzo.nanopart.doc.entity.IndexNode;
|
||||
import lombok.AccessLevel;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
@ -12,4 +12,4 @@ public class NameUsedException extends ServiceException {
|
||||
super(msg);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -28,16 +28,17 @@ public class OssFileDeleteHandler implements EventHandler, InitializingBean {
|
||||
public void onEvent(Event event, EventConsumer.Context context) {
|
||||
log.info("receive delete oss file message: {}", event);
|
||||
DeleteOssFileMessage message = event.normalizedData(DeleteOssFileMessage.class);
|
||||
try {
|
||||
ossClient.delete(message.getOssFileKey());
|
||||
} catch (Exception e) {
|
||||
try {
|
||||
ossClient.delete(message.getOssFileKey());
|
||||
}
|
||||
catch (Exception e) {
|
||||
log.error("删除oss file失败", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() {
|
||||
eventConsumer.registerHandler(FileInternalEvent.OSS_FILE_DELETE.getEventCode(), this);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
|
||||
package cn.axzo.nanopart.doc.file.mq.message;
|
||||
|
||||
import java.io.Serializable;
|
||||
@ -15,19 +16,19 @@ import lombok.Setter;
|
||||
@Getter
|
||||
public abstract class MqMessage implements Serializable {
|
||||
|
||||
/**
|
||||
* 消息唯一id
|
||||
*/
|
||||
private String messageId = UUID.randomUUID().toString();
|
||||
/**
|
||||
* 消息唯一id
|
||||
*/
|
||||
private String messageId = UUID.randomUUID().toString();
|
||||
|
||||
/**
|
||||
* 消息发送时间
|
||||
*/
|
||||
private Date messageSendTime = new Date();
|
||||
/**
|
||||
* 消息发送时间
|
||||
*/
|
||||
private Date messageSendTime = new Date();
|
||||
|
||||
/**
|
||||
* 消息发送时间, 字符串格式
|
||||
*/
|
||||
private String messageSendTimeStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(messageSendTime);
|
||||
/**
|
||||
* 消息发送时间, 字符串格式
|
||||
*/
|
||||
private String messageSendTimeStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(messageSendTime);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,11 +12,11 @@ import lombok.Setter;
|
||||
@Getter
|
||||
public class RenameIndexNodeOssFileMessage extends MqMessage {
|
||||
|
||||
private String indexNodeCode;
|
||||
private String indexNodeCode;
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return JSON.toJSONString(this);
|
||||
}
|
||||
@Override
|
||||
public String toString() {
|
||||
return JSON.toJSONString(this);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -3,9 +3,10 @@ package cn.axzo.nanopart.doc.file.templatedb;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import cn.axzo.nanopart.doc.entity.IndexNode;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import cn.axzo.nanopart.doc.api.index.IndexNodeInfo;
|
||||
import cn.axzo.nanopart.doc.api.domain.IndexNodeInfo;
|
||||
import cn.axzo.nanopart.doc.api.index.request.CopyNodeRequest;
|
||||
import cn.axzo.nanopart.doc.api.index.request.DeleteNodeRequest;
|
||||
import cn.axzo.nanopart.doc.api.index.request.IndexNodePageSearchRequest;
|
||||
@ -38,7 +39,8 @@ public class TemplateDatabaseApiController implements TemplateDatabaseApi {
|
||||
|
||||
@Override
|
||||
public CommonResponse<String> createDatabase(TemplateDatabaseCreateDatabaseRequest request) {
|
||||
return null;
|
||||
log.info("create database request:{}", request);
|
||||
return CommonResponse.success(templateDatabaseManager.createDatabase(request));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -48,27 +50,33 @@ public class TemplateDatabaseApiController implements TemplateDatabaseApi {
|
||||
|
||||
@Override
|
||||
public CommonResponse<String> createFile(TemplateDatabaseCreateFileRequest request) {
|
||||
return null;
|
||||
return CommonResponse.success(templateDatabaseManager.createFile(request));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResponse<String> uploadFile(TemplateDatabaseUploadFileRequest request) {
|
||||
return null;
|
||||
return CommonResponse.success(templateDatabaseManager.updateFile(request));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResponse<Void> rename(RenameNodeRequest request) {
|
||||
return null;
|
||||
log.info("rename request:{}", request);
|
||||
indexManager.rename(request.getCode(), request.getNewName());
|
||||
return CommonResponse.success();
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResponse<String> copy(CopyNodeRequest request) {
|
||||
return null;
|
||||
log.info("copy request:{}", request);
|
||||
IndexNode indexNode = indexManager.copy(request.getCode(), request.getDestParentCode());
|
||||
return CommonResponse.success(indexNode.getCode());
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResponse<String> move(MoveNodeRequest request) {
|
||||
return null;
|
||||
log.info("move request:{}", request);
|
||||
IndexNode indexNode = indexManager.move(request.getCode(), request.getDestParentCode());
|
||||
return CommonResponse.success(indexNode.getCode());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -1,9 +1,18 @@
|
||||
|
||||
package cn.axzo.nanopart.doc.file.templatedb;
|
||||
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import cn.axzo.nanopart.doc.api.domain.OssFile;
|
||||
import cn.axzo.nanopart.doc.api.enums.DatabaseScope;
|
||||
import cn.axzo.nanopart.doc.api.templatedb.reqeust.TemplateDatabaseCreateDatabaseRequest;
|
||||
import cn.axzo.nanopart.doc.api.templatedb.reqeust.TemplateDatabaseCreateDirRequest;
|
||||
import cn.axzo.nanopart.doc.api.templatedb.reqeust.TemplateDatabaseCreateFileRequest;
|
||||
import cn.axzo.nanopart.doc.api.templatedb.reqeust.TemplateDatabaseUploadFileRequest;
|
||||
import cn.axzo.nanopart.doc.api.util.BizAssertions;
|
||||
import cn.axzo.nanopart.doc.dao.TemplateDatabaseDao;
|
||||
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.utils.BizTransactional;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@ -15,12 +24,32 @@ import lombok.RequiredArgsConstructor;
|
||||
@RequiredArgsConstructor
|
||||
public class TemplateDatabaseManager {
|
||||
|
||||
private final IndexManager indexManager;
|
||||
private final TemplateDatabaseDao templateDatabaseDao;
|
||||
private final IndexManager indexManager;
|
||||
private final TemplateDatabaseDao templateDatabaseDao;
|
||||
|
||||
@BizTransactional
|
||||
public String createDir(TemplateDatabaseCreateDirRequest request) {
|
||||
return null;
|
||||
}
|
||||
@BizTransactional
|
||||
public String createDatabase(TemplateDatabaseCreateDatabaseRequest request) {
|
||||
if (request.getScope() == DatabaseScope.PROJECT_DATABASE)
|
||||
BizAssertions.assertFalse(request.getAccessOption().isNone(), "项目数据库必须指定协作模式");
|
||||
IndexNode indexNode = indexManager.createDatabase(request);
|
||||
TemplateDatabase db = new TemplateDatabase();
|
||||
db.setCode(indexNode.getCode());
|
||||
db.setScope(request.getScope());
|
||||
templateDatabaseDao.save(db);
|
||||
return indexNode.getCode();
|
||||
}
|
||||
|
||||
}
|
||||
public String createDir(TemplateDatabaseCreateDirRequest request) {
|
||||
return indexManager.createDir(request).getCode();
|
||||
}
|
||||
|
||||
public String createFile(TemplateDatabaseCreateFileRequest request) {
|
||||
OssFile ossFile = indexManager.uploadEmptyFile(request, request.getFormat());
|
||||
return indexManager.createFile(request, ossFile).getCode();
|
||||
}
|
||||
|
||||
public String updateFile(TemplateDatabaseUploadFileRequest request) {
|
||||
return indexManager.uploadFile(request, request.getOssFile()).getCode();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -29,4 +29,4 @@ public class OssClient {
|
||||
// TODO(yl): finish this
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -61,5 +61,4 @@ public class WpsEditController implements WpsEditApi {
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user