REQ-3540: 完善接口声明
This commit is contained in:
parent
dd88e4d889
commit
7ec2d28e92
@ -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 {
|
||||
|
||||
|
||||
|
||||
@ -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: 已到期
|
||||
*/
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
|
||||
package cn.axzo.nanopart.doc.entity;
|
||||
|
||||
import cn.axzo.nanopart.doc.entity.domain.Path;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
@ -118,6 +119,10 @@ public class IndexNode extends BaseEntity<IndexNode> implements NodeValue, Index
|
||||
return attributes;
|
||||
}
|
||||
|
||||
public Path path() {
|
||||
return new Path(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,40 @@
|
||||
|
||||
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 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
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
|
||||
package cn.axzo.nanopart.doc.wps;
|
||||
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
@ -28,56 +29,56 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
@RequiredArgsConstructor
|
||||
public class WpsBaseController implements WpsBaseApi {
|
||||
|
||||
/**
|
||||
* 获取文件信息
|
||||
* <p> 公有云wps回调接口
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<WpsFetchFileResponse> fetchFile(@Validated @RequestBody WpsFetchFileRequest request) {
|
||||
/**
|
||||
* 获取文件信息
|
||||
* <p> 公有云wps回调接口
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<WpsFetchFileResponse> fetchFile(@Validated @RequestBody WpsFetchFileRequest request) {
|
||||
|
||||
return ApiResult.ok();
|
||||
}
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取文件下载地址
|
||||
* 说明:在线协同系统需要下载文件原件以提供协同服务,该接口需要返回指定文件 ID 所对应的下载地址
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<WpsFetchDownloadResponse> fetchDownload(@Validated @RequestBody WpsFetchDownloadRequest request) {
|
||||
return ApiResult.ok();
|
||||
}
|
||||
/**
|
||||
* 获取文件下载地址
|
||||
* 说明:在线协同系统需要下载文件原件以提供协同服务,该接口需要返回指定文件 ID 所对应的下载地址
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<WpsFetchDownloadResponse> fetchDownload(@Validated @RequestBody WpsFetchDownloadRequest request) {
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 文档用户权限
|
||||
* 说明:任何需要用户鉴权的行为都会触发该接口的调用,并且 WebOffice 会根据指定的权限位来限定特定的操作
|
||||
* 如 download 指定该用户是否具有下载文档权限。 此接口用于标识用户具备哪些操作权限,具体的功能支持还需您的服务实现相关回调。
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<WpsPermissionResponse> permission(@Validated @RequestBody WpsPermissionRequest request) {
|
||||
return ApiResult.ok();
|
||||
}
|
||||
/**
|
||||
* 文档用户权限
|
||||
* 说明:任何需要用户鉴权的行为都会触发该接口的调用,并且 WebOffice 会根据指定的权限位来限定特定的操作
|
||||
* 如 download 指定该用户是否具有下载文档权限。 此接口用于标识用户具备哪些操作权限,具体的功能支持还需您的服务实现相关回调。
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<WpsPermissionResponse> permission(@Validated @RequestBody WpsPermissionRequest request) {
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户信息
|
||||
* 该组接口用于获取协同场景下的用户信息,如查看历史改动,在线协同用户头像等。
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<WpsUsersResponse> users(@Validated @RequestBody WpsUsersRequest request) {
|
||||
return ApiResult.ok();
|
||||
}
|
||||
/**
|
||||
* 用户信息
|
||||
* 该组接口用于获取协同场景下的用户信息,如查看历史改动,在线协同用户头像等。
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<WpsUsersResponse> users(@Validated @RequestBody WpsUsersRequest request) {
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 文档重命名
|
||||
* 说明:该接口用于在 WebOffice 侧重命名文档。
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<WpsRenameResponse> rename(@Validated @RequestBody WpsRenameRequest request) {
|
||||
return ApiResult.ok();
|
||||
}
|
||||
/**
|
||||
* 文档重命名
|
||||
* 说明:该接口用于在 WebOffice 侧重命名文档。
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<WpsRenameResponse> rename(@Validated @RequestBody WpsRenameRequest request) {
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -1,3 +1,4 @@
|
||||
|
||||
package cn.axzo.nanopart.doc.wps;
|
||||
|
||||
import cn.axzo.framework.domain.web.result.ApiResult;
|
||||
@ -27,37 +28,39 @@ import org.springframework.web.bind.annotation.RestController;
|
||||
@RequiredArgsConstructor
|
||||
public class WpsEditController implements WpsEditApi {
|
||||
|
||||
/**
|
||||
* 文档编辑
|
||||
* 1 准备上传阶段
|
||||
* 说明:三阶段保存的第一步主要用于 WebOffice 与接入方进行参数协商,目前主要协商摘要算法。
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<WpsEditUploadPrepareResponse> uploadPrepare(@Validated @RequestBody WpsEditUploadPrepareRequest request) {
|
||||
return ApiResult.ok();
|
||||
}
|
||||
/**
|
||||
* 文档编辑
|
||||
* 1 准备上传阶段
|
||||
* 说明:三阶段保存的第一步主要用于 WebOffice 与接入方进行参数协商,目前主要协商摘要算法。
|
||||
*
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<WpsEditUploadPrepareResponse> uploadPrepare(
|
||||
@Validated @RequestBody WpsEditUploadPrepareRequest request) {
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 文档编辑
|
||||
* 2 获取上传地址
|
||||
* 说明:三阶段保存第二步主要用于获取上传地址,WebOffice 将上传保存后的文档到该地址。
|
||||
* 此外,回调中也会带上本次保存的一些额外信息,如文档大小,手动/自动保存等。
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<WpsEditUploadAddressResponse> uploadAddress(@Validated @RequestBody WpsEditUploadAddressRequest request) {
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 文档编辑
|
||||
* 3 上传完成后,回调通知上传结果
|
||||
* 说明:WebOffice 在将新版本文件上传到指定地址后,将会回调通知接入方
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<WpsEditUploadCompleteResponse> uploadComplete(@Validated @RequestBody WpsEditUploadCompleteRequest request) {
|
||||
return ApiResult.ok();
|
||||
}
|
||||
/**
|
||||
* 文档编辑
|
||||
* 2 获取上传地址
|
||||
* 说明:三阶段保存第二步主要用于获取上传地址,WebOffice 将上传保存后的文档到该地址。
|
||||
* 此外,回调中也会带上本次保存的一些额外信息,如文档大小,手动/自动保存等。
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<WpsEditUploadAddressResponse> uploadAddress(
|
||||
@Validated @RequestBody WpsEditUploadAddressRequest request) {
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
/**
|
||||
* 文档编辑
|
||||
* 3 上传完成后,回调通知上传结果
|
||||
* 说明:WebOffice 在将新版本文件上传到指定地址后,将会回调通知接入方
|
||||
*/
|
||||
@Override
|
||||
public ApiResult<WpsEditUploadCompleteResponse> uploadComplete(
|
||||
@Validated @RequestBody WpsEditUploadCompleteRequest request) {
|
||||
return ApiResult.ok();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user