diff --git a/common/src/main/java/com/tencent/supersonic/common/pojo/DataEvent.java b/common/src/main/java/com/tencent/supersonic/common/pojo/DataEvent.java index 87a8d0a1d..4c6ddc532 100644 --- a/common/src/main/java/com/tencent/supersonic/common/pojo/DataEvent.java +++ b/common/src/main/java/com/tencent/supersonic/common/pojo/DataEvent.java @@ -1,27 +1,25 @@ package com.tencent.supersonic.common.pojo; import com.tencent.supersonic.common.pojo.enums.EventType; +import lombok.Getter; import org.springframework.context.ApplicationEvent; import java.util.List; +@Getter public class DataEvent extends ApplicationEvent { - private List dataItems; + private final List dataItems; - private EventType eventType; + private final EventType eventType; - public DataEvent(Object source, List dataItems, EventType eventType) { + private final String userName; + + public DataEvent(Object source, List dataItems, EventType eventType, String userName) { super(source); this.dataItems = dataItems; this.eventType = eventType; + this.userName = userName; } - public List getDataItems() { - return dataItems; - } - - public EventType getEventType() { - return eventType; - } } diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/DimensionService.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/DimensionService.java index 3a27b3a62..55d69387e 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/DimensionService.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/DimensionService.java @@ -52,7 +52,7 @@ public interface DimensionService { List mockDimensionValueAlias(DimensionReq dimensionReq, User user); - void sendDimensionEventBatch(List modelIds, EventType eventType); + void sendDimensionEventBatch(List modelIds, EventType eventType, User user); DataEvent getAllDataEvents(); 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 c45c9a460..cfdba7759 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 @@ -70,7 +70,7 @@ public interface MetricService { MetricQueryDefaultConfig getMetricQueryDefaultConfig(Long metricId, User user); - void sendMetricEventBatch(List modelIds, EventType eventType); + void sendMetricEventBatch(List modelIds, EventType eventType, User user); List queryMetrics(MetricsFilter metricsFilter); 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 14edb7b68..f48e67887 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 @@ -8,7 +8,10 @@ import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; -import com.tencent.supersonic.common.pojo.*; +import com.tencent.supersonic.common.pojo.DataEvent; +import com.tencent.supersonic.common.pojo.DataItem; +import com.tencent.supersonic.common.pojo.ModelRela; +import com.tencent.supersonic.common.pojo.User; import com.tencent.supersonic.common.pojo.enums.EventType; import com.tencent.supersonic.common.pojo.enums.StatusEnum; import com.tencent.supersonic.common.pojo.enums.TypeEnums; @@ -22,14 +25,22 @@ import com.tencent.supersonic.headless.api.pojo.request.DimValueAliasReq; import com.tencent.supersonic.headless.api.pojo.request.DimensionReq; import com.tencent.supersonic.headless.api.pojo.request.MetaBatchReq; import com.tencent.supersonic.headless.api.pojo.request.PageDimensionReq; -import com.tencent.supersonic.headless.api.pojo.response.*; +import com.tencent.supersonic.headless.api.pojo.response.DataSetResp; +import com.tencent.supersonic.headless.api.pojo.response.DatabaseResp; +import com.tencent.supersonic.headless.api.pojo.response.DimensionResp; +import com.tencent.supersonic.headless.api.pojo.response.ModelResp; +import com.tencent.supersonic.headless.api.pojo.response.SemanticQueryResp; import com.tencent.supersonic.headless.server.persistence.dataobject.DimensionDO; import com.tencent.supersonic.headless.server.persistence.mapper.DimensionDOMapper; import com.tencent.supersonic.headless.server.persistence.repository.DimensionRepository; import com.tencent.supersonic.headless.server.pojo.DimensionFilter; import com.tencent.supersonic.headless.server.pojo.DimensionsFilter; import com.tencent.supersonic.headless.server.pojo.ModelFilter; -import com.tencent.supersonic.headless.server.service.*; +import com.tencent.supersonic.headless.server.service.DataSetService; +import com.tencent.supersonic.headless.server.service.DatabaseService; +import com.tencent.supersonic.headless.server.service.DimensionService; +import com.tencent.supersonic.headless.server.service.ModelRelaService; +import com.tencent.supersonic.headless.server.service.ModelService; import com.tencent.supersonic.headless.server.utils.AliasGenerateHelper; import com.tencent.supersonic.headless.server.utils.DimensionConverter; import com.tencent.supersonic.headless.server.utils.NameCheckUtils; @@ -37,12 +48,16 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.builder.EqualsBuilder; import org.springframework.beans.BeanUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; -import java.util.*; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Objects; import java.util.stream.Collectors; @Service @@ -50,31 +65,30 @@ import java.util.stream.Collectors; public class DimensionServiceImpl extends ServiceImpl implements DimensionService { - private DimensionRepository dimensionRepository; + private final DimensionRepository dimensionRepository; - private ModelService modelService; + private final ModelService modelService; - private AliasGenerateHelper aliasGenerateHelper; + private final AliasGenerateHelper aliasGenerateHelper; - private DatabaseService databaseService; + private final DatabaseService databaseService; - private ModelRelaService modelRelaService; + private final ModelRelaService modelRelaService; - private DataSetService dataSetService; + private final DataSetService dataSetService; - - @Autowired - private ApplicationEventPublisher eventPublisher; + private final ApplicationEventPublisher eventPublisher; public DimensionServiceImpl(DimensionRepository dimensionRepository, ModelService modelService, AliasGenerateHelper aliasGenerateHelper, DatabaseService databaseService, - ModelRelaService modelRelaService, DataSetService dataSetService) { + ModelRelaService modelRelaService, DataSetService dataSetService, ApplicationEventPublisher eventPublisher) { this.modelService = modelService; this.dimensionRepository = dimensionRepository; this.aliasGenerateHelper = aliasGenerateHelper; this.databaseService = databaseService; this.modelRelaService = modelRelaService; this.dataSetService = dataSetService; + this.eventPublisher = eventPublisher; } @Override @@ -83,7 +97,7 @@ public class DimensionServiceImpl extends ServiceImpl modelIds, EventType eventType) { + public void sendDimensionEventBatch(List modelIds, EventType eventType, User user) { DimensionFilter dimensionFilter = new DimensionFilter(); dimensionFilter.setModelIds(modelIds); List dimensionDOS = queryDimension(dimensionFilter); - sendEventBatch(dimensionDOS, eventType); + sendEventBatch(dimensionDOS, eventType, user); } - private void sendEventBatch(List dimensionDOS, EventType eventType) { - DataEvent dataEvent = getDataEvent(dimensionDOS, eventType); + private void sendEventBatch(List dimensionDOS, EventType eventType, User user) { + DataEvent dataEvent = getDataEvent(dimensionDOS, eventType, user.getName()); eventPublisher.publishEvent(dataEvent); } public DataEvent getAllDataEvents() { DimensionFilter dimensionFilter = new DimensionFilter(); List dimensionDOS = queryDimension(dimensionFilter); - return getDataEvent(dimensionDOS, EventType.ADD); + return getDataEvent(dimensionDOS, EventType.ADD, ""); } @Override @@ -529,14 +543,14 @@ public class DimensionServiceImpl extends ServiceImpl dimensionDOS, EventType eventType) { + private DataEvent getDataEvent(List dimensionDOS, EventType eventType, String userName) { List dataItems = dimensionDOS.stream().map(this::getDataItem) .filter(Objects::nonNull).collect(Collectors.toList()); - return new DataEvent(this, dataItems, eventType); + return new DataEvent(this, dataItems, eventType, userName); } - private void sendEvent(DataItem dataItem, EventType eventType) { - eventPublisher.publishEvent(new DataEvent(this, Lists.newArrayList(dataItem), eventType)); + private void sendEvent(DataItem dataItem, EventType eventType, String userName) { + eventPublisher.publishEvent(new DataEvent(this, Lists.newArrayList(dataItem), eventType, userName)); } private boolean isChange(DimensionReq dimensionReq, DimensionResp dimensionResp) { 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 51f06c83b..f19acb099 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 @@ -8,23 +8,61 @@ import com.github.pagehelper.PageInfo; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Lists; import com.google.common.collect.Sets; -import com.tencent.supersonic.common.pojo.*; -import com.tencent.supersonic.common.pojo.enums.*; +import com.tencent.supersonic.common.pojo.Aggregator; +import com.tencent.supersonic.common.pojo.DataEvent; +import com.tencent.supersonic.common.pojo.DataItem; +import com.tencent.supersonic.common.pojo.DateConf; +import com.tencent.supersonic.common.pojo.Filter; +import com.tencent.supersonic.common.pojo.User; +import com.tencent.supersonic.common.pojo.enums.AuthType; +import com.tencent.supersonic.common.pojo.enums.EventType; +import com.tencent.supersonic.common.pojo.enums.QueryType; +import com.tencent.supersonic.common.pojo.enums.StatusEnum; +import com.tencent.supersonic.common.pojo.enums.TypeEnums; import com.tencent.supersonic.common.util.BeanMapper; -import com.tencent.supersonic.common.util.JsonUtil; -import com.tencent.supersonic.headless.api.pojo.*; -import com.tencent.supersonic.headless.api.pojo.enums.DimensionType; +import com.tencent.supersonic.headless.api.pojo.DrillDownDimension; +import com.tencent.supersonic.headless.api.pojo.Measure; +import com.tencent.supersonic.headless.api.pojo.MetaFilter; +import com.tencent.supersonic.headless.api.pojo.MetricParam; +import com.tencent.supersonic.headless.api.pojo.MetricQueryDefaultConfig; +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.enums.MapModeEnum; import com.tencent.supersonic.headless.api.pojo.enums.MetricDefineType; -import com.tencent.supersonic.headless.api.pojo.request.*; -import com.tencent.supersonic.headless.api.pojo.response.*; +import com.tencent.supersonic.headless.api.pojo.request.MetaBatchReq; +import com.tencent.supersonic.headless.api.pojo.request.MetricBaseReq; +import com.tencent.supersonic.headless.api.pojo.request.MetricReq; +import com.tencent.supersonic.headless.api.pojo.request.PageMetricReq; +import com.tencent.supersonic.headless.api.pojo.request.QueryMapReq; +import com.tencent.supersonic.headless.api.pojo.request.QueryMetricReq; +import com.tencent.supersonic.headless.api.pojo.request.QueryStructReq; +import com.tencent.supersonic.headless.api.pojo.response.DataSetMapInfo; +import com.tencent.supersonic.headless.api.pojo.response.DataSetResp; +import com.tencent.supersonic.headless.api.pojo.response.DimensionResp; +import com.tencent.supersonic.headless.api.pojo.response.MapInfoResp; +import com.tencent.supersonic.headless.api.pojo.response.MetricResp; +import com.tencent.supersonic.headless.api.pojo.response.ModelResp; import com.tencent.supersonic.headless.server.facade.service.ChatLayerService; -import com.tencent.supersonic.headless.server.persistence.dataobject.*; +import com.tencent.supersonic.headless.server.persistence.dataobject.CollectDO; +import com.tencent.supersonic.headless.server.persistence.dataobject.MetricDO; +import com.tencent.supersonic.headless.server.persistence.dataobject.MetricQueryDefaultConfigDO; import com.tencent.supersonic.headless.server.persistence.mapper.MetricDOMapper; import com.tencent.supersonic.headless.server.persistence.repository.MetricRepository; -import com.tencent.supersonic.headless.server.pojo.*; -import com.tencent.supersonic.headless.server.service.*; -import com.tencent.supersonic.headless.server.utils.*; +import com.tencent.supersonic.headless.server.pojo.DimensionsFilter; +import com.tencent.supersonic.headless.server.pojo.MetricFilter; +import com.tencent.supersonic.headless.server.pojo.MetricsFilter; +import com.tencent.supersonic.headless.server.pojo.ModelCluster; +import com.tencent.supersonic.headless.server.pojo.ModelFilter; +import com.tencent.supersonic.headless.server.service.CollectService; +import com.tencent.supersonic.headless.server.service.DataSetService; +import com.tencent.supersonic.headless.server.service.DimensionService; +import com.tencent.supersonic.headless.server.service.MetricService; +import com.tencent.supersonic.headless.server.service.ModelService; +import com.tencent.supersonic.headless.server.utils.AliasGenerateHelper; +import com.tencent.supersonic.headless.server.utils.MetricCheckUtils; +import com.tencent.supersonic.headless.server.utils.MetricConverter; +import com.tencent.supersonic.headless.server.utils.ModelClusterBuilder; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; @@ -33,7 +71,18 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Set; import java.util.stream.Collectors; @Service @@ -41,21 +90,21 @@ import java.util.stream.Collectors; public class MetricServiceImpl extends ServiceImpl implements MetricService { - private MetricRepository metricRepository; + private final MetricRepository metricRepository; - private ModelService modelService; + private final ModelService modelService; - private DimensionService dimensionService; + private final DimensionService dimensionService; - private AliasGenerateHelper aliasGenerateHelper; + private final AliasGenerateHelper aliasGenerateHelper; - private CollectService collectService; + private final CollectService collectService; - private DataSetService dataSetService; + private final DataSetService dataSetService; - private ApplicationEventPublisher eventPublisher; + private final ApplicationEventPublisher eventPublisher; - private ChatLayerService chatLayerService; + private final ChatLayerService chatLayerService; public MetricServiceImpl(MetricRepository metricRepository, ModelService modelService, AliasGenerateHelper aliasGenerateHelper, CollectService collectService, @@ -78,7 +127,7 @@ public class MetricServiceImpl extends ServiceImpl metricReq.createdBy(user.getName()); MetricDO metricDO = MetricConverter.convert2MetricDO(metricReq); metricRepository.createMetric(metricDO); - sendEventBatch(Lists.newArrayList(metricDO), EventType.ADD); + sendEventBatch(Lists.newArrayList(metricDO), EventType.ADD, user); // should update modelDetail as well modelService.updateModelByDimAndMetric(metricReq.getModelId(), null, Lists.newArrayList(metricReq), user); @@ -97,7 +146,7 @@ public class MetricServiceImpl extends ServiceImpl modelService.updateModelByDimAndMetric(metricReqs.get(0).getModelId(), null, metricReqs, user); - sendEventBatch(metricDOS, EventType.ADD); + sendEventBatch(metricDOS, EventType.ADD, user); } @Override @@ -163,7 +212,7 @@ public class MetricServiceImpl extends ServiceImpl DataItem dataItem = getDataItem(metricDO); dataItem.setName(oldName); dataItem.setNewName(metricDO.getName()); - sendEvent(dataItem, EventType.UPDATE); + sendEvent(dataItem, EventType.UPDATE, user); } // should update modelDetail as well modelService.updateModelByDimAndMetric(metricReq.getModelId(), null, @@ -181,7 +230,7 @@ public class MetricServiceImpl extends ServiceImpl // should update modelDetail as well modelService.updateModelByDimAndMetric(metricReqs.get(0).getModelId(), null, metricReqs, user); - sendEventBatch(metricDOS, EventType.UPDATE); + sendEventBatch(metricDOS, EventType.UPDATE, user); } @@ -202,9 +251,9 @@ public class MetricServiceImpl extends ServiceImpl metricRepository.batchUpdateStatus(metricDOS); if (StatusEnum.OFFLINE.getCode().equals(metaBatchReq.getStatus()) || StatusEnum.DELETED.getCode().equals(metaBatchReq.getStatus())) { - sendEventBatch(metricDOS, EventType.DELETE); + sendEventBatch(metricDOS, EventType.DELETE, user); } else if (StatusEnum.ONLINE.getCode().equals(metaBatchReq.getStatus())) { - sendEventBatch(metricDOS, EventType.ADD); + sendEventBatch(metricDOS, EventType.ADD, user); } } @@ -285,7 +334,7 @@ public class MetricServiceImpl extends ServiceImpl // should update modelDetail modelService.deleteModelDetailByDimAndMetric(metricDO.getModelId(), null, Lists.newArrayList(metricDO)); - sendEventBatch(Lists.newArrayList(metricDO), EventType.DELETE); + sendEventBatch(Lists.newArrayList(metricDO), EventType.DELETE, user); } @Override @@ -306,7 +355,7 @@ public class MetricServiceImpl extends ServiceImpl // should update modelDetail modelService.deleteModelDetailByDimAndMetric(metricDOList.get(0).getModelId(), null, metricDOList); - sendEventBatch(metricDOList, EventType.DELETE); + sendEventBatch(metricDOList, EventType.DELETE, user); } @Override @@ -661,11 +710,11 @@ public class MetricServiceImpl extends ServiceImpl } @Override - public void sendMetricEventBatch(List modelIds, EventType eventType) { + public void sendMetricEventBatch(List modelIds, EventType eventType, User user) { MetricFilter metricFilter = new MetricFilter(); metricFilter.setModelIds(modelIds); List metricDOS = queryMetric(metricFilter); - sendEventBatch(metricDOS, eventType); + sendEventBatch(metricDOS, eventType, user); } @Override @@ -678,22 +727,22 @@ public class MetricServiceImpl extends ServiceImpl public DataEvent getDataEvent() { MetricsFilter metricsFilter = new MetricsFilter(); List metricDOS = metricRepository.getMetrics(metricsFilter); - return getDataEvent(metricDOS, EventType.ADD); + return getDataEvent(metricDOS, EventType.ADD, User.getDefaultUser()); } - private DataEvent getDataEvent(List metricDOS, EventType eventType) { + private DataEvent getDataEvent(List metricDOS, EventType eventType, User user) { List dataItems = metricDOS.stream().map(this::getDataItem) .filter(Objects::nonNull).collect(Collectors.toList()); - return new DataEvent(this, dataItems, eventType); + return new DataEvent(this, dataItems, eventType, user.getName()); } - private void sendEventBatch(List metricDOS, EventType eventType) { - DataEvent dataEvent = getDataEvent(metricDOS, eventType); + private void sendEventBatch(List metricDOS, EventType eventType, User user) { + DataEvent dataEvent = getDataEvent(metricDOS, eventType, user); eventPublisher.publishEvent(dataEvent); } - private void sendEvent(DataItem dataItem, EventType eventType) { - eventPublisher.publishEvent(new DataEvent(this, Lists.newArrayList(dataItem), eventType)); + private void sendEvent(DataItem dataItem, EventType eventType, User user) { + eventPublisher.publishEvent(new DataEvent(this, Lists.newArrayList(dataItem), eventType, user.getName())); } private DataItem getDataItem(MetricDO metricDO) { diff --git a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ModelServiceImpl.java b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ModelServiceImpl.java index c0d414c6a..f10519627 100644 --- a/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ModelServiceImpl.java +++ b/headless/server/src/main/java/com/tencent/supersonic/headless/server/service/impl/ModelServiceImpl.java @@ -95,7 +95,7 @@ public class ModelServiceImpl implements ModelService { // create or update metric List metricReqs = ModelConverter.convertMetricList(modelDO); metricService.alterMetricBatch(metricReqs, modelDO.getId(), user); - sendEvent(modelDO, EventType.ADD); + sendEvent(modelDO, EventType.ADD, user); return ModelConverter.convert(modelDO); } @@ -129,7 +129,7 @@ public class ModelServiceImpl implements ModelService { // create or update metric List metricReqs = ModelConverter.convertMetricList(modelDO); metricService.alterMetricBatch(metricReqs, modelDO.getId(), user); - sendEvent(modelDO, EventType.UPDATE); + sendEvent(modelDO, EventType.UPDATE, user); return ModelConverter.convert(modelDO); } @@ -507,14 +507,14 @@ public class ModelServiceImpl implements ModelService { if (StatusEnum.OFFLINE.getCode().equals(metaBatchReq.getStatus()) || StatusEnum.DELETED.getCode().equals(metaBatchReq.getStatus())) { metricService.sendMetricEventBatch(Lists.newArrayList(modelDO.getId()), - EventType.DELETE); + EventType.DELETE, user); dimensionService.sendDimensionEventBatch(Lists.newArrayList(modelDO.getId()), - EventType.DELETE); + EventType.DELETE, user); } else if (StatusEnum.ONLINE.getCode().equals(metaBatchReq.getStatus())) { metricService.sendMetricEventBatch(Lists.newArrayList(modelDO.getId()), - EventType.ADD); + EventType.ADD, user); dimensionService.sendDimensionEventBatch(Lists.newArrayList(modelDO.getId()), - EventType.ADD); + EventType.ADD, user); } }).collect(Collectors.toList()); modelRepository.batchUpdate(modelDOS); @@ -670,9 +670,9 @@ public class ModelServiceImpl implements ModelService { return false; } - private void sendEvent(ModelDO modelDO, EventType eventType) { + private void sendEvent(ModelDO modelDO, EventType eventType, User user) { DataItem dataItem = getDataItem(modelDO); - eventPublisher.publishEvent(new DataEvent(this, Lists.newArrayList(dataItem), eventType)); + eventPublisher.publishEvent(new DataEvent(this, Lists.newArrayList(dataItem), eventType, user.getName())); } private DataItem getDataItem(ModelDO modelDO) {