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 feaa35e7d..81a129bb2 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 @@ -2,12 +2,15 @@ package com.tencent.supersonic.headless.server.service.impl; import com.google.common.collect.Lists; import com.tencent.supersonic.auth.api.authentication.service.UserService; +import com.tencent.supersonic.common.pojo.DataEvent; +import com.tencent.supersonic.common.pojo.DataItem; import com.tencent.supersonic.common.pojo.ItemDateResp; import com.tencent.supersonic.common.pojo.ModelRela; 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.StatusEnum; +import com.tencent.supersonic.common.pojo.enums.TypeEnums; import com.tencent.supersonic.common.pojo.exception.InvalidArgumentException; import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.headless.api.pojo.DBColumn; @@ -51,6 +54,7 @@ import com.tencent.supersonic.headless.server.utils.NameCheckUtils; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.BeanUtils; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -96,13 +100,16 @@ public class ModelServiceImpl implements ModelService { private final ModelRelaService modelRelaService; + private final ApplicationEventPublisher eventPublisher; + ExecutorService executor = new ThreadPoolExecutor(0, 5, 5L, TimeUnit.SECONDS, new LinkedBlockingQueue<>()); public ModelServiceImpl(ModelRepository modelRepository, DatabaseService databaseService, @Lazy DimensionService dimensionService, @Lazy MetricService metricService, DomainService domainService, UserService userService, DataSetService dataSetService, - DateInfoRepository dateInfoRepository, ModelRelaService modelRelaService) { + DateInfoRepository dateInfoRepository, ModelRelaService modelRelaService, + ApplicationEventPublisher eventPublisher) { this.modelRepository = modelRepository; this.databaseService = databaseService; this.dimensionService = dimensionService; @@ -112,6 +119,7 @@ public class ModelServiceImpl implements ModelService { this.dataSetService = dataSetService; this.dateInfoRepository = dateInfoRepository; this.modelRelaService = modelRelaService; + this.eventPublisher = eventPublisher; } @Override @@ -122,6 +130,7 @@ public class ModelServiceImpl implements ModelService { modelRepository.createModel(modelDO); batchCreateDimension(modelDO, user); batchCreateMetric(modelDO, user); + sendEvent(modelDO, EventType.ADD); return ModelConverter.convert(modelDO); } @@ -148,6 +157,7 @@ public class ModelServiceImpl implements ModelService { modelRepository.updateModel(modelDO); batchCreateDimension(modelDO, user); batchCreateMetric(modelDO, user); + sendEvent(modelDO, EventType.UPDATE); return ModelConverter.convert(modelDO); } @@ -608,4 +618,16 @@ public class ModelServiceImpl implements ModelService { } return false; } + + private void sendEvent(ModelDO modelDO, EventType eventType) { + DataItem dataItem = getDataItem(modelDO); + eventPublisher.publishEvent(new DataEvent(this, Lists.newArrayList(dataItem), eventType)); + } + + private DataItem getDataItem(ModelDO modelDO) { + return DataItem.builder().id(modelDO.getId().toString()).name(modelDO.getName()) + .bizName(modelDO.getBizName()).modelId(modelDO.getId().toString()) + .domainId(modelDO.getDomainId().toString()).type(TypeEnums.DIMENSION).build(); + } + } diff --git a/headless/server/src/test/java/com/tencent/supersonic/headless/server/service/ModelServiceImplTest.java b/headless/server/src/test/java/com/tencent/supersonic/headless/server/service/ModelServiceImplTest.java index cb8c27a73..a1d9b6d5f 100644 --- a/headless/server/src/test/java/com/tencent/supersonic/headless/server/service/ModelServiceImplTest.java +++ b/headless/server/src/test/java/com/tencent/supersonic/headless/server/service/ModelServiceImplTest.java @@ -25,6 +25,7 @@ import org.mockito.Mockito; import java.util.ArrayList; import java.util.List; +import org.springframework.context.ApplicationEventPublisher; import static org.mockito.Mockito.when; @@ -76,9 +77,10 @@ class ModelServiceImplTest { DateInfoRepository dateInfoRepository = Mockito.mock(DateInfoRepository.class); DataSetService viewService = Mockito.mock(DataSetService.class); ModelRelaService modelRelaService = Mockito.mock(ModelRelaService.class); + ApplicationEventPublisher eventPublisher = Mockito.mock(ApplicationEventPublisher.class); return new ModelServiceImpl(modelRepository, databaseService, dimensionService, metricService, domainService, userService, viewService, dateInfoRepository, - modelRelaService); + modelRelaService, eventPublisher); } private ModelReq mockModelReq() {