Merge branch 'master' of github.com:supersonicbi/supersonic into ssmaster

This commit is contained in:
jerryjzhang
2024-12-15 08:49:47 +08:00
2 changed files with 26 additions and 2 deletions

View File

@@ -2,12 +2,15 @@ package com.tencent.supersonic.headless.server.service.impl;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.tencent.supersonic.auth.api.authentication.service.UserService; 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.ItemDateResp;
import com.tencent.supersonic.common.pojo.ModelRela; import com.tencent.supersonic.common.pojo.ModelRela;
import com.tencent.supersonic.common.pojo.User; import com.tencent.supersonic.common.pojo.User;
import com.tencent.supersonic.common.pojo.enums.AuthType; import com.tencent.supersonic.common.pojo.enums.AuthType;
import com.tencent.supersonic.common.pojo.enums.EventType; import com.tencent.supersonic.common.pojo.enums.EventType;
import com.tencent.supersonic.common.pojo.enums.StatusEnum; 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.pojo.exception.InvalidArgumentException;
import com.tencent.supersonic.common.util.JsonUtil; import com.tencent.supersonic.common.util.JsonUtil;
import com.tencent.supersonic.headless.api.pojo.DBColumn; 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 lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -96,13 +100,16 @@ public class ModelServiceImpl implements ModelService {
private final ModelRelaService modelRelaService; private final ModelRelaService modelRelaService;
private final ApplicationEventPublisher eventPublisher;
ExecutorService executor = ExecutorService executor =
new ThreadPoolExecutor(0, 5, 5L, TimeUnit.SECONDS, new LinkedBlockingQueue<>()); new ThreadPoolExecutor(0, 5, 5L, TimeUnit.SECONDS, new LinkedBlockingQueue<>());
public ModelServiceImpl(ModelRepository modelRepository, DatabaseService databaseService, public ModelServiceImpl(ModelRepository modelRepository, DatabaseService databaseService,
@Lazy DimensionService dimensionService, @Lazy MetricService metricService, @Lazy DimensionService dimensionService, @Lazy MetricService metricService,
DomainService domainService, UserService userService, DataSetService dataSetService, DomainService domainService, UserService userService, DataSetService dataSetService,
DateInfoRepository dateInfoRepository, ModelRelaService modelRelaService) { DateInfoRepository dateInfoRepository, ModelRelaService modelRelaService,
ApplicationEventPublisher eventPublisher) {
this.modelRepository = modelRepository; this.modelRepository = modelRepository;
this.databaseService = databaseService; this.databaseService = databaseService;
this.dimensionService = dimensionService; this.dimensionService = dimensionService;
@@ -112,6 +119,7 @@ public class ModelServiceImpl implements ModelService {
this.dataSetService = dataSetService; this.dataSetService = dataSetService;
this.dateInfoRepository = dateInfoRepository; this.dateInfoRepository = dateInfoRepository;
this.modelRelaService = modelRelaService; this.modelRelaService = modelRelaService;
this.eventPublisher = eventPublisher;
} }
@Override @Override
@@ -122,6 +130,7 @@ public class ModelServiceImpl implements ModelService {
modelRepository.createModel(modelDO); modelRepository.createModel(modelDO);
batchCreateDimension(modelDO, user); batchCreateDimension(modelDO, user);
batchCreateMetric(modelDO, user); batchCreateMetric(modelDO, user);
sendEvent(modelDO, EventType.ADD);
return ModelConverter.convert(modelDO); return ModelConverter.convert(modelDO);
} }
@@ -148,6 +157,7 @@ public class ModelServiceImpl implements ModelService {
modelRepository.updateModel(modelDO); modelRepository.updateModel(modelDO);
batchCreateDimension(modelDO, user); batchCreateDimension(modelDO, user);
batchCreateMetric(modelDO, user); batchCreateMetric(modelDO, user);
sendEvent(modelDO, EventType.UPDATE);
return ModelConverter.convert(modelDO); return ModelConverter.convert(modelDO);
} }
@@ -608,4 +618,16 @@ public class ModelServiceImpl implements ModelService {
} }
return false; 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();
}
} }

View File

@@ -25,6 +25,7 @@ import org.mockito.Mockito;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import org.springframework.context.ApplicationEventPublisher;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
@@ -76,9 +77,10 @@ class ModelServiceImplTest {
DateInfoRepository dateInfoRepository = Mockito.mock(DateInfoRepository.class); DateInfoRepository dateInfoRepository = Mockito.mock(DateInfoRepository.class);
DataSetService viewService = Mockito.mock(DataSetService.class); DataSetService viewService = Mockito.mock(DataSetService.class);
ModelRelaService modelRelaService = Mockito.mock(ModelRelaService.class); ModelRelaService modelRelaService = Mockito.mock(ModelRelaService.class);
ApplicationEventPublisher eventPublisher = Mockito.mock(ApplicationEventPublisher.class);
return new ModelServiceImpl(modelRepository, databaseService, dimensionService, return new ModelServiceImpl(modelRepository, databaseService, dimensionService,
metricService, domainService, userService, viewService, dateInfoRepository, metricService, domainService, userService, viewService, dateInfoRepository,
modelRelaService); modelRelaService, eventPublisher);
} }
private ModelReq mockModelReq() { private ModelReq mockModelReq() {