1 Commits

Author SHA1 Message Date
jerryjzhang
71feb6c4eb [feature](headless)Add request user to data events.
Some checks failed
supersonic CentOS CI / build (21) (push) Has been cancelled
supersonic mac CI / build (21) (push) Has been cancelled
supersonic ubuntu CI / build (21) (push) Has been cancelled
supersonic windows CI / build (21) (push) Has been cancelled
2025-10-21 23:28:42 +08:00
4 changed files with 65 additions and 14 deletions

View File

@@ -15,8 +15,7 @@ public class DataEvent extends ApplicationEvent {
private final String userName;
public DataEvent(Object source, List<DataItem> dataItems, EventType eventType,
String userName) {
public DataEvent(Object source, List<DataItem> dataItems, EventType eventType, String userName) {
super(source);
this.dataItems = dataItems;
this.eventType = eventType;

View File

@@ -81,8 +81,7 @@ public class DimensionServiceImpl extends ServiceImpl<DimensionDOMapper, Dimensi
public DimensionServiceImpl(DimensionRepository dimensionRepository, ModelService modelService,
AliasGenerateHelper aliasGenerateHelper, DatabaseService databaseService,
ModelRelaService modelRelaService, DataSetService dataSetService,
ApplicationEventPublisher eventPublisher) {
ModelRelaService modelRelaService, DataSetService dataSetService, ApplicationEventPublisher eventPublisher) {
this.modelService = modelService;
this.dimensionRepository = dimensionRepository;
this.aliasGenerateHelper = aliasGenerateHelper;
@@ -116,11 +115,29 @@ public class DimensionServiceImpl extends ServiceImpl<DimensionDOMapper, Dimensi
.collect(Collectors.toMap(DimensionResp::getBizName, a -> a, (k1, k2) -> k1));
List<DimensionReq> dimensionToInsert = Lists.newArrayList();
List<DimensionReq> dimensionToUpdate = Lists.newArrayList();
List<Long> dimensionToDelete = Lists.newArrayList();
// look for which dimension need to insert, update, delete
dimensionReqs.forEach(dimension -> {
dimensionReqs.stream().forEach(dimension -> {
if (!bizNameMap.containsKey(dimension.getBizName())) {
dimensionToInsert.add(dimension);
} else {
DimensionResp dimensionRespByBizName = bizNameMap.get(dimension.getBizName());
if (null != dimensionRespByBizName && isChange(dimension, dimensionRespByBizName)) {
dimension.setId(dimensionRespByBizName.getId());
dimension.updatedBy(user.getName());
dimensionToUpdate.add(dimension);
}
}
});
// the bizNames from alter dimensions
List<String> bizNames =
dimensionReqs.stream().map(DimensionReq::getBizName).collect(Collectors.toList());
bizNameMap.keySet().forEach(bizNameInDb -> {
if (!bizNames.contains(bizNameInDb)) {
dimensionToDelete.add(bizNameMap.get(bizNameInDb).getId());
}
});
@@ -129,6 +146,16 @@ public class DimensionServiceImpl extends ServiceImpl<DimensionDOMapper, Dimensi
createDimensionBatch(dimensionToInsert, user);
}
// update
if (!CollectionUtils.isEmpty(dimensionToUpdate)) {
updateDimensionBatch(dimensionToUpdate, user);
}
// delete
if (!CollectionUtils.isEmpty(dimensionToDelete)) {
deleteDimensionBatch(dimensionToDelete, user);
}
}
@Override
@@ -516,16 +543,14 @@ public class DimensionServiceImpl extends ServiceImpl<DimensionDOMapper, Dimensi
.domainId(dimensionResp.getDomainId().toString()).type(TypeEnums.DIMENSION).build();
}
private DataEvent getDataEvent(List<DimensionDO> dimensionDOS, EventType eventType,
String userName) {
private DataEvent getDataEvent(List<DimensionDO> dimensionDOS, EventType eventType, String userName) {
List<DataItem> dataItems = dimensionDOS.stream().map(this::getDataItem)
.filter(Objects::nonNull).collect(Collectors.toList());
return new DataEvent(this, dataItems, eventType, userName);
}
private void sendEvent(DataItem dataItem, EventType eventType, String userName) {
eventPublisher.publishEvent(
new DataEvent(this, Lists.newArrayList(dataItem), eventType, userName));
eventPublisher.publishEvent(new DataEvent(this, Lists.newArrayList(dataItem), eventType, userName));
}
private boolean isChange(DimensionReq dimensionReq, DimensionResp dimensionResp) {

View File

@@ -157,9 +157,28 @@ public class MetricServiceImpl extends ServiceImpl<MetricDOMapper, MetricDO>
.collect(Collectors.toMap(MetricResp::getBizName, a -> a, (k1, k2) -> k1));
List<MetricReq> metricToInsert = Lists.newArrayList();
metricReqs.forEach(metric -> {
List<MetricReq> metricToUpdate = Lists.newArrayList();
List<Long> metricToDelete = Lists.newArrayList();
metricReqs.stream().forEach(metric -> {
if (!bizNameMap.containsKey(metric.getBizName())) {
metricToInsert.add(metric);
} else {
MetricResp metricRespByBizName = bizNameMap.get(metric.getBizName());
if (null != metricRespByBizName && isChange(metric, metricRespByBizName)) {
metric.setId(metricRespByBizName.getId());
metric.updatedBy(user.getName());
metricToUpdate.add(metric);
}
}
});
// the bizNames from alter dimensions
List<String> bizNames =
metricReqs.stream().map(MetricReq::getBizName).collect(Collectors.toList());
bizNameMap.keySet().forEach(bizNameInDb -> {
if (!bizNames.contains(bizNameInDb)) {
metricToDelete.add(bizNameMap.get(bizNameInDb).getId());
}
});
@@ -168,6 +187,16 @@ public class MetricServiceImpl extends ServiceImpl<MetricDOMapper, MetricDO>
createMetricBatch(metricToInsert, user);
}
// update
if (!CollectionUtils.isEmpty(metricToUpdate)) {
updateMetricBatch(metricToUpdate, user);
}
// delete
if (!CollectionUtils.isEmpty(metricToDelete)) {
deleteMetricBatch(metricToDelete, user);
}
}
@Override
@@ -713,8 +742,7 @@ public class MetricServiceImpl extends ServiceImpl<MetricDOMapper, MetricDO>
}
private void sendEvent(DataItem dataItem, EventType eventType, User user) {
eventPublisher.publishEvent(
new DataEvent(this, Lists.newArrayList(dataItem), eventType, user.getName()));
eventPublisher.publishEvent(new DataEvent(this, Lists.newArrayList(dataItem), eventType, user.getName()));
}
private DataItem getDataItem(MetricDO metricDO) {

View File

@@ -672,8 +672,7 @@ public class ModelServiceImpl implements ModelService {
private void sendEvent(ModelDO modelDO, EventType eventType, User user) {
DataItem dataItem = getDataItem(modelDO);
eventPublisher.publishEvent(
new DataEvent(this, Lists.newArrayList(dataItem), eventType, user.getName()));
eventPublisher.publishEvent(new DataEvent(this, Lists.newArrayList(dataItem), eventType, user.getName()));
}
private DataItem getDataItem(ModelDO modelDO) {