You've already forked DataMate
refactor(data-management): 移除知识条目的冗余字段和验证逻辑
- 移除 KnowledgeItem 实体中的 title、status、domain、businessLine、owner、sensitivity 字段 - 移除 KnowledgeItem 实体中的有效期限相关字段 validFrom 和 validTo - 移除 KnowledgeItem 实体中的标签集合 tags 和扩展元数据 metadata - 删除 KnowledgeItemApplicationService 中的相关验证和默认值设置逻辑 - 移除 TagMapper 和 Tag 相关的数据处理代码 - 简化创建和更新知识条目的业务流程 - 更新数据库查询条件以适应新的实体结构 - 从各种 DTO 中移除已删除字段的定义和验证规则 - 修改分页查询逻辑以匹配新的字段结构
This commit is contained in:
@@ -12,12 +12,10 @@ import com.datamate.datamanagement.common.enums.KnowledgeSourceType;
|
||||
import com.datamate.datamanagement.common.enums.KnowledgeStatusType;
|
||||
import com.datamate.datamanagement.domain.model.dataset.Dataset;
|
||||
import com.datamate.datamanagement.domain.model.dataset.DatasetFile;
|
||||
import com.datamate.datamanagement.domain.model.dataset.Tag;
|
||||
import com.datamate.datamanagement.domain.model.knowledge.KnowledgeItem;
|
||||
import com.datamate.datamanagement.domain.model.knowledge.KnowledgeSet;
|
||||
import com.datamate.datamanagement.infrastructure.config.DataManagementProperties;
|
||||
import com.datamate.datamanagement.infrastructure.exception.DataManagementErrorCode;
|
||||
import com.datamate.datamanagement.infrastructure.persistence.mapper.TagMapper;
|
||||
import com.datamate.datamanagement.infrastructure.persistence.repository.DatasetFileRepository;
|
||||
import com.datamate.datamanagement.infrastructure.persistence.repository.DatasetRepository;
|
||||
import com.datamate.datamanagement.infrastructure.persistence.repository.KnowledgeItemRepository;
|
||||
@@ -50,12 +48,10 @@ import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
@@ -84,7 +80,6 @@ public class KnowledgeItemApplicationService {
|
||||
private final KnowledgeSetRepository knowledgeSetRepository;
|
||||
private final DatasetRepository datasetRepository;
|
||||
private final DatasetFileRepository datasetFileRepository;
|
||||
private final TagMapper tagMapper;
|
||||
private final DataManagementProperties dataManagementProperties;
|
||||
|
||||
public KnowledgeItem createKnowledgeItem(String setId, CreateKnowledgeItemRequest request) {
|
||||
@@ -102,16 +97,6 @@ public class KnowledgeItemApplicationService {
|
||||
}
|
||||
knowledgeItem.setSourceDatasetId(request.getSourceDatasetId());
|
||||
knowledgeItem.setSourceFileId(request.getSourceFileId());
|
||||
if (knowledgeItem.getStatus() == null) {
|
||||
knowledgeItem.setStatus(KnowledgeStatusType.DRAFT);
|
||||
}
|
||||
|
||||
applyDefaultsFromSet(knowledgeItem, knowledgeSet, request.getTags(), request.getDomain(),
|
||||
request.getBusinessLine(), request.getOwner(), request.getSensitivity(),
|
||||
request.getValidFrom(), request.getValidTo(), request.getMetadata());
|
||||
|
||||
validateEffectivePeriod(knowledgeItem.getValidFrom(), knowledgeItem.getValidTo());
|
||||
validatePublishable(knowledgeItem);
|
||||
|
||||
knowledgeItemRepository.save(knowledgeItem);
|
||||
return knowledgeItem;
|
||||
@@ -130,8 +115,6 @@ public class KnowledgeItemApplicationService {
|
||||
BusinessAssert.isTrue(setDir.startsWith(uploadRoot), CommonErrorCode.PARAM_ERROR);
|
||||
createDirectories(setDir);
|
||||
|
||||
boolean singleFile = files.size() == 1;
|
||||
String overrideTitle = StringUtils.trimToNull(request.getTitle());
|
||||
List<KnowledgeItem> items = new ArrayList<>();
|
||||
|
||||
for (MultipartFile file : files) {
|
||||
@@ -155,25 +138,10 @@ public class KnowledgeItemApplicationService {
|
||||
KnowledgeItem knowledgeItem = new KnowledgeItem();
|
||||
knowledgeItem.setId(UUID.randomUUID().toString());
|
||||
knowledgeItem.setSetId(setId);
|
||||
String title = singleFile && StringUtils.isNotBlank(overrideTitle)
|
||||
? overrideTitle
|
||||
: stripExtension(safeOriginalName);
|
||||
if (StringUtils.isBlank(title)) {
|
||||
title = "未命名文件";
|
||||
}
|
||||
knowledgeItem.setTitle(trimToLength(title, MAX_TITLE_LENGTH));
|
||||
knowledgeItem.setContent(buildRelativeFilePath(setId, storedName));
|
||||
knowledgeItem.setContentType(KnowledgeContentType.FILE);
|
||||
knowledgeItem.setSourceType(KnowledgeSourceType.FILE_UPLOAD);
|
||||
knowledgeItem.setSourceFileId(trimToLength(safeOriginalName, MAX_TITLE_LENGTH));
|
||||
knowledgeItem.setStatus(request.getStatus() == null ? KnowledgeStatusType.DRAFT : request.getStatus());
|
||||
|
||||
applyDefaultsFromSet(knowledgeItem, knowledgeSet, request.getTags(), request.getDomain(),
|
||||
request.getBusinessLine(), request.getOwner(), request.getSensitivity(),
|
||||
request.getValidFrom(), request.getValidTo(), request.getMetadata());
|
||||
|
||||
validateEffectivePeriod(knowledgeItem.getValidFrom(), knowledgeItem.getValidTo());
|
||||
validatePublishable(knowledgeItem);
|
||||
|
||||
items.add(knowledgeItem);
|
||||
}
|
||||
@@ -189,15 +157,9 @@ public class KnowledgeItemApplicationService {
|
||||
KnowledgeItem knowledgeItem = knowledgeItemRepository.getById(itemId);
|
||||
BusinessAssert.notNull(knowledgeItem, DataManagementErrorCode.KNOWLEDGE_ITEM_NOT_FOUND);
|
||||
BusinessAssert.isTrue(Objects.equals(knowledgeItem.getSetId(), setId), CommonErrorCode.PARAM_ERROR);
|
||||
BusinessAssert.isTrue(!isReadOnlyStatus(knowledgeItem.getStatus()),
|
||||
DataManagementErrorCode.KNOWLEDGE_ITEM_STATUS_ERROR);
|
||||
BusinessAssert.isTrue(!isReadOnlyStatus(knowledgeSet.getStatus()),
|
||||
DataManagementErrorCode.KNOWLEDGE_SET_STATUS_ERROR);
|
||||
|
||||
if (request.getTitle() != null) {
|
||||
BusinessAssert.isTrue(StringUtils.isNotBlank(request.getTitle()), CommonErrorCode.PARAM_ERROR);
|
||||
knowledgeItem.setTitle(request.getTitle());
|
||||
}
|
||||
if (request.getContent() != null) {
|
||||
BusinessAssert.isTrue(StringUtils.isNotBlank(request.getContent()), CommonErrorCode.PARAM_ERROR);
|
||||
knowledgeItem.setContent(request.getContent());
|
||||
@@ -205,34 +167,6 @@ public class KnowledgeItemApplicationService {
|
||||
if (request.getContentType() != null) {
|
||||
knowledgeItem.setContentType(request.getContentType());
|
||||
}
|
||||
if (request.getStatus() != null) {
|
||||
knowledgeItem.setStatus(request.getStatus());
|
||||
}
|
||||
if (request.getTags() != null) {
|
||||
knowledgeItem.setTags(processTagNames(request.getTags()));
|
||||
}
|
||||
if (request.getDomain() != null) {
|
||||
knowledgeItem.setDomain(request.getDomain());
|
||||
}
|
||||
if (request.getBusinessLine() != null) {
|
||||
knowledgeItem.setBusinessLine(request.getBusinessLine());
|
||||
}
|
||||
if (request.getOwner() != null) {
|
||||
knowledgeItem.setOwner(request.getOwner());
|
||||
}
|
||||
if (request.getValidFrom() != null || request.getValidTo() != null) {
|
||||
knowledgeItem.setValidFrom(request.getValidFrom());
|
||||
knowledgeItem.setValidTo(request.getValidTo());
|
||||
}
|
||||
if (request.getSensitivity() != null) {
|
||||
knowledgeItem.setSensitivity(request.getSensitivity());
|
||||
}
|
||||
if (request.getMetadata() != null) {
|
||||
knowledgeItem.setMetadata(request.getMetadata());
|
||||
}
|
||||
|
||||
validateEffectivePeriod(knowledgeItem.getValidFrom(), knowledgeItem.getValidTo());
|
||||
validatePublishable(knowledgeItem);
|
||||
|
||||
knowledgeItemRepository.updateById(knowledgeItem);
|
||||
return knowledgeItem;
|
||||
@@ -281,20 +215,11 @@ public class KnowledgeItemApplicationService {
|
||||
KnowledgeItem knowledgeItem = new KnowledgeItem();
|
||||
knowledgeItem.setId(UUID.randomUUID().toString());
|
||||
knowledgeItem.setSetId(setId);
|
||||
knowledgeItem.setTitle(stripExtension(datasetFile.getFileName()));
|
||||
knowledgeItem.setContent(content);
|
||||
knowledgeItem.setContentType(contentType);
|
||||
knowledgeItem.setSourceType(KnowledgeSourceType.DATASET_FILE);
|
||||
knowledgeItem.setSourceDatasetId(dataset.getId());
|
||||
knowledgeItem.setSourceFileId(datasetFile.getId());
|
||||
knowledgeItem.setStatus(request.getStatus() == null ? KnowledgeStatusType.DRAFT : request.getStatus());
|
||||
|
||||
applyDefaultsFromSet(knowledgeItem, knowledgeSet, request.getTags(), request.getDomain(),
|
||||
request.getBusinessLine(), request.getOwner(), request.getSensitivity(),
|
||||
request.getValidFrom(), request.getValidTo(), request.getMetadata());
|
||||
|
||||
validateEffectivePeriod(knowledgeItem.getValidFrom(), knowledgeItem.getValidTo());
|
||||
validatePublishable(knowledgeItem);
|
||||
|
||||
items.add(knowledgeItem);
|
||||
}
|
||||
@@ -415,8 +340,6 @@ public class KnowledgeItemApplicationService {
|
||||
KnowledgeItem knowledgeItem = knowledgeItemRepository.getById(itemId);
|
||||
BusinessAssert.notNull(knowledgeItem, DataManagementErrorCode.KNOWLEDGE_ITEM_NOT_FOUND);
|
||||
BusinessAssert.isTrue(Objects.equals(knowledgeItem.getSetId(), setId), CommonErrorCode.PARAM_ERROR);
|
||||
BusinessAssert.isTrue(!isReadOnlyStatus(knowledgeItem.getStatus()),
|
||||
DataManagementErrorCode.KNOWLEDGE_ITEM_STATUS_ERROR);
|
||||
BusinessAssert.isTrue(!isReadOnlyStatus(knowledgeSet.getStatus()),
|
||||
DataManagementErrorCode.KNOWLEDGE_SET_STATUS_ERROR);
|
||||
|
||||
@@ -451,17 +374,10 @@ public class KnowledgeItemApplicationService {
|
||||
|
||||
saveMultipartFile(file, targetPath);
|
||||
|
||||
String title = stripExtension(safeOriginalName);
|
||||
if (StringUtils.isBlank(title)) {
|
||||
title = "未命名文件";
|
||||
}
|
||||
title = trimToLength(title, MAX_TITLE_LENGTH);
|
||||
|
||||
String sourceFileId = trimToLength(safeOriginalName, MAX_TITLE_LENGTH);
|
||||
String newRelativePath = buildRelativeFilePath(setId, storedName);
|
||||
|
||||
try {
|
||||
knowledgeItem.setTitle(title);
|
||||
knowledgeItem.setContent(newRelativePath);
|
||||
knowledgeItem.setContentType(KnowledgeContentType.FILE);
|
||||
knowledgeItem.setSourceType(KnowledgeSourceType.FILE_UPLOAD);
|
||||
@@ -594,8 +510,10 @@ public class KnowledgeItemApplicationService {
|
||||
}
|
||||
|
||||
private String buildItemEntryName(KnowledgeItem item, Map<String, Integer> nameCounter) {
|
||||
String rawTitle = StringUtils.isNotBlank(item.getTitle()) ? item.getTitle() : "item-" + item.getId();
|
||||
String baseName = sanitizeFileName(rawTitle);
|
||||
String rawName = StringUtils.isNotBlank(item.getSourceFileId())
|
||||
? stripExtension(item.getSourceFileId())
|
||||
: "item-" + item.getId();
|
||||
String baseName = sanitizeFileName(rawName);
|
||||
if (StringUtils.isBlank(baseName)) {
|
||||
baseName = "item-" + item.getId();
|
||||
}
|
||||
@@ -698,77 +616,7 @@ public class KnowledgeItemApplicationService {
|
||||
return fileName.substring(0, dotIndex);
|
||||
}
|
||||
|
||||
private void applyDefaultsFromSet(KnowledgeItem knowledgeItem,
|
||||
KnowledgeSet knowledgeSet,
|
||||
List<String> tags,
|
||||
String domain,
|
||||
String businessLine,
|
||||
String owner,
|
||||
String sensitivity,
|
||||
LocalDate validFrom,
|
||||
LocalDate validTo,
|
||||
String metadata) {
|
||||
if (tags != null) {
|
||||
knowledgeItem.setTags(processTagNames(tags));
|
||||
} else if (knowledgeSet.getTags() != null) {
|
||||
knowledgeItem.setTags(new HashSet<>(knowledgeSet.getTags()));
|
||||
} else {
|
||||
knowledgeItem.setTags(new HashSet<>());
|
||||
}
|
||||
knowledgeItem.setDomain(StringUtils.isNotBlank(domain) ? domain : knowledgeSet.getDomain());
|
||||
knowledgeItem.setBusinessLine(StringUtils.isNotBlank(businessLine) ? businessLine : knowledgeSet.getBusinessLine());
|
||||
knowledgeItem.setOwner(StringUtils.isNotBlank(owner) ? owner : knowledgeSet.getOwner());
|
||||
knowledgeItem.setSensitivity(StringUtils.isNotBlank(sensitivity) ? sensitivity : knowledgeSet.getSensitivity());
|
||||
knowledgeItem.setValidFrom(validFrom != null ? validFrom : knowledgeSet.getValidFrom());
|
||||
knowledgeItem.setValidTo(validTo != null ? validTo : knowledgeSet.getValidTo());
|
||||
knowledgeItem.setMetadata(metadata != null ? metadata : knowledgeSet.getMetadata());
|
||||
}
|
||||
|
||||
private boolean isReadOnlyStatus(KnowledgeStatusType status) {
|
||||
return status == KnowledgeStatusType.ARCHIVED || status == KnowledgeStatusType.DEPRECATED;
|
||||
}
|
||||
|
||||
private void validatePublishable(KnowledgeItem knowledgeItem) {
|
||||
if (knowledgeItem.getStatus() != KnowledgeStatusType.PUBLISHED) {
|
||||
return;
|
||||
}
|
||||
BusinessAssert.isTrue(StringUtils.isNotBlank(knowledgeItem.getDomain()), CommonErrorCode.PARAM_ERROR);
|
||||
BusinessAssert.isTrue(StringUtils.isNotBlank(knowledgeItem.getBusinessLine()), CommonErrorCode.PARAM_ERROR);
|
||||
BusinessAssert.isTrue(StringUtils.isNotBlank(knowledgeItem.getOwner()), CommonErrorCode.PARAM_ERROR);
|
||||
BusinessAssert.isTrue(StringUtils.isNotBlank(knowledgeItem.getSensitivity()), CommonErrorCode.PARAM_ERROR);
|
||||
BusinessAssert.notNull(knowledgeItem.getSourceType(), CommonErrorCode.PARAM_ERROR);
|
||||
BusinessAssert.notNull(knowledgeItem.getValidFrom(), CommonErrorCode.PARAM_ERROR);
|
||||
BusinessAssert.notNull(knowledgeItem.getValidTo(), CommonErrorCode.PARAM_ERROR);
|
||||
}
|
||||
|
||||
private void validateEffectivePeriod(LocalDate validFrom, LocalDate validTo) {
|
||||
if (validFrom == null || validTo == null) {
|
||||
return;
|
||||
}
|
||||
BusinessAssert.isTrue(!validFrom.isAfter(validTo), CommonErrorCode.PARAM_ERROR);
|
||||
}
|
||||
|
||||
private Set<Tag> processTagNames(List<String> tagNames) {
|
||||
if (CollectionUtils.isEmpty(tagNames)) {
|
||||
return new HashSet<>();
|
||||
}
|
||||
Set<Tag> tags = new HashSet<>();
|
||||
for (String tagName : tagNames) {
|
||||
if (StringUtils.isBlank(tagName)) {
|
||||
continue;
|
||||
}
|
||||
Tag tag = tagMapper.findByName(tagName);
|
||||
if (tag == null) {
|
||||
Tag newTag = new Tag(tagName, null, null, "#007bff");
|
||||
newTag.setUsageCount(0L);
|
||||
newTag.setId(UUID.randomUUID().toString());
|
||||
tagMapper.insert(newTag);
|
||||
tag = newTag;
|
||||
}
|
||||
tag.setUsageCount(tag.getUsageCount() == null ? 1L : tag.getUsageCount() + 1);
|
||||
tagMapper.updateUsageCount(tag.getId(), tag.getUsageCount());
|
||||
tags.add(tag);
|
||||
}
|
||||
return tags;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,20 +1,12 @@
|
||||
package com.datamate.datamanagement.domain.model.knowledge;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.TableField;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
|
||||
import com.datamate.common.domain.model.base.BaseEntity;
|
||||
import com.datamate.datamanagement.common.enums.KnowledgeContentType;
|
||||
import com.datamate.datamanagement.common.enums.KnowledgeSourceType;
|
||||
import com.datamate.datamanagement.common.enums.KnowledgeStatusType;
|
||||
import com.datamate.datamanagement.domain.model.dataset.Tag;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Collection;
|
||||
import java.util.HashSet;
|
||||
|
||||
/**
|
||||
* 知识条目实体(与数据库表 t_dm_knowledge_items 对齐)
|
||||
*/
|
||||
@@ -26,10 +18,6 @@ public class KnowledgeItem extends BaseEntity<String> {
|
||||
* 所属知识集ID
|
||||
*/
|
||||
private String setId;
|
||||
/**
|
||||
* 标题
|
||||
*/
|
||||
private String title;
|
||||
/**
|
||||
* 内容
|
||||
*/
|
||||
@@ -38,38 +26,10 @@ public class KnowledgeItem extends BaseEntity<String> {
|
||||
* 内容类型
|
||||
*/
|
||||
private KnowledgeContentType contentType;
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
private KnowledgeStatusType status;
|
||||
/**
|
||||
* 领域
|
||||
*/
|
||||
private String domain;
|
||||
/**
|
||||
* 业务线
|
||||
*/
|
||||
private String businessLine;
|
||||
/**
|
||||
* 负责人
|
||||
*/
|
||||
private String owner;
|
||||
/**
|
||||
* 有效期开始
|
||||
*/
|
||||
private LocalDate validFrom;
|
||||
/**
|
||||
* 有效期结束
|
||||
*/
|
||||
private LocalDate validTo;
|
||||
/**
|
||||
* 来源类型
|
||||
*/
|
||||
private KnowledgeSourceType sourceType;
|
||||
/**
|
||||
* 敏感级别
|
||||
*/
|
||||
private String sensitivity;
|
||||
/**
|
||||
* 来源数据集ID
|
||||
*/
|
||||
@@ -78,13 +38,4 @@ public class KnowledgeItem extends BaseEntity<String> {
|
||||
* 来源文件ID
|
||||
*/
|
||||
private String sourceFileId;
|
||||
/**
|
||||
* 标签列表
|
||||
*/
|
||||
@TableField(typeHandler = JacksonTypeHandler.class)
|
||||
private Collection<Tag> tags = new HashSet<>();
|
||||
/**
|
||||
* 扩展元数据
|
||||
*/
|
||||
private String metadata;
|
||||
}
|
||||
|
||||
@@ -25,33 +25,17 @@ public class KnowledgeItemRepositoryImpl extends CrudRepository<KnowledgeItemMap
|
||||
public IPage<KnowledgeItem> findByCriteria(IPage<KnowledgeItem> page, KnowledgeItemPagingQuery query) {
|
||||
LambdaQueryWrapper<KnowledgeItem> wrapper = new LambdaQueryWrapper<KnowledgeItem>()
|
||||
.eq(StringUtils.isNotBlank(query.getSetId()), KnowledgeItem::getSetId, query.getSetId())
|
||||
.eq(query.getStatus() != null, KnowledgeItem::getStatus, query.getStatus())
|
||||
.eq(query.getContentType() != null, KnowledgeItem::getContentType, query.getContentType())
|
||||
.eq(StringUtils.isNotBlank(query.getDomain()), KnowledgeItem::getDomain, query.getDomain())
|
||||
.eq(StringUtils.isNotBlank(query.getBusinessLine()), KnowledgeItem::getBusinessLine, query.getBusinessLine())
|
||||
.eq(StringUtils.isNotBlank(query.getOwner()), KnowledgeItem::getOwner, query.getOwner())
|
||||
.eq(StringUtils.isNotBlank(query.getSensitivity()), KnowledgeItem::getSensitivity, query.getSensitivity())
|
||||
.eq(query.getSourceType() != null, KnowledgeItem::getSourceType, query.getSourceType())
|
||||
.eq(StringUtils.isNotBlank(query.getSourceDatasetId()), KnowledgeItem::getSourceDatasetId, query.getSourceDatasetId())
|
||||
.eq(StringUtils.isNotBlank(query.getSourceFileId()), KnowledgeItem::getSourceFileId, query.getSourceFileId())
|
||||
.ge(query.getValidFrom() != null, KnowledgeItem::getValidFrom, query.getValidFrom())
|
||||
.le(query.getValidTo() != null, KnowledgeItem::getValidTo, query.getValidTo());
|
||||
.eq(StringUtils.isNotBlank(query.getSourceFileId()), KnowledgeItem::getSourceFileId, query.getSourceFileId());
|
||||
|
||||
if (StringUtils.isNotBlank(query.getKeyword())) {
|
||||
wrapper.and(w -> w.like(KnowledgeItem::getTitle, query.getKeyword())
|
||||
wrapper.and(w -> w.like(KnowledgeItem::getSourceFileId, query.getKeyword())
|
||||
.or()
|
||||
.like(KnowledgeItem::getContent, query.getKeyword()));
|
||||
}
|
||||
|
||||
for (String tagName : query.getTags()) {
|
||||
wrapper.and(w ->
|
||||
w.apply("tags IS NOT NULL " +
|
||||
"AND JSON_VALID(tags) = 1 " +
|
||||
"AND JSON_LENGTH(tags) > 0 " +
|
||||
"AND JSON_SEARCH(tags, 'one', {0}, NULL, '$[*].name') IS NOT NULL", tagName)
|
||||
);
|
||||
}
|
||||
|
||||
wrapper.orderByDesc(KnowledgeItem::getCreatedAt);
|
||||
return knowledgeItemMapper.selectPage(page, wrapper);
|
||||
}
|
||||
|
||||
@@ -22,7 +22,6 @@ public interface KnowledgeConverter {
|
||||
@Mapping(target = "tags", ignore = true)
|
||||
KnowledgeSet convertToKnowledgeSet(CreateKnowledgeSetRequest request);
|
||||
|
||||
@Mapping(target = "tags", ignore = true)
|
||||
KnowledgeItem convertToKnowledgeItem(CreateKnowledgeItemRequest request);
|
||||
|
||||
KnowledgeSetResponse convertToResponse(KnowledgeSet knowledgeSet);
|
||||
|
||||
@@ -1,18 +1,13 @@
|
||||
package com.datamate.datamanagement.interfaces.dto;
|
||||
|
||||
import com.datamate.datamanagement.common.enums.KnowledgeContentType;
|
||||
import com.datamate.datamanagement.common.enums.KnowledgeStatusType;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 创建知识条目请求DTO
|
||||
*/
|
||||
@@ -21,12 +16,6 @@ import java.util.List;
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class CreateKnowledgeItemRequest {
|
||||
/**
|
||||
* 标题
|
||||
*/
|
||||
@Size(min = 1, max = 200)
|
||||
@NotBlank(message = "标题不能为空")
|
||||
private String title;
|
||||
/**
|
||||
* 内容
|
||||
*/
|
||||
@@ -37,46 +26,6 @@ public class CreateKnowledgeItemRequest {
|
||||
*/
|
||||
@NotNull(message = "内容类型不能为空")
|
||||
private KnowledgeContentType contentType;
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
private KnowledgeStatusType status;
|
||||
/**
|
||||
* 标签列表
|
||||
*/
|
||||
private List<String> tags;
|
||||
/**
|
||||
* 领域
|
||||
*/
|
||||
@Size(max = 100)
|
||||
private String domain;
|
||||
/**
|
||||
* 业务线
|
||||
*/
|
||||
@Size(max = 100)
|
||||
private String businessLine;
|
||||
/**
|
||||
* 负责人
|
||||
*/
|
||||
@Size(max = 100)
|
||||
private String owner;
|
||||
/**
|
||||
* 有效期开始
|
||||
*/
|
||||
private LocalDate validFrom;
|
||||
/**
|
||||
* 有效期结束
|
||||
*/
|
||||
private LocalDate validTo;
|
||||
/**
|
||||
* 敏感级别
|
||||
*/
|
||||
@Size(max = 50)
|
||||
private String sensitivity;
|
||||
/**
|
||||
* 扩展元数据
|
||||
*/
|
||||
private String metadata;
|
||||
/**
|
||||
* 来源数据集ID(用于标注同步等场景)
|
||||
*/
|
||||
|
||||
@@ -1,13 +1,9 @@
|
||||
package com.datamate.datamanagement.interfaces.dto;
|
||||
|
||||
import com.datamate.datamanagement.common.enums.KnowledgeStatusType;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -26,44 +22,4 @@ public class ImportKnowledgeItemsRequest {
|
||||
*/
|
||||
@NotEmpty(message = "文件列表不能为空")
|
||||
private List<String> fileIds;
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
private KnowledgeStatusType status;
|
||||
/**
|
||||
* 标签列表
|
||||
*/
|
||||
private List<String> tags;
|
||||
/**
|
||||
* 领域
|
||||
*/
|
||||
@Size(max = 100)
|
||||
private String domain;
|
||||
/**
|
||||
* 业务线
|
||||
*/
|
||||
@Size(max = 100)
|
||||
private String businessLine;
|
||||
/**
|
||||
* 负责人
|
||||
*/
|
||||
@Size(max = 100)
|
||||
private String owner;
|
||||
/**
|
||||
* 有效期开始
|
||||
*/
|
||||
private LocalDate validFrom;
|
||||
/**
|
||||
* 有效期结束
|
||||
*/
|
||||
private LocalDate validTo;
|
||||
/**
|
||||
* 敏感级别
|
||||
*/
|
||||
@Size(max = 50)
|
||||
private String sensitivity;
|
||||
/**
|
||||
* 扩展元数据
|
||||
*/
|
||||
private String metadata;
|
||||
}
|
||||
|
||||
@@ -3,15 +3,11 @@ package com.datamate.datamanagement.interfaces.dto;
|
||||
import com.datamate.common.interfaces.PagingQuery;
|
||||
import com.datamate.datamanagement.common.enums.KnowledgeContentType;
|
||||
import com.datamate.datamanagement.common.enums.KnowledgeSourceType;
|
||||
import com.datamate.datamanagement.common.enums.KnowledgeStatusType;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 知识条目分页查询请求
|
||||
@@ -26,37 +22,13 @@ public class KnowledgeItemPagingQuery extends PagingQuery {
|
||||
*/
|
||||
private String setId;
|
||||
/**
|
||||
* 标签名过滤
|
||||
*/
|
||||
private List<String> tags = new ArrayList<>();
|
||||
/**
|
||||
* 关键词搜索(标题或内容)
|
||||
* 关键词搜索(文件名或内容)
|
||||
*/
|
||||
private String keyword;
|
||||
/**
|
||||
* 状态过滤
|
||||
*/
|
||||
private KnowledgeStatusType status;
|
||||
/**
|
||||
* 内容类型过滤
|
||||
*/
|
||||
private KnowledgeContentType contentType;
|
||||
/**
|
||||
* 领域
|
||||
*/
|
||||
private String domain;
|
||||
/**
|
||||
* 业务线
|
||||
*/
|
||||
private String businessLine;
|
||||
/**
|
||||
* 负责人
|
||||
*/
|
||||
private String owner;
|
||||
/**
|
||||
* 敏感级别
|
||||
*/
|
||||
private String sensitivity;
|
||||
/**
|
||||
* 来源类型
|
||||
*/
|
||||
@@ -69,12 +41,4 @@ public class KnowledgeItemPagingQuery extends PagingQuery {
|
||||
* 来源文件ID
|
||||
*/
|
||||
private String sourceFileId;
|
||||
/**
|
||||
* 有效期开始
|
||||
*/
|
||||
private LocalDate validFrom;
|
||||
/**
|
||||
* 有效期结束
|
||||
*/
|
||||
private LocalDate validTo;
|
||||
}
|
||||
|
||||
@@ -2,13 +2,10 @@ package com.datamate.datamanagement.interfaces.dto;
|
||||
|
||||
import com.datamate.datamanagement.common.enums.KnowledgeContentType;
|
||||
import com.datamate.datamanagement.common.enums.KnowledgeSourceType;
|
||||
import com.datamate.datamanagement.common.enums.KnowledgeStatusType;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 知识条目响应DTO
|
||||
@@ -18,21 +15,11 @@ import java.util.List;
|
||||
public class KnowledgeItemResponse {
|
||||
private String id;
|
||||
private String setId;
|
||||
private String title;
|
||||
private String content;
|
||||
private KnowledgeContentType contentType;
|
||||
private KnowledgeStatusType status;
|
||||
private List<TagResponse> tags;
|
||||
private String domain;
|
||||
private String businessLine;
|
||||
private String owner;
|
||||
private LocalDate validFrom;
|
||||
private LocalDate validTo;
|
||||
private KnowledgeSourceType sourceType;
|
||||
private String sensitivity;
|
||||
private String sourceDatasetId;
|
||||
private String sourceFileId;
|
||||
private String metadata;
|
||||
private LocalDateTime createdAt;
|
||||
private LocalDateTime updatedAt;
|
||||
private String createdBy;
|
||||
|
||||
@@ -1,25 +1,15 @@
|
||||
package com.datamate.datamanagement.interfaces.dto;
|
||||
|
||||
import com.datamate.datamanagement.common.enums.KnowledgeContentType;
|
||||
import com.datamate.datamanagement.common.enums.KnowledgeStatusType;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 更新知识条目请求DTO
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class UpdateKnowledgeItemRequest {
|
||||
/**
|
||||
* 标题
|
||||
*/
|
||||
@Size(min = 1, max = 200)
|
||||
private String title;
|
||||
/**
|
||||
* 内容
|
||||
*/
|
||||
@@ -28,44 +18,4 @@ public class UpdateKnowledgeItemRequest {
|
||||
* 内容类型
|
||||
*/
|
||||
private KnowledgeContentType contentType;
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
private KnowledgeStatusType status;
|
||||
/**
|
||||
* 标签列表
|
||||
*/
|
||||
private List<String> tags;
|
||||
/**
|
||||
* 领域
|
||||
*/
|
||||
@Size(max = 100)
|
||||
private String domain;
|
||||
/**
|
||||
* 业务线
|
||||
*/
|
||||
@Size(max = 100)
|
||||
private String businessLine;
|
||||
/**
|
||||
* 负责人
|
||||
*/
|
||||
@Size(max = 100)
|
||||
private String owner;
|
||||
/**
|
||||
* 有效期开始
|
||||
*/
|
||||
private LocalDate validFrom;
|
||||
/**
|
||||
* 有效期结束
|
||||
*/
|
||||
private LocalDate validTo;
|
||||
/**
|
||||
* 敏感级别
|
||||
*/
|
||||
@Size(max = 50)
|
||||
private String sensitivity;
|
||||
/**
|
||||
* 扩展元数据
|
||||
*/
|
||||
private String metadata;
|
||||
}
|
||||
|
||||
@@ -1,14 +1,9 @@
|
||||
package com.datamate.datamanagement.interfaces.dto;
|
||||
|
||||
import com.datamate.datamanagement.common.enums.KnowledgeStatusType;
|
||||
import jakarta.validation.constraints.NotEmpty;
|
||||
import jakarta.validation.constraints.Size;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -22,51 +17,4 @@ public class UploadKnowledgeItemsRequest {
|
||||
*/
|
||||
@NotEmpty(message = "文件列表不能为空")
|
||||
private List<MultipartFile> files;
|
||||
/**
|
||||
* 标题(单文件时可指定)
|
||||
*/
|
||||
@Size(min = 1, max = 200)
|
||||
private String title;
|
||||
/**
|
||||
* 状态
|
||||
*/
|
||||
private KnowledgeStatusType status;
|
||||
/**
|
||||
* 标签列表
|
||||
*/
|
||||
private List<String> tags;
|
||||
/**
|
||||
* 领域
|
||||
*/
|
||||
@Size(max = 100)
|
||||
private String domain;
|
||||
/**
|
||||
* 业务线
|
||||
*/
|
||||
@Size(max = 100)
|
||||
private String businessLine;
|
||||
/**
|
||||
* 负责人
|
||||
*/
|
||||
@Size(max = 100)
|
||||
private String owner;
|
||||
/**
|
||||
* 有效期开始
|
||||
*/
|
||||
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
|
||||
private LocalDate validFrom;
|
||||
/**
|
||||
* 有效期结束
|
||||
*/
|
||||
@DateTimeFormat(iso = DateTimeFormat.ISO.DATE)
|
||||
private LocalDate validTo;
|
||||
/**
|
||||
* 敏感级别
|
||||
*/
|
||||
@Size(max = 50)
|
||||
private String sensitivity;
|
||||
/**
|
||||
* 扩展元数据
|
||||
*/
|
||||
private String metadata;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user