Don't send separate notification when notification clear rule is met
This commit is contained in:
parent
155c701822
commit
a70e20fe44
@ -54,7 +54,6 @@ import java.util.EnumMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@ -106,22 +105,11 @@ public class DefaultNotificationRuleProcessor implements NotificationRuleProcess
|
|||||||
log.debug("Processing notification rule '{}' for trigger type {}", rule.getName(), rule.getTriggerType());
|
log.debug("Processing notification rule '{}' for trigger type {}", rule.getName(), rule.getTriggerType());
|
||||||
|
|
||||||
if (matchesClearRule(trigger, triggerConfig)) {
|
if (matchesClearRule(trigger, triggerConfig)) {
|
||||||
List<NotificationRequest> notificationRequests = findAlreadySentNotificationRequests(rule, trigger);
|
List<NotificationRequest> scheduledRequests = notificationRequestService.findNotificationRequestsByRuleIdAndOriginatorEntityIdAndStatus(
|
||||||
if (notificationRequests.isEmpty()) {
|
rule.getTenantId(), rule.getId(), trigger.getOriginatorEntityId(), NotificationRequestStatus.SCHEDULED
|
||||||
return;
|
);
|
||||||
}
|
scheduledRequests.forEach(notificationRequest -> {
|
||||||
|
|
||||||
List<UUID> targets = notificationRequests.stream()
|
|
||||||
.filter(NotificationRequest::isSent)
|
|
||||||
.flatMap(notificationRequest -> notificationRequest.getTargets().stream())
|
|
||||||
.distinct().collect(Collectors.toList());
|
|
||||||
NotificationInfo notificationInfo = constructNotificationInfo(trigger, triggerConfig);
|
|
||||||
submitNotificationRequest(targets, rule, trigger.getOriginatorEntityId(), notificationInfo, 0);
|
|
||||||
|
|
||||||
notificationRequests.forEach(notificationRequest -> {
|
|
||||||
if (notificationRequest.isScheduled()) {
|
|
||||||
notificationCenter.deleteNotificationRequest(rule.getTenantId(), notificationRequest.getId());
|
notificationCenter.deleteNotificationRequest(rule.getTenantId(), notificationRequest.getId());
|
||||||
}
|
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -139,10 +127,6 @@ public class DefaultNotificationRuleProcessor implements NotificationRuleProcess
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<NotificationRequest> findAlreadySentNotificationRequests(NotificationRule rule, NotificationRuleTrigger trigger) {
|
|
||||||
return notificationRequestService.findNotificationRequestsByRuleIdAndOriginatorEntityId(rule.getTenantId(), rule.getId(), trigger.getOriginatorEntityId());
|
|
||||||
}
|
|
||||||
|
|
||||||
private void submitNotificationRequest(List<UUID> targets, NotificationRule rule,
|
private void submitNotificationRequest(List<UUID> targets, NotificationRule rule,
|
||||||
EntityId originatorEntityId, NotificationInfo notificationInfo, int delayInSec) {
|
EntityId originatorEntityId, NotificationInfo notificationInfo, int delayInSec) {
|
||||||
NotificationRequestConfig config = new NotificationRequestConfig();
|
NotificationRequestConfig config = new NotificationRequestConfig();
|
||||||
|
|||||||
@ -274,7 +274,6 @@ public class NotificationRuleApiTest extends AbstractNotificationApiTest {
|
|||||||
Device device = createDevice("Device with alarm", "233");
|
Device device = createDevice("Device with alarm", "233");
|
||||||
NotificationTarget target = createNotificationTarget(tenantAdminUserId);
|
NotificationTarget target = createNotificationTarget(tenantAdminUserId);
|
||||||
defaultNotifications.create(tenantId, DefaultNotifications.newAlarm, target.getId());
|
defaultNotifications.create(tenantId, DefaultNotifications.newAlarm, target.getId());
|
||||||
defaultNotifications.create(tenantId, DefaultNotifications.entityAction, target.getId());
|
|
||||||
notificationRulesCache.evict(tenantId);
|
notificationRulesCache.evict(tenantId);
|
||||||
|
|
||||||
Alarm alarm = new Alarm();
|
Alarm alarm = new Alarm();
|
||||||
@ -287,7 +286,7 @@ public class NotificationRuleApiTest extends AbstractNotificationApiTest {
|
|||||||
.pollDelay(2, TimeUnit.SECONDS)
|
.pollDelay(2, TimeUnit.SECONDS)
|
||||||
.untilAsserted(() -> {
|
.untilAsserted(() -> {
|
||||||
List<Notification> notifications = getMyNotifications(false, 10);
|
List<Notification> notifications = getMyNotifications(false, 10);
|
||||||
assertThat(notifications).hasSize(1).first().matches(notification -> {
|
assertThat(notifications).singleElement().matches(notification -> {
|
||||||
return notification.getType() == NotificationType.ALARM &&
|
return notification.getType() == NotificationType.ALARM &&
|
||||||
notification.getSubject().equals("New alarm 'testAlarm'");
|
notification.getSubject().equals("New alarm 'testAlarm'");
|
||||||
});
|
});
|
||||||
|
|||||||
@ -43,7 +43,7 @@ public interface NotificationRequestService {
|
|||||||
|
|
||||||
List<NotificationRequestId> findNotificationRequestsIdsByStatusAndRuleId(TenantId tenantId, NotificationRequestStatus requestStatus, NotificationRuleId ruleId);
|
List<NotificationRequestId> findNotificationRequestsIdsByStatusAndRuleId(TenantId tenantId, NotificationRequestStatus requestStatus, NotificationRuleId ruleId);
|
||||||
|
|
||||||
List<NotificationRequest> findNotificationRequestsByRuleIdAndOriginatorEntityId(TenantId tenantId, NotificationRuleId ruleId, EntityId originatorEntityId);
|
List<NotificationRequest> findNotificationRequestsByRuleIdAndOriginatorEntityIdAndStatus(TenantId tenantId, NotificationRuleId ruleId, EntityId originatorEntityId, NotificationRequestStatus status);
|
||||||
|
|
||||||
void deleteNotificationRequest(TenantId tenantId, NotificationRequest request);
|
void deleteNotificationRequest(TenantId tenantId, NotificationRequest request);
|
||||||
|
|
||||||
|
|||||||
@ -82,8 +82,8 @@ public class DefaultNotificationRequestService implements NotificationRequestSer
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<NotificationRequest> findNotificationRequestsByRuleIdAndOriginatorEntityId(TenantId tenantId, NotificationRuleId ruleId, EntityId originatorEntityId) {
|
public List<NotificationRequest> findNotificationRequestsByRuleIdAndOriginatorEntityIdAndStatus(TenantId tenantId, NotificationRuleId ruleId, EntityId originatorEntityId, NotificationRequestStatus status) {
|
||||||
return notificationRequestDao.findByRuleIdAndOriginatorEntityId(tenantId, ruleId, originatorEntityId);
|
return notificationRequestDao.findByRuleIdAndOriginatorEntityIdAndStatus(tenantId, ruleId, originatorEntityId, status);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -40,7 +40,7 @@ public interface NotificationRequestDao extends Dao<NotificationRequest> {
|
|||||||
|
|
||||||
List<NotificationRequestId> findIdsByRuleId(TenantId tenantId, NotificationRequestStatus requestStatus, NotificationRuleId ruleId);
|
List<NotificationRequestId> findIdsByRuleId(TenantId tenantId, NotificationRequestStatus requestStatus, NotificationRuleId ruleId);
|
||||||
|
|
||||||
List<NotificationRequest> findByRuleIdAndOriginatorEntityId(TenantId tenantId, NotificationRuleId ruleId, EntityId originatorEntityId);
|
List<NotificationRequest> findByRuleIdAndOriginatorEntityIdAndStatus(TenantId tenantId, NotificationRuleId ruleId, EntityId originatorEntityId, NotificationRequestStatus status);
|
||||||
|
|
||||||
PageData<NotificationRequest> findAllByStatus(NotificationRequestStatus status, PageLink pageLink);
|
PageData<NotificationRequest> findAllByStatus(NotificationRequestStatus status, PageLink pageLink);
|
||||||
|
|
||||||
|
|||||||
@ -73,8 +73,8 @@ public class JpaNotificationRequestDao extends JpaAbstractDao<NotificationReques
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<NotificationRequest> findByRuleIdAndOriginatorEntityId(TenantId tenantId, NotificationRuleId ruleId, EntityId originatorEntityId) {
|
public List<NotificationRequest> findByRuleIdAndOriginatorEntityIdAndStatus(TenantId tenantId, NotificationRuleId ruleId, EntityId originatorEntityId, NotificationRequestStatus status) {
|
||||||
return DaoUtil.convertDataList(notificationRequestRepository.findAllByRuleIdAndOriginatorEntityIdAndOriginatorEntityType(ruleId.getId(), originatorEntityId.getId(), originatorEntityId.getEntityType()));
|
return DaoUtil.convertDataList(notificationRequestRepository.findAllByRuleIdAndOriginatorEntityIdAndOriginatorEntityTypeAndStatus(ruleId.getId(), originatorEntityId.getId(), originatorEntityId.getEntityType(), status));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -54,7 +54,7 @@ public interface NotificationRequestRepository extends JpaRepository<Notificatio
|
|||||||
List<UUID> findAllIdsByStatusAndRuleId(@Param("status") NotificationRequestStatus status,
|
List<UUID> findAllIdsByStatusAndRuleId(@Param("status") NotificationRequestStatus status,
|
||||||
@Param("ruleId") UUID ruleId);
|
@Param("ruleId") UUID ruleId);
|
||||||
|
|
||||||
List<NotificationRequestEntity> findAllByRuleIdAndOriginatorEntityIdAndOriginatorEntityType(UUID ruleId, UUID originatorEntityId, EntityType originatorEntityType);
|
List<NotificationRequestEntity> findAllByRuleIdAndOriginatorEntityIdAndOriginatorEntityTypeAndStatus(UUID ruleId, UUID originatorEntityId, EntityType originatorEntityType, NotificationRequestStatus status);
|
||||||
|
|
||||||
Page<NotificationRequestEntity> findAllByStatus(NotificationRequestStatus status, Pageable pageable);
|
Page<NotificationRequestEntity> findAllByStatus(NotificationRequestStatus status, Pageable pageable);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user