REQ-3540: 添加接口

This commit is contained in:
yanglin 2025-03-19 09:14:11 +08:00
parent e8e70bb439
commit a73216932b
10 changed files with 145 additions and 18 deletions

View File

@ -3,6 +3,7 @@ package cn.axzo.nanopart.doc.api.filedb;
import javax.validation.Valid;
import cn.axzo.nanopart.doc.api.filedb.request.FileDatabaseAbortRequest;
import cn.axzo.nanopart.doc.api.filedb.request.FileDatabaseRenewRequest;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
@ -35,6 +36,12 @@ public interface FileDatabaseApi {
@PostMapping("/api/fileDatabase/active")
CommonResponse<Void> active(@RequestBody @Valid FileDatabaseActiveRequest request);
/**
* 驳回
*/
@PostMapping("/api/fileDatabase/reject")
CommonResponse<Void> reject(@RequestBody @Valid FileDatabaseAbortRequest request);
/**
* 扩容
*/

View File

@ -0,0 +1,25 @@
package cn.axzo.nanopart.doc.api.filedb.request;
import com.alibaba.fastjson.JSON;
import lombok.Getter;
import lombok.Setter;
import javax.validation.constraints.NotBlank;
/**
* @author yanglin
*/
@Setter
@Getter
public class FileDatabaseAbortRequest {
/**
* 资料库code
*/
@NotBlank(message = "code不能为空")
private String code;
@Override
public String toString() {
return JSON.toJSONString(this);
}
}

View File

@ -1,8 +1,11 @@
package cn.axzo.nanopart.doc.api.filedb.response;
import cn.axzo.nanopart.doc.api.enums.FileDatabaseState;
import cn.axzo.nanopart.doc.api.enums.DatabaseType;
import com.alibaba.fastjson.JSON;
import cn.axzo.nanopart.doc.api.enums.FileDatabaseState;
import cn.axzo.nanopart.doc.api.templatedb.domain.TemplateDatabaseInfo;
import lombok.Getter;
import lombok.Setter;
@ -18,6 +21,11 @@ public class FileDatabaseInfoResponse {
*/
private String code;
/**
* 资料库类型. CREATED_BY_SYSTEM: 平台资料库, CREATED_BY_USER_FOR_ENT: 专属资料库
*/
private DatabaseType databaseType;
/**
* 租户id
*/
@ -28,6 +36,16 @@ public class FileDatabaseInfoResponse {
*/
private String workspaceName;
/**
* 租房类型. 1: 单位, 2: 项目
*/
private Integer workspaceType;
/**
* 租户注册时间, unix时间戳
*/
private Long workspaceRegisterTimeMs;
/**
* 状态. ACTIVATING: 开通中, ACTIVATED: 已开通, EXPIRED: 已到期
*/
@ -53,6 +71,11 @@ public class FileDatabaseInfoResponse {
*/
private Integer usedCapacity;
/**
* 资料库信息
*/
private TemplateDatabaseInfo databaseInfo;
@Override
public String toString() {
return JSON.toJSONString(this);

View File

@ -5,7 +5,7 @@ import java.util.List;
import javax.validation.Valid;
import cn.axzo.nanopart.doc.api.templatedb.domain.DatabaseInfo;
import cn.axzo.nanopart.doc.api.templatedb.domain.TemplateDatabaseInfo;
import cn.axzo.nanopart.doc.api.templatedb.reqeust.TemplateDatabaseSearchRequest;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
@ -103,7 +103,7 @@ public interface TemplateDatabaseApi {
* 搜索资料库
*/
@PostMapping("/api/templateDatabase/searchDatabase")
CommonResponse<Page<DatabaseInfo>> searchDatabase(@RequestBody @Valid TemplateDatabaseSearchRequest request);
CommonResponse<Page<TemplateDatabaseInfo>> searchDatabase(@RequestBody @Valid TemplateDatabaseSearchRequest request);
/**
* 项企资料库: 获取资料库或文件夹信息

View File

@ -12,7 +12,7 @@ import lombok.Setter;
*/
@Setter
@Getter
public class DatabaseInfo {
public class TemplateDatabaseInfo {
/**
* 资料库名称

View File

@ -0,0 +1,24 @@
package cn.axzo.nanopart.doc.api.templatedb.domain;
import java.util.List;
import lombok.RequiredArgsConstructor;
/**
* @author yanglin
*/
@RequiredArgsConstructor
public class TemplateDatabaseInfos {
private final List<TemplateDatabaseInfo> templateDatabaseInfos;
public static TemplateDatabaseInfos wrap(List<TemplateDatabaseInfo> databaseInfos) {
return new TemplateDatabaseInfos(databaseInfos);
}
public TemplateDatabaseInfo findOrNull(String code) {
return templateDatabaseInfos.stream().filter(d -> d.getCode().equals(code)).findFirst().orElse(null);
}
}

View File

@ -1,6 +1,7 @@
package cn.axzo.nanopart.doc.file.filedb;
import cn.axzo.nanopart.doc.api.filedb.request.FileDatabaseAbortRequest;
import org.springframework.web.bind.annotation.RestController;
import cn.axzo.nanopart.doc.api.filedb.FileDatabaseApi;
@ -40,6 +41,13 @@ public class FileDatabaseApiController implements FileDatabaseApi {
return CommonResponse.success();
}
@Override
public CommonResponse<Void> reject(FileDatabaseAbortRequest request) {
log.info("reject workspace: {}", request);
fileDatabaseService.reject(request);
return CommonResponse.success();
}
@Override
public CommonResponse<Void> expandCapacity(FileDatabaseExpandCapacityRequest request) {
log.info("expand capacity: {}", request);

View File

@ -27,6 +27,7 @@ import cn.axzo.nanopart.doc.api.enums.DatabaseScope;
import cn.axzo.nanopart.doc.api.enums.DatabaseType;
import cn.axzo.nanopart.doc.api.enums.FileDatabaseState;
import cn.axzo.nanopart.doc.api.enums.IndexNodeType;
import cn.axzo.nanopart.doc.api.filedb.request.FileDatabaseAbortRequest;
import cn.axzo.nanopart.doc.api.filedb.request.FileDatabaseActiveRequest;
import cn.axzo.nanopart.doc.api.filedb.request.FileDatabaseAddWorkspaceRequest;
import cn.axzo.nanopart.doc.api.filedb.request.FileDatabaseExpandCapacityRequest;
@ -34,6 +35,7 @@ import cn.axzo.nanopart.doc.api.filedb.request.FileDatabaseRemoveRequest;
import cn.axzo.nanopart.doc.api.filedb.request.FileDatabaseRenewRequest;
import cn.axzo.nanopart.doc.api.filedb.request.FileDatabaseSearchRequest;
import cn.axzo.nanopart.doc.api.filedb.response.FileDatabaseInfoResponse;
import cn.axzo.nanopart.doc.api.templatedb.domain.TemplateDatabaseInfos;
import cn.axzo.nanopart.doc.api.util.BizAssertions;
import cn.axzo.nanopart.doc.api.util.UUIDUtil;
import cn.axzo.nanopart.doc.dao.DocLogDao;
@ -46,7 +48,7 @@ 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.SetScopeCopyFileVisitor;
import cn.axzo.nanopart.doc.file.index.domain.IndexNodes;
import cn.axzo.nanopart.doc.file.templatedb.TemplateDatabaseManager;
import cn.axzo.nanopart.doc.file.templatedb.TemplateDatabaseQueryService;
import cn.axzo.nanopart.doc.utils.AsyncUtils;
import cn.axzo.nanopart.doc.utils.BizTransactional;
import cn.axzo.nanopart.doc.utils.RpcExternalUtil;
@ -61,7 +63,7 @@ import lombok.RequiredArgsConstructor;
public class FileDatabaseService {
private final FileDatabaseDao fileDatabaseDao;
private final TemplateDatabaseManager templateDatabaseManager;
private final TemplateDatabaseQueryService templateDatabaseQueryService;
private final WorkspaceApi workspaceApi;
private final IndexQueryService indexQueryService;
private final IndexManager indexManager;
@ -73,7 +75,7 @@ public class FileDatabaseService {
public void addWorkspace(FileDatabaseAddWorkspaceRequest request) {
docLogDao.logRequest("addWorkspace", request.getWorkspaceId(), request);
String scopeUniqueCode = String.valueOf(request.getWorkspaceId());
TemplateDatabase templateDatabase = templateDatabaseManager.getOrThrow(request.getTemplateDatabaseCode());
TemplateDatabase templateDatabase = templateDatabaseQueryService.getOrThrow(request.getTemplateDatabaseCode());
FileDatabase savedDb = fileDatabaseDao.findForUpdateOrNull(templateDatabase.getScope(), scopeUniqueCode);
if (savedDb != null)
throw fail("无法重复创建, 请刷新页面查询已创建的记录");
@ -83,7 +85,7 @@ public class FileDatabaseService {
db.setScope(templateDatabase.getScope());
db.setScopeUniqueCode(scopeUniqueCode);
db.setWorkspaceId(request.getWorkspaceId());
db.setState(FileDatabaseState.ACTIVATING);
db.setState(FileDatabaseState.ACTIVATED);
db.setExpireDate(new Date(request.getExpiredDateMs()));
db.setAllowedCapacity(request.getAllowedCapacity());
db.setUsedCapacity(0);
@ -113,6 +115,10 @@ public class FileDatabaseService {
asyncUtils.getOrTimeout(future, "激活等待超时, 激活任务在后台运行, 请稍后刷新查看");
}
void reject(FileDatabaseAbortRequest request) {
fileDatabaseDao.deleteByCode(request.getCode());
}
@BizTransactional
public void fileSizeChanged(String indexNodeCode) {
IndexNode indexNode = indexManager.findOrNull(indexNodeCode);
@ -198,6 +204,8 @@ public class FileDatabaseService {
.page(request.toPage());
// @formatter:on
IndexNodes indexNodes = IndexNodes.wrap(indexQueryService.get(page.getRecords()));
TemplateDatabaseInfos templateDatabaseInfos = TemplateDatabaseInfos.wrap(
templateDatabaseQueryService.toTemplateDatabaseInfo(templateDatabaseQueryService.get(page.getRecords())));
Map<Long, SimpleWorkspaceRes> id2Workspace = new HashMap<>();
List<Long> resultWorkspaceIds = page.getRecords().stream() //
.map(FileDatabase::getWorkspaceId) //
@ -217,6 +225,11 @@ public class FileDatabaseService {
resp.setCode(db.getCode());
resp.setWorkspaceId(db.getWorkspaceId());
resp.setWorkspaceName(workspace == null ? "" : workspace.getName());
resp.setWorkspaceType(workspace == null ? null : workspace.getType());
resp.setWorkspaceRegisterTimeMs(
workspace != null && workspace.getCreateAt() != null ? workspace.getCreateAt().getTime()
: null);
resp.setDatabaseInfo(templateDatabaseInfos.findOrNull(db.getTemplateDatabaseCode()));
resp.setState(db.getState());
resp.setFileDatabaseName(dbNode == null ? "" : dbNode.getName());
resp.setExpireDateMs(db.getExpireDate() == null ? null : db.getExpireDate().getTime());

View File

@ -4,8 +4,7 @@ package cn.axzo.nanopart.doc.file.templatedb;
import java.util.List;
import java.util.concurrent.Future;
import cn.axzo.karma.client.model.response.LabourProjectGroupListV2Res;
import cn.axzo.nanopart.doc.api.templatedb.domain.DatabaseInfo;
import cn.axzo.nanopart.doc.api.templatedb.domain.TemplateDatabaseInfo;
import cn.axzo.nanopart.doc.api.templatedb.reqeust.TemplateDatabaseSearchRequest;
import org.springframework.web.bind.annotation.RestController;
@ -120,7 +119,7 @@ public class TemplateDatabaseApiController implements TemplateDatabaseApi {
}
@Override
public CommonResponse<Page<DatabaseInfo>> searchDatabase(TemplateDatabaseSearchRequest request) {
public CommonResponse<Page<TemplateDatabaseInfo>> searchDatabase(TemplateDatabaseSearchRequest request) {
log.info("search database request:{}", request);
return CommonResponse.success(templateDatabaseQueryService.searchDatabase(request));
}

View File

@ -3,8 +3,11 @@ package cn.axzo.nanopart.doc.file.templatedb;
import static java.util.stream.Collectors.toList;
import java.util.Collections;
import java.util.List;
import cn.axzo.nanopart.doc.api.util.BizAssertions;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
@ -12,13 +15,14 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import cn.axzo.nanopart.doc.api.domain.IndexNodeParentScope;
import cn.axzo.nanopart.doc.api.enums.TemplateDatabaseState;
import cn.axzo.nanopart.doc.api.templatedb.domain.DatabaseInfo;
import cn.axzo.nanopart.doc.api.templatedb.domain.TemplateDatabaseInfo;
import cn.axzo.nanopart.doc.api.templatedb.reqeust.TemplateDatabaseGetDatabaseOrDirInfoRequest;
import cn.axzo.nanopart.doc.api.templatedb.reqeust.TemplateDatabaseSearchRequest;
import cn.axzo.nanopart.doc.api.templatedb.response.TemplateDatabaseGetDatabaseOrDirInfoResponse;
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.entity.domain.IndexNodeCodeProvider;
import cn.axzo.nanopart.doc.file.index.IndexManager;
import cn.axzo.nanopart.doc.file.index.IndexQueryService;
import cn.axzo.nanopart.doc.file.index.domain.IndexNodes;
@ -37,6 +41,13 @@ public class TemplateDatabaseQueryService {
private final IndexManager indexManager;;
private final TemplateDatabaseDao templateDatabaseDao;
private final IndexQueryService indexQueryService;
private final TemplateDatabaseManager templateDatabaseManager;
public TemplateDatabase getOrThrow(String code) {
TemplateDatabase db = templateDatabaseManager.findOrNull(code);
BizAssertions.assertNotNull(db, "找不到对应的资料库模版");
return db;
}
public TemplateDatabaseGetDatabaseOrDirInfoResponse getDatabaseOrDirInfo(
TemplateDatabaseGetDatabaseOrDirInfoRequest request) {
@ -62,7 +73,7 @@ public class TemplateDatabaseQueryService {
}
@SuppressWarnings("unchecked")
public Page<DatabaseInfo> searchDatabase(TemplateDatabaseSearchRequest request) {
public Page<TemplateDatabaseInfo> searchDatabase(TemplateDatabaseSearchRequest request) {
List<String> codes = null;
if (StringUtils.isNotBlank(request.getName())) {
codes = indexQueryService.getNameLike( //
@ -76,17 +87,34 @@ public class TemplateDatabaseQueryService {
.eq(TemplateDatabase::getState, TemplateDatabaseState.VALID) //
.in(codes != null, TemplateDatabase::getCode, codes) //
.page(request.toPage());
IndexNodes indexNodes = IndexNodes.wrap(indexQueryService.get(page.getRecords()));
List<DatabaseInfo> infoList = page.getRecords().stream().map(db -> {
IndexNode indexNode = indexNodes.findOrNull(db.getCode());
DatabaseInfo info = new DatabaseInfo();
return Page.toPage(request.getPage(), page.getSize(), page.getTotal(), toTemplateDatabaseInfo(page.getRecords()));
}
public List<TemplateDatabaseInfo> toTemplateDatabaseInfo(List<TemplateDatabase> templateDatabases) {
if (CollectionUtils.isEmpty(templateDatabases))
return Collections.emptyList();
IndexNodes indexNodes = IndexNodes.wrap(indexQueryService.get(templateDatabases));
return templateDatabases.stream().map(db -> {
IndexNode indexNode = indexNodes.findOrNull(db.indexNodeCode());
TemplateDatabaseInfo info = new TemplateDatabaseInfo();
info.setName(indexNode == null ? "" : indexNode.getName());
info.setCode(db.getCode());
info.setDatabaseType(db.getScope().getDatabaseType());
info.setFeeConfig(db.getFeeConfig());
return info;
}).collect(toList());
return Page.toPage(request.getPage(), page.getSize(), page.getTotal(), infoList);
}
public List<TemplateDatabase> get(List<? extends IndexNodeCodeProvider> nodes) {
if (CollectionUtils.isEmpty(nodes))
return Collections.emptyList();
List<String> codes = nodes.stream() //
.map(IndexNodeCodeProvider::indexNodeCode) //
.filter(StringUtils::isNotBlank) //
.collect(toList());
return templateDatabaseDao.lambdaQuery() //
.in(TemplateDatabase::getCode, codes) //
.list();
}
}