diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/Term.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/Term.java new file mode 100644 index 000000000..630e87377 --- /dev/null +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/Term.java @@ -0,0 +1,15 @@ +package com.tencent.supersonic.headless.api.pojo; + +import lombok.Data; +import java.util.List; + +@Data +public class Term { + + private String name; + + private String description; + + private List similarTerms; + +} diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/TermSetReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/TermSetReq.java new file mode 100644 index 000000000..444012a7a --- /dev/null +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/TermSetReq.java @@ -0,0 +1,19 @@ +package com.tencent.supersonic.headless.api.pojo.request; + +import com.google.common.collect.Lists; +import com.tencent.supersonic.common.pojo.RecordInfo; +import com.tencent.supersonic.headless.api.pojo.Term; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +public class TermSetReq extends RecordInfo { + + @NotNull(message = "主题域ID不可为空") + private Long domainId; + + private List terms = Lists.newArrayList(); + +} diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/MapInfoResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/MapInfoResp.java index 9d24a21d7..833502106 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/MapInfoResp.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/MapInfoResp.java @@ -1,6 +1,7 @@ package com.tencent.supersonic.headless.api.pojo.response; import com.tencent.supersonic.headless.api.pojo.SchemaElementMatch; +import com.tencent.supersonic.headless.api.pojo.Term; import lombok.Data; import java.util.List; @@ -15,4 +16,6 @@ public class MapInfoResp { private Map> topFields; + private Map> terms; + } diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/TermSetResp.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/TermSetResp.java new file mode 100644 index 000000000..d823bb3f7 --- /dev/null +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/response/TermSetResp.java @@ -0,0 +1,24 @@ +package com.tencent.supersonic.headless.api.pojo.response; + +import com.google.common.collect.Lists; +import com.tencent.supersonic.common.pojo.RecordInfo; +import com.tencent.supersonic.headless.api.pojo.Term; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class TermSetResp extends RecordInfo { + + private Long domainId; + + private List terms = Lists.newArrayList(); + + public TermSetResp(Long domainId) { + this.domainId = domainId; + } +} diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/dataobject/TermSetDO.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/dataobject/TermSetDO.java new file mode 100644 index 000000000..334583ce5 --- /dev/null +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/dataobject/TermSetDO.java @@ -0,0 +1,28 @@ +package com.tencent.supersonic.headless.server.persistence.dataobject; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import java.util.Date; + +@Data +@TableName("s2_term_set") +public class TermSetDO { + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + private Long domainId; + + private String terms; + + private Date createdAt; + + private String createdBy; + + private Date updatedAt; + + private String updatedBy; + +} diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/mapper/TermSetMapper.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/mapper/TermSetMapper.java new file mode 100644 index 000000000..44ebbb8a4 --- /dev/null +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/mapper/TermSetMapper.java @@ -0,0 +1,11 @@ +package com.tencent.supersonic.headless.server.persistence.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.tencent.supersonic.headless.server.persistence.dataobject.TermSetDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface TermSetMapper extends BaseMapper { + + +} \ No newline at end of file diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/DataSetController.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/DataSetController.java index 9dd77dfe2..ffc004839 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/DataSetController.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/DataSetController.java @@ -47,12 +47,10 @@ public class DataSetController { } @GetMapping("/getDataSetList") - public List getDataSetList(@RequestParam("domainId") Long domainId, - HttpServletRequest request, HttpServletResponse response) { + public List getDataSetList(@RequestParam("domainId") Long domainId) { MetaFilter metaFilter = new MetaFilter(); metaFilter.setDomainId(domainId); - User user = UserHolder.findUser(request, response); - return dataSetService.getDataSetList(metaFilter, user); + return dataSetService.getDataSetList(metaFilter); } @DeleteMapping("/{id}") diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/TagController.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/TagController.java index f8a68b036..d5f3cfdf7 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/TagController.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/TagController.java @@ -12,11 +12,6 @@ import com.tencent.supersonic.headless.api.pojo.response.TagResp; import com.tencent.supersonic.headless.server.persistence.dataobject.TagDO; import com.tencent.supersonic.headless.server.pojo.TagFilter; import com.tencent.supersonic.headless.server.service.TagMetaService; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import javax.validation.Valid; - import com.tencent.supersonic.headless.server.service.TagQueryService; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; @@ -26,6 +21,9 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.List; @RestController @@ -130,17 +128,11 @@ public class TagController { * 标签查询 * * @param tagFilter - * @param request - * @param response * @return - * @throws Exception */ @PostMapping("/queryTag") - public List queryPage(@RequestBody TagFilter tagFilter, - HttpServletRequest request, - HttpServletResponse response) throws Exception { - User user = UserHolder.findUser(request, response); - return tagMetaService.getTagDOList(tagFilter, user); + public List queryPage(@RequestBody TagFilter tagFilter) { + return tagMetaService.getTagDOList(tagFilter); } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/TermController.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/TermController.java new file mode 100644 index 000000000..93eed8d4b --- /dev/null +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/TermController.java @@ -0,0 +1,40 @@ +package com.tencent.supersonic.headless.server.rest; + +import com.tencent.supersonic.auth.api.authentication.pojo.User; +import com.tencent.supersonic.auth.api.authentication.utils.UserHolder; +import com.tencent.supersonic.headless.api.pojo.request.TermSetReq; +import com.tencent.supersonic.headless.api.pojo.response.TermSetResp; +import com.tencent.supersonic.headless.server.service.TermService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +@RestController +@RequestMapping("/api/semantic/term") +public class TermController { + + @Autowired + private TermService termService; + + @PostMapping("/saveOrUpdate") + public boolean saveOrUpdate(@RequestBody TermSetReq termSetReq, + HttpServletRequest request, + HttpServletResponse response) { + User user = UserHolder.findUser(request, response); + termService.saveOrUpdate(termSetReq, user); + return true; + } + + @GetMapping + public TermSetResp getTermSet(@RequestParam("domainId") Long domainId) { + return termService.getTermSet(domainId); + } + +} diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/DataSetService.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/DataSetService.java index 1d1000e5b..bf5785ac6 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/DataSetService.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/DataSetService.java @@ -18,7 +18,7 @@ public interface DataSetService { DataSetResp getDataSet(Long id); - List getDataSetList(MetaFilter metaFilter, User user); + List getDataSetList(MetaFilter metaFilter); void delete(Long id, User user); @@ -32,8 +32,6 @@ public interface DataSetService { List getDataSets(List dataSetNames, User user); - Map getDataSetIdToNameMap(List dataSetIds); - List getDataSetsInheritAuth(User user, Long domainId); SemanticQueryReq convert(QueryDataSetReq queryDataSetReq); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/TagMetaService.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/TagMetaService.java index b5c8811b1..55917d1b8 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/TagMetaService.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/TagMetaService.java @@ -27,9 +27,9 @@ public interface TagMetaService { List getTags(TagFilter tagFilter); - List getTagDOList(TagFilter tagFilter, User user); + List getTagDOList(TagFilter tagFilter); PageInfo queryTagMarketPage(TagFilterPageReq tagMarketPageReq, User user); - List getTagItems(User user, List itemIds, TagDefineType tagDefineType); + List getTagItems(List itemIds, TagDefineType tagDefineType); } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/TermService.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/TermService.java new file mode 100644 index 000000000..064d035fe --- /dev/null +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/TermService.java @@ -0,0 +1,21 @@ +package com.tencent.supersonic.headless.server.service; + + +import com.tencent.supersonic.auth.api.authentication.pojo.User; +import com.tencent.supersonic.headless.api.pojo.Term; +import com.tencent.supersonic.headless.api.pojo.request.TermSetReq; +import com.tencent.supersonic.headless.api.pojo.response.TermSetResp; + +import java.util.List; +import java.util.Map; +import java.util.Set; + +public interface TermService { + + void saveOrUpdate(TermSetReq termSetReq, User user); + + TermSetResp getTermSet(Long domainId); + + Map> getTermSets(Set domainIds); + +} diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DataSetServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DataSetServiceImpl.java index 0f867d0c2..d4736c5bc 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DataSetServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DataSetServiceImpl.java @@ -84,7 +84,7 @@ public class DataSetServiceImpl dataSetReq.createdBy(user.getName()); DataSetDO dataSetDO = convert(dataSetReq); dataSetDO.setStatus(StatusEnum.ONLINE.getCode()); - DataSetResp dataSetResp = convert(dataSetDO, user); + DataSetResp dataSetResp = convert(dataSetDO); conflictCheck(dataSetResp); save(dataSetDO); return dataSetResp; @@ -94,7 +94,7 @@ public class DataSetServiceImpl public DataSetResp update(DataSetReq dataSetReq, User user) { dataSetReq.updatedBy(user.getName()); DataSetDO dataSetDO = convert(dataSetReq); - DataSetResp dataSetResp = convert(dataSetDO, user); + DataSetResp dataSetResp = convert(dataSetDO); conflictCheck(dataSetResp); updateById(dataSetDO); return dataSetResp; @@ -103,11 +103,11 @@ public class DataSetServiceImpl @Override public DataSetResp getDataSet(Long id) { DataSetDO dataSetDO = getById(id); - return convert(dataSetDO, User.getFakeUser()); + return convert(dataSetDO); } @Override - public List getDataSetList(MetaFilter metaFilter, User user) { + public List getDataSetList(MetaFilter metaFilter) { QueryWrapper wrapper = new QueryWrapper<>(); if (metaFilter.getDomainId() != null) { wrapper.lambda().eq(DataSetDO::getDomainId, metaFilter.getDomainId()); @@ -125,7 +125,7 @@ public class DataSetServiceImpl wrapper.lambda().in(DataSetDO::getName, metaFilter.getNames()); } wrapper.lambda().ne(DataSetDO::getStatus, StatusEnum.DELETED.getCode()); - return list(wrapper).stream().map(entry -> convert(entry, user)).collect(Collectors.toList()); + return list(wrapper).stream().map(this::convert).collect(Collectors.toList()); } @Override @@ -158,22 +158,13 @@ public class DataSetServiceImpl } private List getDataSetsByAuth(User user, MetaFilter metaFilter) { - List dataSetResps = getDataSetList(metaFilter, user); + List dataSetResps = getDataSetList(metaFilter); return getDataSetFilterByAuth(dataSetResps, user); } - @Override - public Map getDataSetIdToNameMap(List dataSetIds) { - MetaFilter metaFilter = new MetaFilter(); - metaFilter.setIds(dataSetIds); - List dataSetResps = getDataSetList(metaFilter, User.getFakeUser()); - return dataSetResps.stream().collect( - Collectors.toMap(DataSetResp::getId, DataSetResp::getName, (k1, k2) -> k1)); - } - @Override public List getDataSetsInheritAuth(User user, Long domainId) { - List dataSetResps = getDataSetList(new MetaFilter(), user); + List dataSetResps = getDataSetList(new MetaFilter()); List inheritAuthFormDomain = getDataSetFilterByDomainAuth(dataSetResps, user); Set dataSetRespSet = new HashSet<>(inheritAuthFormDomain); List dataSetFilterByAuth = getDataSetFilterByAuth(dataSetResps, user); @@ -202,7 +193,7 @@ public class DataSetServiceImpl domainIds.contains(dataSetResp.getDomainId())).collect(Collectors.toList()); } - private DataSetResp convert(DataSetDO dataSetDO, User user) { + private DataSetResp convert(DataSetDO dataSetDO) { DataSetResp dataSetResp = new DataSetResp(); BeanMapper.mapper(dataSetDO, dataSetResp); dataSetResp.setDataSetDetail(JSONObject.parseObject(dataSetDO.getDataSetDetail(), DataSetDetail.class)); @@ -214,11 +205,11 @@ public class DataSetServiceImpl dataSetResp.setAdminOrgs(StringUtils.isBlank(dataSetDO.getAdminOrg()) ? Lists.newArrayList() : Arrays.asList(dataSetDO.getAdminOrg().split(","))); dataSetResp.setTypeEnum(TypeEnums.DATASET); - List dimensionItems = tagMetaService.getTagItems(user, dataSetResp.dimensionIds(), + List dimensionItems = tagMetaService.getTagItems(dataSetResp.dimensionIds(), TagDefineType.DIMENSION); dataSetResp.setAllDimensions(dimensionItems); - List metricItems = tagMetaService.getTagItems(user, dataSetResp.metricIds(), TagDefineType.METRIC); + List metricItems = tagMetaService.getTagItems(dataSetResp.metricIds(), TagDefineType.METRIC); dataSetResp.setAllMetrics(metricItems); return dataSetResp; } @@ -259,7 +250,7 @@ public class DataSetServiceImpl metaFilter.setIds(dataSetIds); List dataSetList = dataSetSchemaCache.getIfPresent(metaFilter); if (CollectionUtils.isEmpty(dataSetList)) { - dataSetList = getDataSetList(metaFilter, user); + dataSetList = getDataSetList(metaFilter); dataSetSchemaCache.put(metaFilter, dataSetList); } return dataSetList.stream() diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DimensionServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DimensionServiceImpl.java index b20446421..940422281 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DimensionServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/DimensionServiceImpl.java @@ -246,7 +246,7 @@ public class DimensionServiceImpl implements DimensionService { List dimensionIds = dimensionResps.stream().map(dimensionResp -> dimensionResp.getId()) .collect(Collectors.toList()); - List tagItems = tagMetaService.getTagItems(User.getFakeUser(), dimensionIds, TagDefineType.DIMENSION); + List tagItems = tagMetaService.getTagItems(dimensionIds, TagDefineType.DIMENSION); Map itemIdToTagItem = tagItems.stream() .collect(Collectors.toMap(tag -> tag.getItemId(), tag -> tag, (newTag, oldTag) -> newTag)); @@ -325,7 +325,7 @@ public class DimensionServiceImpl implements DimensionService { List dimensionIds = dimensionResps.stream().map(dimension -> dimension.getId()) .collect(Collectors.toList()); tagFilter.setItemIds(dimensionIds); - Map keyAndTagMap = tagMetaService.getTagDOList(tagFilter, User.getFakeUser()).stream() + Map keyAndTagMap = tagMetaService.getTagDOList(tagFilter).stream() .collect(Collectors.toMap(tag -> tag.getItemId(), tag -> tag, (newTag, oldTag) -> newTag)); if (Objects.nonNull(keyAndTagMap)) { diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetaDiscoveryServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetaDiscoveryServiceImpl.java index 2ae812854..4fb9e3315 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetaDiscoveryServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetaDiscoveryServiceImpl.java @@ -4,17 +4,21 @@ import com.tencent.supersonic.common.pojo.enums.TimeDimensionEnum; import com.tencent.supersonic.headless.api.pojo.SchemaElement; import com.tencent.supersonic.headless.api.pojo.SchemaElementMatch; import com.tencent.supersonic.headless.api.pojo.SchemaElementType; +import com.tencent.supersonic.headless.api.pojo.SchemaItem; import com.tencent.supersonic.headless.api.pojo.SchemaMapInfo; import com.tencent.supersonic.headless.api.pojo.SemanticSchema; +import com.tencent.supersonic.headless.api.pojo.Term; import com.tencent.supersonic.headless.api.pojo.request.QueryMapReq; import com.tencent.supersonic.headless.api.pojo.request.QueryReq; import com.tencent.supersonic.headless.api.pojo.response.DataSetResp; import com.tencent.supersonic.headless.api.pojo.response.MapInfoResp; import com.tencent.supersonic.headless.api.pojo.response.MapResp; import com.tencent.supersonic.headless.core.chat.knowledge.builder.BaseWordBuilder; +import com.tencent.supersonic.headless.server.pojo.MetaFilter; import com.tencent.supersonic.headless.server.service.ChatQueryService; import com.tencent.supersonic.headless.server.service.DataSetService; import com.tencent.supersonic.headless.server.service.MetaDiscoveryService; +import com.tencent.supersonic.headless.server.service.TermService; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; @@ -43,30 +47,37 @@ public class MetaDiscoveryServiceImpl implements MetaDiscoveryService { @Autowired private SemanticService semanticService; + @Autowired + private TermService termService; + @Override public MapInfoResp getMapMeta(QueryMapReq queryMapReq) { QueryReq queryReq = new QueryReq(); BeanUtils.copyProperties(queryMapReq, queryReq); List dataSets = dataSetService.getDataSets(queryMapReq.getDataSetNames(), queryMapReq.getUser()); - Set dataSetIds = dataSets.stream().map(dataSetResp -> dataSetResp.getId()).collect(Collectors.toSet()); - queryReq.setDataSetIds(dataSetIds); + Set dataSetIds = dataSets.stream().map(SchemaItem::getId).collect(Collectors.toSet()); + queryReq.setDataSetIds(dataSetIds); MapResp mapResp = chatQueryService.performMapping(queryReq); return convert(mapResp, queryMapReq.getTopN()); } - public MapInfoResp convert(MapResp mapResp, Integer topN) { + private MapInfoResp convert(MapResp mapResp, Integer topN) { MapInfoResp mapInfoResp = new MapInfoResp(); if (Objects.isNull(mapResp)) { return mapInfoResp; } BeanUtils.copyProperties(mapResp, mapInfoResp); Set dataSetIds = mapResp.getMapInfo().getDataSetElementMatches().keySet(); - Map dataSetMap = dataSetService.getDataSetIdToNameMap(new ArrayList<>(dataSetIds)); - + MetaFilter metaFilter = new MetaFilter(); + metaFilter.setIds(new ArrayList<>(dataSetIds)); + List dataSetList = dataSetService.getDataSetList(metaFilter); + Map dataSetMap = dataSetList.stream() + .collect(Collectors.toMap(DataSetResp::getId, DataSetResp::getName)); mapInfoResp.setMapFields(getMapFields(mapResp.getMapInfo(), dataSetMap)); mapInfoResp.setTopFields(getTopFields(topN, mapResp.getMapInfo(), dataSetMap)); + mapInfoResp.setTerms(getTerms(dataSetList, dataSetMap)); return mapInfoResp; } @@ -114,6 +125,19 @@ public class MetaDiscoveryServiceImpl implements MetaDiscoveryService { return result; } + private Map> getTerms(List dataSets, Map dataSetNameMap) { + Set domainIds = dataSets.stream().map(DataSetResp::getDomainId).collect(Collectors.toSet()); + Map dataSetDomainIdMap = dataSets.stream() + .collect(Collectors.toMap(DataSetResp::getId, DataSetResp::getDomainId)); + Map> domainTermSetMap = termService.getTermSets(domainIds); + Map> dataSetTermSetMap = new HashMap<>(); + for (DataSetResp dataSet : dataSets) { + dataSetTermSetMap.put(dataSetNameMap.get(dataSet.getId()), + domainTermSetMap.get(dataSetDomainIdMap.get(dataSet.getId()))); + } + return dataSetTermSetMap; + } + /*** * get time dimension SchemaElementMatch * @param dataSetId diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java index 4b836ad4c..415eb4507 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/MetricServiceImpl.java @@ -316,7 +316,7 @@ public class MetricServiceImpl implements MetricService { List metricResps = convertList(queryMetric(metricFilter)); List metricIds = metricResps.stream().map(metricResp -> metricResp.getId()).collect(Collectors.toList()); - List tagItems = tagMetaService.getTagItems(User.getFakeUser(), metricIds, TagDefineType.METRIC); + List tagItems = tagMetaService.getTagItems(metricIds, TagDefineType.METRIC); Map itemIdToTagItem = tagItems.stream() .collect(Collectors.toMap(tag -> tag.getItemId(), tag -> tag, (newTag, oldTag) -> newTag)); @@ -374,7 +374,7 @@ public class MetricServiceImpl implements MetricService { List metricIds = metricRespList.stream().map(metric -> metric.getId()) .collect(Collectors.toList()); tagFilter.setItemIds(metricIds); - Map keyAndTagMap = tagMetaService.getTagDOList(tagFilter, User.getFakeUser()).stream() + Map keyAndTagMap = tagMetaService.getTagDOList(tagFilter).stream() .collect(Collectors.toMap(tag -> tag.getItemId(), tag -> tag, (newTag, oldTag) -> newTag)); if (Objects.nonNull(keyAndTagMap)) { diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SchemaServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SchemaServiceImpl.java index 66b33644e..cca188ffe 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SchemaServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/SchemaServiceImpl.java @@ -163,7 +163,7 @@ public class SchemaServiceImpl implements SchemaService { MetaFilter metaFilter = new MetaFilter(); metaFilter.setStatus(StatusEnum.ONLINE.getCode()); metaFilter.setIds(filter.getDataSetIds()); - List dataSetResps = dataSetService.getDataSetList(metaFilter, User.getFakeUser()); + List dataSetResps = dataSetService.getDataSetList(metaFilter); Map dataSetRespMap = getDataSetMap(dataSetResps); List modelIds = dataSetRespMap.values().stream().map(DataSetResp::getAllModels) @@ -404,7 +404,7 @@ public class SchemaServiceImpl implements SchemaService { } parentItem.getChildren().add(itemResp); } - List dataSetResps = dataSetService.getDataSetList(new MetaFilter(), User.getFakeUser()); + List dataSetResps = dataSetService.getDataSetList(new MetaFilter()); for (DataSetResp dataSetResp : dataSetResps) { ItemResp itemResp = itemRespMap.get(dataSetResp.getDomainId()); if (itemResp != null) { diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagMetaServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagMetaServiceImpl.java index 70a4c88d6..6550e2a0a 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagMetaServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TagMetaServiceImpl.java @@ -138,7 +138,7 @@ public class TagMetaServiceImpl implements TagMetaService { } @Override - public List getTagDOList(TagFilter tagFilter, User user) { + public List getTagDOList(TagFilter tagFilter) { return tagRepository.getTagDOList(tagFilter); } @@ -388,11 +388,11 @@ public class TagMetaServiceImpl implements TagMetaService { } @Override - public List getTagItems(User user, List itemIds, TagDefineType tagDefineType) { + public List getTagItems(List itemIds, TagDefineType tagDefineType) { TagFilter tagFilter = new TagFilter(); tagFilter.setTagDefineType(tagDefineType); tagFilter.setItemIds(itemIds); - Set dimensionItemSet = getTagDOList(tagFilter, user).stream().map(TagDO::getItemId) + Set dimensionItemSet = getTagDOList(tagFilter).stream().map(TagDO::getItemId) .collect(Collectors.toSet()); return itemIds.stream().map(entry -> { TagItem tagItem = new TagItem(); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TermServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TermServiceImpl.java new file mode 100644 index 000000000..1c9ff96bb --- /dev/null +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/TermServiceImpl.java @@ -0,0 +1,67 @@ +package com.tencent.supersonic.headless.server.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.tencent.supersonic.auth.api.authentication.pojo.User; +import com.tencent.supersonic.common.util.BeanMapper; +import com.tencent.supersonic.common.util.JsonUtil; +import com.tencent.supersonic.headless.api.pojo.Term; +import com.tencent.supersonic.headless.api.pojo.request.TermSetReq; +import com.tencent.supersonic.headless.api.pojo.response.TermSetResp; +import com.tencent.supersonic.headless.server.persistence.dataobject.TermSetDO; +import com.tencent.supersonic.headless.server.persistence.mapper.TermSetMapper; +import com.tencent.supersonic.headless.server.service.TermService; +import org.springframework.stereotype.Service; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + + +@Service +public class TermServiceImpl extends ServiceImpl implements TermService { + + @Override + public void saveOrUpdate(TermSetReq termSetReq, User user) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(TermSetDO::getDomainId, termSetReq.getDomainId()); + TermSetDO termSetDO = getOne(queryWrapper); + if (termSetDO == null) { + termSetReq.createdBy(user.getName()); + termSetDO = new TermSetDO(); + } + termSetReq.updatedBy(user.getName()); + BeanMapper.mapper(termSetReq, termSetDO); + termSetDO.setTerms(JsonUtil.toString(termSetReq.getTerms())); + saveOrUpdate(termSetDO); + } + + @Override + public TermSetResp getTermSet(Long domainId) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().eq(TermSetDO::getDomainId, domainId); + TermSetDO termSetDO = getOne(queryWrapper); + TermSetResp termSetResp = new TermSetResp(domainId); + if (termSetDO == null) { + return termSetResp; + } + return convert(termSetDO); + } + + @Override + public Map> getTermSets(Set domainIds) { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.lambda().in(TermSetDO::getDomainId, domainIds); + List list = list(queryWrapper); + return list.stream().map(this::convert).collect( + Collectors.toMap(TermSetResp::getDomainId, TermSetResp::getTerms, (k1, k2) -> k1)); + } + + private TermSetResp convert(TermSetDO termSetDO) { + TermSetResp termSetResp = new TermSetResp(); + BeanMapper.mapper(termSetDO, termSetResp); + termSetResp.setTerms(JsonUtil.toList(termSetDO.getTerms(), Term.class)); + return termSetResp; + } + +} diff --git a/launchers/standalone/src/main/resources/config.update/sql-update.sql b/launchers/standalone/src/main/resources/config.update/sql-update.sql index 60e16c014..26f08d130 100644 --- a/launchers/standalone/src/main/resources/config.update/sql-update.sql +++ b/launchers/standalone/src/main/resources/config.update/sql-update.sql @@ -293,4 +293,16 @@ alter table s2_metric add column `is_publish` int(10) DEFAULT NULL COMMENT '是 update s2_metric set is_publish = 1; --20240402 -alter table s2_dimension add column `ext` varchar(1000) DEFAULT NULL; \ No newline at end of file +alter table s2_dimension add column `ext` varchar(1000) DEFAULT NULL; + +--20240510 +CREATE TABLE IF NOT EXISTS `s2_term_set` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `domain_id` bigint(20), + `terms` varchar(1000), + `created_at` datetime NOT NULL , + `created_by` varchar(100) NOT NULL , + `updated_at` datetime DEFAULT NULL , + `updated_by` varchar(100) DEFAULT NULL , + PRIMARY KEY (`id`) +); \ No newline at end of file diff --git a/launchers/standalone/src/main/resources/db/schema-h2.sql b/launchers/standalone/src/main/resources/db/schema-h2.sql index 7674f815e..9b99dea0e 100644 --- a/launchers/standalone/src/main/resources/db/schema-h2.sql +++ b/launchers/standalone/src/main/resources/db/schema-h2.sql @@ -625,4 +625,16 @@ CREATE TABLE IF NOT EXISTS `s2_query_rule` ( `ext` LONGVARCHAR DEFAULT NULL , PRIMARY KEY (`id`) ); -COMMENT ON TABLE s2_query_rule IS 'tag query rule table'; \ No newline at end of file +COMMENT ON TABLE s2_query_rule IS 'tag query rule table'; + +CREATE TABLE IF NOT EXISTS `s2_term_set` ( + `id` INT NOT NULL AUTO_INCREMENT, + `domain_id` INT , + `terms` varchar(1000), + `created_at` TIMESTAMP NOT NULL , + `created_by` varchar(100) NOT NULL , + `updated_at` TIMESTAMP DEFAULT NULL , + `updated_by` varchar(100) DEFAULT NULL , + PRIMARY KEY (`id`) + ); +COMMENT ON TABLE s2_term_set IS 'term info'; \ No newline at end of file diff --git a/launchers/standalone/src/main/resources/db/schema-mysql.sql b/launchers/standalone/src/main/resources/db/schema-mysql.sql index efe94d3dc..171a5ce73 100644 --- a/launchers/standalone/src/main/resources/db/schema-mysql.sql +++ b/launchers/standalone/src/main/resources/db/schema-mysql.sql @@ -548,4 +548,15 @@ CREATE TABLE IF NOT EXISTS `s2_query_rule` ( `updated_by` varchar(100) DEFAULT NULL , `ext` text DEFAULT NULL , PRIMARY KEY (`id`) - ) ENGINE = InnoDB DEFAULT CHARSET = utf8 COMMENT ='查询规则表'; \ No newline at end of file + ) ENGINE = InnoDB DEFAULT CHARSET = utf8 COMMENT ='查询规则表'; + +CREATE TABLE IF NOT EXISTS `s2_term_set` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `domain_id` bigint(20), + `terms` varchar(1000), + `created_at` datetime NOT NULL , + `created_by` varchar(100) NOT NULL , + `updated_at` datetime DEFAULT NULL , + `updated_by` varchar(100) DEFAULT NULL , + PRIMARY KEY (`id`) +); \ No newline at end of file diff --git a/launchers/standalone/src/test/resources/db/schema-h2.sql b/launchers/standalone/src/test/resources/db/schema-h2.sql index 7674f815e..3f4de20c2 100644 --- a/launchers/standalone/src/test/resources/db/schema-h2.sql +++ b/launchers/standalone/src/test/resources/db/schema-h2.sql @@ -625,4 +625,16 @@ CREATE TABLE IF NOT EXISTS `s2_query_rule` ( `ext` LONGVARCHAR DEFAULT NULL , PRIMARY KEY (`id`) ); -COMMENT ON TABLE s2_query_rule IS 'tag query rule table'; \ No newline at end of file +COMMENT ON TABLE s2_query_rule IS 'tag query rule table'; + +CREATE TABLE IF NOT EXISTS `s2_term_set` ( + `id` INT NOT NULL AUTO_INCREMENT, + `domain_id` INT , + `terms` varchar(1000), + `created_at` TIMESTAMP NOT NULL , + `created_by` varchar(100) NOT NULL , + `updated_at` TIMESTAMP DEFAULT NULL , + `updated_by` varchar(100) DEFAULT NULL , + PRIMARY KEY (`id`) + ); +COMMENT ON TABLE s2_term_set IS 'term info'; \ No newline at end of file