|
|
@ -47,6 +47,7 @@ import org.thingsboard.server.common.data.relation.EntityRelationsQuery; |
|
|
import org.thingsboard.server.common.data.relation.EntitySearchDirection; |
|
|
import org.thingsboard.server.common.data.relation.EntitySearchDirection; |
|
|
import org.thingsboard.server.common.data.relation.RelationTypeGroup; |
|
|
import org.thingsboard.server.common.data.relation.RelationTypeGroup; |
|
|
import org.thingsboard.server.common.data.relation.RelationsSearchParameters; |
|
|
import org.thingsboard.server.common.data.relation.RelationsSearchParameters; |
|
|
|
|
|
import org.thingsboard.server.common.msg.queue.TbCallback; |
|
|
import org.thingsboard.server.dao.entity.AbstractEntityService; |
|
|
import org.thingsboard.server.dao.entity.AbstractEntityService; |
|
|
import org.thingsboard.server.dao.entity.EntityService; |
|
|
import org.thingsboard.server.dao.entity.EntityService; |
|
|
import org.thingsboard.server.dao.exception.DataValidationException; |
|
|
import org.thingsboard.server.dao.exception.DataValidationException; |
|
|
@ -65,6 +66,7 @@ import java.util.Set; |
|
|
import java.util.concurrent.ExecutionException; |
|
|
import java.util.concurrent.ExecutionException; |
|
|
import java.util.concurrent.ExecutorService; |
|
|
import java.util.concurrent.ExecutorService; |
|
|
import java.util.concurrent.Executors; |
|
|
import java.util.concurrent.Executors; |
|
|
|
|
|
import java.util.function.Consumer; |
|
|
import java.util.stream.Collectors; |
|
|
import java.util.stream.Collectors; |
|
|
import java.util.stream.Stream; |
|
|
import java.util.stream.Stream; |
|
|
|
|
|
|
|
|
@ -102,6 +104,11 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public AlarmOperationResult createOrUpdateAlarm(Alarm alarm) { |
|
|
public AlarmOperationResult createOrUpdateAlarm(Alarm alarm) { |
|
|
|
|
|
return createOrUpdateAlarm(alarm, () -> {}, () -> {}); |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
public AlarmOperationResult createOrUpdateAlarm(Alarm alarm, Runnable onAlarmCreation, Runnable onAlarmUpdate) { |
|
|
alarmDataValidator.validate(alarm, Alarm::getTenantId); |
|
|
alarmDataValidator.validate(alarm, Alarm::getTenantId); |
|
|
try { |
|
|
try { |
|
|
if (alarm.getStartTs() == 0L) { |
|
|
if (alarm.getStartTs() == 0L) { |
|
|
@ -114,11 +121,14 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ |
|
|
if (alarm.getId() == null) { |
|
|
if (alarm.getId() == null) { |
|
|
Alarm existing = alarmDao.findLatestByOriginatorAndType(alarm.getTenantId(), alarm.getOriginator(), alarm.getType()).get(); |
|
|
Alarm existing = alarmDao.findLatestByOriginatorAndType(alarm.getTenantId(), alarm.getOriginator(), alarm.getType()).get(); |
|
|
if (existing == null || existing.getStatus().isCleared()) { |
|
|
if (existing == null || existing.getStatus().isCleared()) { |
|
|
|
|
|
onAlarmCreation.run(); |
|
|
return createAlarm(alarm); |
|
|
return createAlarm(alarm); |
|
|
} else { |
|
|
} else { |
|
|
|
|
|
onAlarmUpdate.run(); |
|
|
return updateAlarm(existing, alarm); |
|
|
return updateAlarm(existing, alarm); |
|
|
} |
|
|
} |
|
|
} else { |
|
|
} else { |
|
|
|
|
|
onAlarmUpdate.run(); |
|
|
return updateAlarm(alarm).get(); |
|
|
return updateAlarm(alarm).get(); |
|
|
} |
|
|
} |
|
|
} catch (ExecutionException | InterruptedException e) { |
|
|
} catch (ExecutionException | InterruptedException e) { |
|
|
@ -159,7 +169,7 @@ public class BaseAlarmService extends AbstractEntityService implements AlarmServ |
|
|
log.debug("New Alarm : {}", alarm); |
|
|
log.debug("New Alarm : {}", alarm); |
|
|
Alarm saved = alarmDao.save(alarm.getTenantId(), alarm); |
|
|
Alarm saved = alarmDao.save(alarm.getTenantId(), alarm); |
|
|
List<EntityId> propagatedEntitiesList = createAlarmRelations(saved); |
|
|
List<EntityId> propagatedEntitiesList = createAlarmRelations(saved); |
|
|
return new AlarmOperationResult(saved, true, propagatedEntitiesList); |
|
|
return new AlarmOperationResult(saved, true, true, propagatedEntitiesList); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
private List<EntityId> createAlarmRelations(Alarm alarm) throws InterruptedException, ExecutionException { |
|
|
private List<EntityId> createAlarmRelations(Alarm alarm) throws InterruptedException, ExecutionException { |
|
|
|