You've already forked DataMate
feat(knowledge): 添加知识库标签统计功能
- 在 KnowledgeItemApplicationService 中注入 TagMapper 并调用统计方法 - 新增 countKnowledgeSetTags 方法用于计算知识库中的标签总数 - 在 KnowledgeManagementStatisticsResponse 中添加 totalTags 字段 - 在前端 KnowledgeManagementPage 中显示标签总数统计信息 - 更新统计卡片布局从 3 列改为 4 列以适应新增统计项 - 在知识管理模型中添加 totalTags 类型定义
This commit is contained in:
@@ -16,6 +16,7 @@ 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;
|
||||
@@ -86,6 +87,7 @@ public class KnowledgeItemApplicationService {
|
||||
private final DatasetRepository datasetRepository;
|
||||
private final DatasetFileRepository datasetFileRepository;
|
||||
private final DataManagementProperties dataManagementProperties;
|
||||
private final TagMapper tagMapper;
|
||||
|
||||
public KnowledgeItem createKnowledgeItem(String setId, CreateKnowledgeItemRequest request) {
|
||||
KnowledgeSet knowledgeSet = requireKnowledgeSet(setId);
|
||||
@@ -233,6 +235,7 @@ public class KnowledgeItemApplicationService {
|
||||
long datasetFileSize = safeLong(knowledgeItemRepository.sumDatasetFileSize());
|
||||
long uploadFileSize = calculateUploadFileTotalSize();
|
||||
response.setTotalSize(datasetFileSize + uploadFileSize);
|
||||
response.setTotalTags(safeLong(tagMapper.countKnowledgeSetTags()));
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ public interface TagMapper {
|
||||
List<Tag> findByIdIn(@Param("ids") List<String> ids);
|
||||
List<Tag> findByKeyword(@Param("keyword") String keyword);
|
||||
List<Tag> findAllByOrderByUsageCountDesc();
|
||||
Long countKnowledgeSetTags();
|
||||
|
||||
int insert(Tag tag);
|
||||
int update(Tag tag);
|
||||
|
||||
@@ -12,4 +12,5 @@ public class KnowledgeManagementStatisticsResponse {
|
||||
private Long totalKnowledgeSets = 0L;
|
||||
private Long totalFiles = 0L;
|
||||
private Long totalSize = 0L;
|
||||
private Long totalTags = 0L;
|
||||
}
|
||||
|
||||
@@ -53,6 +53,19 @@
|
||||
ORDER BY usage_count DESC, name ASC
|
||||
</select>
|
||||
|
||||
<select id="countKnowledgeSetTags" resultType="long">
|
||||
SELECT COUNT(DISTINCT t.id)
|
||||
FROM t_dm_tags t
|
||||
WHERE EXISTS (
|
||||
SELECT 1
|
||||
FROM t_dm_knowledge_sets ks
|
||||
WHERE ks.tags IS NOT NULL
|
||||
AND JSON_VALID(ks.tags) = 1
|
||||
AND JSON_LENGTH(ks.tags) > 0
|
||||
AND JSON_SEARCH(ks.tags, 'one', t.name, NULL, '$[*].name') IS NOT NULL
|
||||
)
|
||||
</select>
|
||||
|
||||
<insert id="insert" parameterType="com.datamate.datamanagement.domain.model.dataset.Tag">
|
||||
INSERT INTO t_dm_tags (id, name, description, category, color, usage_count)
|
||||
VALUES (#{id}, #{name}, #{description}, #{category}, #{color}, #{usageCount})
|
||||
|
||||
@@ -40,6 +40,10 @@ const DEFAULT_STATISTICS: StatisticsItem[] = [
|
||||
title: "文件总数",
|
||||
value: 0,
|
||||
},
|
||||
{
|
||||
title: "标签总数",
|
||||
value: 0,
|
||||
},
|
||||
{
|
||||
title: "总大小",
|
||||
value: "0 B",
|
||||
@@ -113,6 +117,10 @@ export default function KnowledgeManagementPage() {
|
||||
title: "文件总数",
|
||||
value: stats?.totalFiles ?? 0,
|
||||
},
|
||||
{
|
||||
title: "标签总数",
|
||||
value: stats?.totalTags ?? 0,
|
||||
},
|
||||
{
|
||||
title: "总大小",
|
||||
value: formatBytes(stats?.totalSize ?? 0),
|
||||
@@ -276,7 +284,7 @@ export default function KnowledgeManagementPage() {
|
||||
|
||||
<div className="grid grid-cols-1 gap-4">
|
||||
<Card>
|
||||
<div className="grid grid-cols-3">
|
||||
<div className="grid grid-cols-4">
|
||||
{statisticsData.map((item) => (
|
||||
<Statistic
|
||||
title={item.title}
|
||||
|
||||
@@ -82,6 +82,7 @@ export interface KnowledgeManagementStatistics {
|
||||
totalKnowledgeSets: number;
|
||||
totalFiles: number;
|
||||
totalSize: number;
|
||||
totalTags: number;
|
||||
}
|
||||
|
||||
export interface KnowledgeItemSearchResult {
|
||||
|
||||
Reference in New Issue
Block a user