feat(knowledge): 添加知识库标签统计功能

- 在 KnowledgeItemApplicationService 中注入 TagMapper 并调用统计方法
- 新增 countKnowledgeSetTags 方法用于计算知识库中的标签总数
- 在 KnowledgeManagementStatisticsResponse 中添加 totalTags 字段
- 在前端 KnowledgeManagementPage 中显示标签总数统计信息
- 更新统计卡片布局从 3 列改为 4 列以适应新增统计项
- 在知识管理模型中添加 totalTags 类型定义
This commit is contained in:
2026-02-01 18:46:31 +08:00
parent 7043a26ab3
commit d135a7f336
6 changed files with 28 additions and 1 deletions

View File

@@ -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;
}

View File

@@ -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);

View File

@@ -12,4 +12,5 @@ public class KnowledgeManagementStatisticsResponse {
private Long totalKnowledgeSets = 0L;
private Long totalFiles = 0L;
private Long totalSize = 0L;
private Long totalTags = 0L;
}

View File

@@ -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})