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.domain.model.knowledge.KnowledgeSet;
|
||||||
import com.datamate.datamanagement.infrastructure.config.DataManagementProperties;
|
import com.datamate.datamanagement.infrastructure.config.DataManagementProperties;
|
||||||
import com.datamate.datamanagement.infrastructure.exception.DataManagementErrorCode;
|
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.DatasetFileRepository;
|
||||||
import com.datamate.datamanagement.infrastructure.persistence.repository.DatasetRepository;
|
import com.datamate.datamanagement.infrastructure.persistence.repository.DatasetRepository;
|
||||||
import com.datamate.datamanagement.infrastructure.persistence.repository.KnowledgeItemRepository;
|
import com.datamate.datamanagement.infrastructure.persistence.repository.KnowledgeItemRepository;
|
||||||
@@ -86,6 +87,7 @@ public class KnowledgeItemApplicationService {
|
|||||||
private final DatasetRepository datasetRepository;
|
private final DatasetRepository datasetRepository;
|
||||||
private final DatasetFileRepository datasetFileRepository;
|
private final DatasetFileRepository datasetFileRepository;
|
||||||
private final DataManagementProperties dataManagementProperties;
|
private final DataManagementProperties dataManagementProperties;
|
||||||
|
private final TagMapper tagMapper;
|
||||||
|
|
||||||
public KnowledgeItem createKnowledgeItem(String setId, CreateKnowledgeItemRequest request) {
|
public KnowledgeItem createKnowledgeItem(String setId, CreateKnowledgeItemRequest request) {
|
||||||
KnowledgeSet knowledgeSet = requireKnowledgeSet(setId);
|
KnowledgeSet knowledgeSet = requireKnowledgeSet(setId);
|
||||||
@@ -233,6 +235,7 @@ public class KnowledgeItemApplicationService {
|
|||||||
long datasetFileSize = safeLong(knowledgeItemRepository.sumDatasetFileSize());
|
long datasetFileSize = safeLong(knowledgeItemRepository.sumDatasetFileSize());
|
||||||
long uploadFileSize = calculateUploadFileTotalSize();
|
long uploadFileSize = calculateUploadFileTotalSize();
|
||||||
response.setTotalSize(datasetFileSize + uploadFileSize);
|
response.setTotalSize(datasetFileSize + uploadFileSize);
|
||||||
|
response.setTotalTags(safeLong(tagMapper.countKnowledgeSetTags()));
|
||||||
|
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ public interface TagMapper {
|
|||||||
List<Tag> findByIdIn(@Param("ids") List<String> ids);
|
List<Tag> findByIdIn(@Param("ids") List<String> ids);
|
||||||
List<Tag> findByKeyword(@Param("keyword") String keyword);
|
List<Tag> findByKeyword(@Param("keyword") String keyword);
|
||||||
List<Tag> findAllByOrderByUsageCountDesc();
|
List<Tag> findAllByOrderByUsageCountDesc();
|
||||||
|
Long countKnowledgeSetTags();
|
||||||
|
|
||||||
int insert(Tag tag);
|
int insert(Tag tag);
|
||||||
int update(Tag tag);
|
int update(Tag tag);
|
||||||
|
|||||||
@@ -12,4 +12,5 @@ public class KnowledgeManagementStatisticsResponse {
|
|||||||
private Long totalKnowledgeSets = 0L;
|
private Long totalKnowledgeSets = 0L;
|
||||||
private Long totalFiles = 0L;
|
private Long totalFiles = 0L;
|
||||||
private Long totalSize = 0L;
|
private Long totalSize = 0L;
|
||||||
|
private Long totalTags = 0L;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,6 +53,19 @@
|
|||||||
ORDER BY usage_count DESC, name ASC
|
ORDER BY usage_count DESC, name ASC
|
||||||
</select>
|
</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 id="insert" parameterType="com.datamate.datamanagement.domain.model.dataset.Tag">
|
||||||
INSERT INTO t_dm_tags (id, name, description, category, color, usage_count)
|
INSERT INTO t_dm_tags (id, name, description, category, color, usage_count)
|
||||||
VALUES (#{id}, #{name}, #{description}, #{category}, #{color}, #{usageCount})
|
VALUES (#{id}, #{name}, #{description}, #{category}, #{color}, #{usageCount})
|
||||||
|
|||||||
@@ -40,6 +40,10 @@ const DEFAULT_STATISTICS: StatisticsItem[] = [
|
|||||||
title: "文件总数",
|
title: "文件总数",
|
||||||
value: 0,
|
value: 0,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: "标签总数",
|
||||||
|
value: 0,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: "总大小",
|
title: "总大小",
|
||||||
value: "0 B",
|
value: "0 B",
|
||||||
@@ -113,6 +117,10 @@ export default function KnowledgeManagementPage() {
|
|||||||
title: "文件总数",
|
title: "文件总数",
|
||||||
value: stats?.totalFiles ?? 0,
|
value: stats?.totalFiles ?? 0,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: "标签总数",
|
||||||
|
value: stats?.totalTags ?? 0,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
title: "总大小",
|
title: "总大小",
|
||||||
value: formatBytes(stats?.totalSize ?? 0),
|
value: formatBytes(stats?.totalSize ?? 0),
|
||||||
@@ -276,7 +284,7 @@ export default function KnowledgeManagementPage() {
|
|||||||
|
|
||||||
<div className="grid grid-cols-1 gap-4">
|
<div className="grid grid-cols-1 gap-4">
|
||||||
<Card>
|
<Card>
|
||||||
<div className="grid grid-cols-3">
|
<div className="grid grid-cols-4">
|
||||||
{statisticsData.map((item) => (
|
{statisticsData.map((item) => (
|
||||||
<Statistic
|
<Statistic
|
||||||
title={item.title}
|
title={item.title}
|
||||||
|
|||||||
@@ -82,6 +82,7 @@ export interface KnowledgeManagementStatistics {
|
|||||||
totalKnowledgeSets: number;
|
totalKnowledgeSets: number;
|
||||||
totalFiles: number;
|
totalFiles: number;
|
||||||
totalSize: number;
|
totalSize: number;
|
||||||
|
totalTags: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface KnowledgeItemSearchResult {
|
export interface KnowledgeItemSearchResult {
|
||||||
|
|||||||
Reference in New Issue
Block a user