Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ public PagedResponse<DatasetResponse> getDatasets(DatasetPagingQuery query) {
/**
* 处理标签名称,创建或获取标签
*/
private String processTagNames(List<String> tagNames) {
private List<Tag> processTagNames(List<String> tagNames) {
Set<Tag> tags = new HashSet<>();
for (String tagName : tagNames) {
Tag tag = tagMapper.findByName(tagName);
Expand All @@ -209,16 +209,7 @@ private String processTagNames(List<String> tagNames) {
tagMapper.updateUsageCount(tag.getId(), tag.getUsageCount());
tags.add(tag);
}
ObjectMapper mapper = new ObjectMapper();
try {
mapper.registerModule(new JavaTimeModule());
// 可选:配置日期时间格式
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
return mapper.writeValueAsString(tags);
} catch (JsonProcessingException e) {
log.warn("Parse tags to json error.");
return null;
}
return tags.stream().toList();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.datamate.common.domain.model.base.BaseEntity;
import com.datamate.common.infrastructure.config.PgJsonTypeHandler;
import com.datamate.datamanagement.common.enums.DatasetStatusType;
import com.datamate.datamanagement.common.enums.DatasetType;
import lombok.Getter;
Expand Down Expand Up @@ -66,7 +67,8 @@ public class Dataset extends BaseEntity<String> {
/**
* 标签列表, JSON格式
*/
private String tags;
@TableField(typeHandler = PgJsonTypeHandler.class)
private List<Tag> tags;
/**
* 额外元数据,JSON格式
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,12 @@ public IPage<Dataset> findByCriteria(IPage<Dataset> page, DatasetPagingQuery que
*/
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)
w.apply("EXISTS ( " +
"SELECT 1 FROM jsonb_array_elements( " +
"CASE WHEN jsonb_typeof(tags::jsonb) = 'array' THEN tags::jsonb ELSE '[]'::jsonb END " +
") AS tag " +
"WHERE tag->>'name' = {0} " +
")", tagName)
);
}
wrapper.orderByDesc(Dataset::getCreatedAt);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,8 @@
import com.datamate.datamanagement.domain.model.dataset.Dataset;
import com.datamate.datamanagement.domain.model.dataset.DatasetFile;
import com.datamate.datamanagement.domain.model.dataset.FileTag;
import com.datamate.datamanagement.domain.model.dataset.Tag;
import com.datamate.datamanagement.interfaces.dto.*;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
Expand All @@ -34,7 +27,6 @@ public interface DatasetConverter {
@Mapping(source = "sizeBytes", target = "totalSize")
@Mapping(source = "path", target = "targetLocation")
@Mapping(source = "files", target = "distribution", qualifiedByName = "getDistribution")
@Mapping(source = "tags", target = "tags", qualifiedByName = "getDatasetTags")
DatasetResponse convertToResponse(Dataset dataset);

/**
Expand Down Expand Up @@ -91,28 +83,4 @@ default Map<String, Map<String, Long>> getDistribution(List<DatasetFile> dataset
}
return distribution;
}

/**
* 获取数据集标签
*
* @param datasetTag 数据集标签
* @return 标签
*/
@Named("getDatasetTags")
default List<TagResponse> getDatasetTags(String datasetTag) {
List<TagResponse> tagResponses = new ArrayList<>();
if (StringUtils.isBlank(datasetTag)) {
return tagResponses;
}
ObjectMapper mapper = new ObjectMapper();
try {
mapper.registerModule(new JavaTimeModule());
// 可选:配置日期时间格式
mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
return mapper.readValue(datasetTag, new TypeReference<List<Tag>>() {
}).stream().map(TagConverter.INSTANCE::convertToResponse).toList();
} catch (Exception e) {
return Collections.emptyList();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.apache.ibatis.type.MappedTypes;
import org.postgresql.util.PGobject;

import java.lang.reflect.Field;
import java.sql.PreparedStatement;
import java.sql.SQLException;

Expand All @@ -18,6 +19,10 @@ public PgJsonTypeHandler(Class<?> type) {
super(type);
}

public PgJsonTypeHandler(Class<?> type, Field field) {
super(type, field);
}

@Override
public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException {
// 1. 先借助父类转成 JSON 字符串
Expand Down
2 changes: 1 addition & 1 deletion scripts/db/data-management-init.sql
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ CREATE TABLE IF NOT EXISTS t_dm_datasets (
file_count BIGINT DEFAULT 0,
record_count BIGINT DEFAULT 0,
retention_days INTEGER DEFAULT 0,
tags TEXT,
tags JSONB,
metadata JSONB,
status VARCHAR(50) DEFAULT 'DRAFT',
is_public BOOLEAN DEFAULT FALSE,
Expand Down
Loading