diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/MetaBatchReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/MetaBatchReq.java index 1ec47bce3..c240c069f 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/MetaBatchReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/MetaBatchReq.java @@ -1,5 +1,6 @@ package com.tencent.supersonic.headless.api.pojo.request; +import com.tencent.supersonic.common.pojo.enums.EventType; import lombok.Data; import java.util.List; @@ -17,4 +18,10 @@ public class MetaBatchReq { */ private Integer status; + /** + * 批量执行分类信息 + */ + private EventType type; + private List classifications; + } diff --git a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/PageSchemaItemReq.java b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/PageSchemaItemReq.java index 6ddc77a79..036221cf1 100644 --- a/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/PageSchemaItemReq.java +++ b/headless/api/src/main/java/com/tencent/supersonic/headless/api/pojo/request/PageSchemaItemReq.java @@ -19,4 +19,5 @@ public class PageSchemaItemReq extends PageBaseReq { private String key; private List ids; private boolean hasCollect; + private List classifications; } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/mapper/MetricDOCustomMapper.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/mapper/MetricDOCustomMapper.java index 772989c55..cfcfd4f8f 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/mapper/MetricDOCustomMapper.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/mapper/MetricDOCustomMapper.java @@ -17,8 +17,9 @@ public interface MetricDOCustomMapper { void batchUnPublish(List metricDOS); + void updateClassificationsBatch(List metricDOS); + List query(MetricFilter metricFilter); List queryMetrics(MetricsFilter metricsFilter); - } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/MetricRepository.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/MetricRepository.java index cdf2fc48f..d7fe31368 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/MetricRepository.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/MetricRepository.java @@ -22,6 +22,8 @@ public interface MetricRepository { void batchUnPublish(List metricDOS); + void updateClassificationsBatch(List metricDOS); + MetricDO getMetricById(Long id); List getMetric(MetricFilter metricFilter); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl/MetricRepositoryImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl/MetricRepositoryImpl.java index 11ce0b317..975eff973 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl/MetricRepositoryImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/persistence/repository/impl/MetricRepositoryImpl.java @@ -62,6 +62,11 @@ public class MetricRepositoryImpl implements MetricRepository { metricDOCustomMapper.batchUnPublish(metricDOS); } + @Override + public void updateClassificationsBatch(List metricDOS) { + metricDOCustomMapper.updateClassificationsBatch(metricDOS); + } + @Override public MetricDO getMetricById(Long id) { return metricDOMapper.selectById(id); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/MetricController.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/MetricController.java index 4f5f8121b..306521dd7 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/MetricController.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/rest/MetricController.java @@ -83,6 +83,15 @@ public class MetricController { return true; } + @PostMapping("/batchUpdateClassifications") + public Boolean batchUpdateClassifications(@RequestBody MetaBatchReq metaBatchReq, + HttpServletRequest request, + HttpServletResponse response) { + User user = UserHolder.findUser(request, response); + metricService.batchUpdateClassifications(metaBatchReq, user); + return true; + } + @PostMapping("/mockMetricAlias") public List mockMetricAlias(@RequestBody MetricBaseReq metricReq, HttpServletRequest request, @@ -141,11 +150,17 @@ public class MetricController { return metricService.getMetrics(metricFilter); } + @Deprecated @GetMapping("/getMetricTags") public Set getMetricTags() { return metricService.getMetricTags(); } + @GetMapping("/getMetricClassifications") + public Set getMetricClassifications() { + return metricService.getMetricTags(); + } + @GetMapping("/getDrillDownDimension") public List getDrillDownDimension(Long metricId) { return metricService.getDrillDownDimension(metricId); diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/MetricService.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/MetricService.java index 79f172645..37d178b1f 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/MetricService.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/MetricService.java @@ -33,6 +33,8 @@ public interface MetricService { void batchUnPublish(List metricIds, User user); + void batchUpdateClassifications(MetaBatchReq metaBatchReq, User user); + void deleteMetric(Long id, User user) throws Exception; PageInfo queryMetricMarket(PageMetricReq pageMetricReq, User user); 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 415eb4507..ec2b49828 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 @@ -72,6 +72,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Comparator; @@ -229,6 +230,41 @@ public class MetricServiceImpl implements MetricService { metricRepository.batchUnPublish(metrics); } + @Override + public void batchUpdateClassifications(MetaBatchReq metaBatchReq, User user) { + MetricFilter metricFilter = new MetricFilter(); + metricFilter.setIds(metaBatchReq.getIds()); + List metrics = metricRepository.getMetric(metricFilter); + for (MetricDO metricDO : metrics) { + metricDO.setUpdatedAt(new Date()); + metricDO.setUpdatedBy(user.getName()); + fillClassifications(metaBatchReq, metricDO); + } + metricRepository.updateClassificationsBatch(metrics); + } + + private void fillClassifications(MetaBatchReq metaBatchReq, MetricDO metricDO) { + String classificationStr = metricDO.getClassifications(); + Set classificationsList; + if (StringUtils.isBlank(classificationStr)) { + classificationsList = new HashSet<>(); + } else { + classificationsList = new HashSet<>(Arrays.asList(classificationStr.split(","))); + } + + if (EventType.ADD.equals(metaBatchReq.getType())) { + classificationsList.addAll(metaBatchReq.getClassifications()); + } + if (EventType.DELETE.equals(metaBatchReq.getType())) { + classificationsList.removeAll(metaBatchReq.getClassifications()); + } + String classifications = ""; + if (!CollectionUtils.isEmpty(classificationsList)) { + classifications = StringUtils.join(classificationsList, ","); + } + metricDO.setClassifications(classifications); + } + @Override public void deleteMetric(Long id, User user) { MetricDO metricDO = metricRepository.getMetricById(id); @@ -263,7 +299,7 @@ public class MetricServiceImpl implements MetricService { .flatMap(Collection::stream).filter(schemaElementMatch -> SchemaElementType.METRIC.equals(schemaElementMatch.getElement().getType())) .collect(Collectors.toMap(schemaElementMatch -> - schemaElementMatch.getElement().getId(), SchemaElementMatch::getSimilarity, + schemaElementMatch.getElement().getId(), SchemaElementMatch::getSimilarity, (existingValue, newValue) -> existingValue)); List metricIds = new ArrayList<>(result.keySet()); if (CollectionUtils.isEmpty(result.keySet())) { @@ -294,7 +330,7 @@ public class MetricServiceImpl implements MetricService { List idsToFilter = getIdsToFilter(pageMetricReq, collectIds); metricFilter.setIds(idsToFilter); PageInfo metricDOPageInfo = PageHelper.startPage(pageMetricReq.getCurrent(), - pageMetricReq.getPageSize()) + pageMetricReq.getPageSize()) .doSelectPageInfo(() -> queryMetric(metricFilter)); PageInfo pageInfo = new PageInfo<>(); BeanUtils.copyProperties(metricDOPageInfo, pageInfo); @@ -435,8 +471,8 @@ public class MetricServiceImpl implements MetricService { metricFilter.setModelIds(Lists.newArrayList(modelId)); List metricResps = getMetrics(metricFilter); return metricResps.stream().filter(metricResp -> - MetricDefineType.FIELD.equals(metricResp.getMetricDefineType()) - || MetricDefineType.MEASURE.equals(metricResp.getMetricDefineType())) + MetricDefineType.FIELD.equals(metricResp.getMetricDefineType()) + || MetricDefineType.MEASURE.equals(metricResp.getMetricDefineType())) .collect(Collectors.toList()); } @@ -626,11 +662,7 @@ public class MetricServiceImpl implements MetricService { return convertList(metricDOS, new ArrayList<>()); } - private void sendEventBatch(List metricDOS, EventType eventType) { - DataEvent dataEvent = getDataEvent(metricDOS, eventType); - eventPublisher.publishEvent(dataEvent); - } - + @Override public DataEvent getDataEvent() { MetricsFilter metricsFilter = new MetricsFilter(); List metricDOS = metricRepository.getMetrics(metricsFilter); @@ -643,6 +675,11 @@ public class MetricServiceImpl implements MetricService { return new DataEvent(this, dataItems, eventType); } + private void sendEventBatch(List metricDOS, EventType eventType) { + DataEvent dataEvent = getDataEvent(metricDOS, eventType); + eventPublisher.publishEvent(dataEvent); + } + private void sendEvent(DataItem dataItem, EventType eventType) { eventPublisher.publishEvent(new DataEvent(this, Lists.newArrayList(dataItem), eventType)); @@ -657,6 +694,7 @@ public class MetricServiceImpl implements MetricService { .type(TypeEnums.METRIC).defaultAgg(metricResp.getDefaultAgg()).build(); } + @Override public QueryStructReq convert(QueryMetricReq queryMetricReq) { //1. If a domainId exists, the modelIds obtained from the domainId. Set modelIdsByDomainId = getModelIdsByDomainId(queryMetricReq); diff --git a/headless/server/src/main/resources/mapper/custom/MetricDOCustomMapper.xml b/headless/server/src/main/resources/mapper/custom/MetricDOCustomMapper.xml index 0cbd4e51d..fe8dcc423 100644 --- a/headless/server/src/main/resources/mapper/custom/MetricDOCustomMapper.xml +++ b/headless/server/src/main/resources/mapper/custom/MetricDOCustomMapper.xml @@ -117,6 +117,16 @@ + + + update s2_metric + set classifications = #{metric.classifications,jdbcType=VARCHAR}, + updated_at = #{metric.updatedAt,jdbcType=TIMESTAMP}, + updated_by = #{metric.updatedBy,jdbcType=VARCHAR} + where id = #{metric.id,jdbcType=BIGINT} + + +