Notification request info
This commit is contained in:
parent
b7f3aef044
commit
89aa75718d
@ -39,8 +39,10 @@ import org.thingsboard.server.common.data.notification.Notification;
|
|||||||
import org.thingsboard.server.common.data.notification.NotificationDeliveryMethod;
|
import org.thingsboard.server.common.data.notification.NotificationDeliveryMethod;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationProcessingContext;
|
import org.thingsboard.server.common.data.notification.NotificationProcessingContext;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequest;
|
import org.thingsboard.server.common.data.notification.NotificationRequest;
|
||||||
|
import org.thingsboard.server.common.data.notification.NotificationRequestInfo;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequestPreview;
|
import org.thingsboard.server.common.data.notification.NotificationRequestPreview;
|
||||||
import org.thingsboard.server.common.data.notification.settings.NotificationSettings;
|
import org.thingsboard.server.common.data.notification.settings.NotificationSettings;
|
||||||
|
import org.thingsboard.server.common.data.notification.targets.NotificationTarget;
|
||||||
import org.thingsboard.server.common.data.notification.template.DeliveryMethodNotificationTemplate;
|
import org.thingsboard.server.common.data.notification.template.DeliveryMethodNotificationTemplate;
|
||||||
import org.thingsboard.server.common.data.notification.template.NotificationTemplate;
|
import org.thingsboard.server.common.data.notification.template.NotificationTemplate;
|
||||||
import org.thingsboard.server.common.data.page.PageData;
|
import org.thingsboard.server.common.data.page.PageData;
|
||||||
@ -56,6 +58,7 @@ import org.thingsboard.server.service.security.permission.Operation;
|
|||||||
import org.thingsboard.server.service.security.permission.Resource;
|
import org.thingsboard.server.service.security.permission.Resource;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -147,10 +150,16 @@ public class NotificationController extends BaseController {
|
|||||||
}));
|
}));
|
||||||
preview.setProcessedTemplates(processedTemplates);
|
preview.setProcessedTemplates(processedTemplates);
|
||||||
|
|
||||||
Map<UUID, Integer> recipientsCountByTarget = notificationRequest.getTargets().stream()
|
Map<String, Integer> recipientsCountByTarget = new HashMap<>();
|
||||||
.collect(Collectors.toMap(id -> id, targetId -> {
|
notificationRequest.getTargets().forEach(targetId -> {
|
||||||
return notificationTargetService.countRecipientsForNotificationTarget(user.getTenantId(), new NotificationTargetId(targetId));
|
NotificationTarget notificationTarget = notificationTargetService.findNotificationTargetById(user.getTenantId(), new NotificationTargetId(targetId));
|
||||||
}));
|
if (notificationTarget == null) {
|
||||||
|
throw new IllegalArgumentException("Notification target with id " + targetId + " not found");
|
||||||
|
}
|
||||||
|
|
||||||
|
int recipientsCount = notificationTargetService.countRecipientsForNotificationTargetConfig(user.getTenantId(), notificationTarget.getConfiguration());
|
||||||
|
recipientsCountByTarget.put(notificationTarget.getName(), recipientsCount);
|
||||||
|
});
|
||||||
preview.setRecipientsCountByTarget(recipientsCountByTarget);
|
preview.setRecipientsCountByTarget(recipientsCountByTarget);
|
||||||
preview.setTotalRecipientsCount(recipientsCountByTarget.values().stream().mapToInt(Integer::intValue).sum());
|
preview.setTotalRecipientsCount(recipientsCountByTarget.values().stream().mapToInt(Integer::intValue).sum());
|
||||||
|
|
||||||
@ -159,21 +168,21 @@ public class NotificationController extends BaseController {
|
|||||||
|
|
||||||
@GetMapping("/notification/request/{id}")
|
@GetMapping("/notification/request/{id}")
|
||||||
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
|
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
|
||||||
public NotificationRequest getNotificationRequestById(@PathVariable UUID id) throws ThingsboardException {
|
public NotificationRequestInfo getNotificationRequestById(@PathVariable UUID id) throws ThingsboardException {
|
||||||
NotificationRequestId notificationRequestId = new NotificationRequestId(id);
|
NotificationRequestId notificationRequestId = new NotificationRequestId(id);
|
||||||
return checkEntityId(notificationRequestId, notificationRequestService::findNotificationRequestById, Operation.READ);
|
return checkEntityId(notificationRequestId, notificationRequestService::findNotificationRequestInfoById, Operation.READ);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/notification/requests")
|
@GetMapping("/notification/requests")
|
||||||
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
|
@PreAuthorize("hasAnyAuthority('SYS_ADMIN', 'TENANT_ADMIN')")
|
||||||
public PageData<NotificationRequest> getNotificationRequests(@RequestParam int pageSize,
|
public PageData<NotificationRequestInfo> getNotificationRequests(@RequestParam int pageSize,
|
||||||
@RequestParam int page,
|
@RequestParam int page,
|
||||||
@RequestParam(required = false) String textSearch,
|
@RequestParam(required = false) String textSearch,
|
||||||
@RequestParam(required = false) String sortProperty,
|
@RequestParam(required = false) String sortProperty,
|
||||||
@RequestParam(required = false) String sortOrder,
|
@RequestParam(required = false) String sortOrder,
|
||||||
@AuthenticationPrincipal SecurityUser user) throws ThingsboardException {
|
@AuthenticationPrincipal SecurityUser user) throws ThingsboardException {
|
||||||
PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder);
|
PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder);
|
||||||
return notificationRequestService.findNotificationRequestsByTenantIdAndOriginatorType(user.getTenantId(), EntityType.USER, pageLink);
|
return notificationRequestService.findNotificationRequestsInfosByTenantIdAndOriginatorType(user.getTenantId(), EntityType.USER, pageLink);
|
||||||
}
|
}
|
||||||
|
|
||||||
@DeleteMapping("/notification/request/{id}")
|
@DeleteMapping("/notification/request/{id}")
|
||||||
|
|||||||
@ -32,6 +32,7 @@ import org.thingsboard.server.common.data.notification.Notification;
|
|||||||
import org.thingsboard.server.common.data.notification.NotificationDeliveryMethod;
|
import org.thingsboard.server.common.data.notification.NotificationDeliveryMethod;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequest;
|
import org.thingsboard.server.common.data.notification.NotificationRequest;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequestConfig;
|
import org.thingsboard.server.common.data.notification.NotificationRequestConfig;
|
||||||
|
import org.thingsboard.server.common.data.notification.NotificationRequestInfo;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequestStats;
|
import org.thingsboard.server.common.data.notification.NotificationRequestStats;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationType;
|
import org.thingsboard.server.common.data.notification.NotificationType;
|
||||||
import org.thingsboard.server.common.data.notification.info.UserOriginatedNotificationInfo;
|
import org.thingsboard.server.common.data.notification.info.UserOriginatedNotificationInfo;
|
||||||
@ -177,8 +178,13 @@ public abstract class AbstractNotificationApiTest extends AbstractControllerTest
|
|||||||
return Pair.of(user, wsClient);
|
return Pair.of(user, wsClient);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected NotificationRequest findNotificationRequest(NotificationRequestId id) throws Exception {
|
protected NotificationRequestInfo findNotificationRequest(NotificationRequestId id) throws Exception {
|
||||||
return doGet("/api/notification/request/" + id, NotificationRequest.class);
|
return doGet("/api/notification/request/" + id, NotificationRequestInfo.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected PageData<NotificationRequestInfo> findNotificationRequests() throws Exception {
|
||||||
|
PageLink pageLink = new PageLink(10);
|
||||||
|
return doGetTypedWithPageLink("/api/notification/requests?", new TypeReference<PageData<NotificationRequestInfo>>() {}, pageLink);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void deleteNotificationRequest(NotificationRequestId id) throws Exception {
|
protected void deleteNotificationRequest(NotificationRequestId id) throws Exception {
|
||||||
|
|||||||
@ -29,6 +29,7 @@ import org.thingsboard.server.common.data.notification.Notification;
|
|||||||
import org.thingsboard.server.common.data.notification.NotificationDeliveryMethod;
|
import org.thingsboard.server.common.data.notification.NotificationDeliveryMethod;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequest;
|
import org.thingsboard.server.common.data.notification.NotificationRequest;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequestConfig;
|
import org.thingsboard.server.common.data.notification.NotificationRequestConfig;
|
||||||
|
import org.thingsboard.server.common.data.notification.NotificationRequestInfo;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequestPreview;
|
import org.thingsboard.server.common.data.notification.NotificationRequestPreview;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequestStats;
|
import org.thingsboard.server.common.data.notification.NotificationRequestStats;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequestStatus;
|
import org.thingsboard.server.common.data.notification.NotificationRequestStatus;
|
||||||
@ -63,6 +64,7 @@ import java.util.Collections;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -424,8 +426,8 @@ public class NotificationApiTest extends AbstractNotificationApiTest {
|
|||||||
notificationRequest.setAdditionalConfig(new NotificationRequestConfig());
|
notificationRequest.setAdditionalConfig(new NotificationRequestConfig());
|
||||||
|
|
||||||
NotificationRequestPreview preview = doPost("/api/notification/request/preview", notificationRequest, NotificationRequestPreview.class);
|
NotificationRequestPreview preview = doPost("/api/notification/request/preview", notificationRequest, NotificationRequestPreview.class);
|
||||||
assertThat(preview.getRecipientsCountByTarget().get(target1.getUuidId())).isEqualTo(1);
|
assertThat(preview.getRecipientsCountByTarget().get(target1.getName())).isEqualTo(1);
|
||||||
assertThat(preview.getRecipientsCountByTarget().get(target2.getUuidId())).isEqualTo(customerUsersCount);
|
assertThat(preview.getRecipientsCountByTarget().get(target2.getName())).isEqualTo(customerUsersCount);
|
||||||
assertThat(preview.getTotalRecipientsCount()).isEqualTo(1 + customerUsersCount);
|
assertThat(preview.getTotalRecipientsCount()).isEqualTo(1 + customerUsersCount);
|
||||||
|
|
||||||
Map<NotificationDeliveryMethod, DeliveryMethodNotificationTemplate> processedTemplates = preview.getProcessedTemplates();
|
Map<NotificationDeliveryMethod, DeliveryMethodNotificationTemplate> processedTemplates = preview.getProcessedTemplates();
|
||||||
@ -461,6 +463,21 @@ public class NotificationApiTest extends AbstractNotificationApiTest {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testNotificationRequestInfo() throws Exception {
|
||||||
|
NotificationDeliveryMethod[] deliveryMethods = new NotificationDeliveryMethod[]{
|
||||||
|
NotificationDeliveryMethod.PUSH, NotificationDeliveryMethod.EMAIL
|
||||||
|
};
|
||||||
|
NotificationTemplate template = createNotificationTemplate(NotificationType.GENERAL, "Test subject", "Test text", deliveryMethods);
|
||||||
|
NotificationTarget target = createNotificationTarget(tenantAdminUserId);
|
||||||
|
NotificationRequest request = submitNotificationRequest(List.of(target.getId()), template.getId(), 0);
|
||||||
|
|
||||||
|
NotificationRequestInfo requestInfo = findNotificationRequests().getData().get(0);
|
||||||
|
assertThat(requestInfo.getId()).isEqualTo(request.getId());
|
||||||
|
assertThat(requestInfo.getTemplateName()).isEqualTo(template.getName());
|
||||||
|
assertThat(requestInfo.getDeliveryMethods()).containsOnly(deliveryMethods);
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNotificationRequestStats() throws Exception {
|
public void testNotificationRequestStats() throws Exception {
|
||||||
wsClient.subscribeForUnreadNotifications(10);
|
wsClient.subscribeForUnreadNotifications(10);
|
||||||
|
|||||||
@ -21,6 +21,7 @@ import org.thingsboard.server.common.data.id.NotificationRequestId;
|
|||||||
import org.thingsboard.server.common.data.id.NotificationRuleId;
|
import org.thingsboard.server.common.data.id.NotificationRuleId;
|
||||||
import org.thingsboard.server.common.data.id.TenantId;
|
import org.thingsboard.server.common.data.id.TenantId;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequest;
|
import org.thingsboard.server.common.data.notification.NotificationRequest;
|
||||||
|
import org.thingsboard.server.common.data.notification.NotificationRequestInfo;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequestStats;
|
import org.thingsboard.server.common.data.notification.NotificationRequestStats;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequestStatus;
|
import org.thingsboard.server.common.data.notification.NotificationRequestStatus;
|
||||||
import org.thingsboard.server.common.data.page.PageData;
|
import org.thingsboard.server.common.data.page.PageData;
|
||||||
@ -34,8 +35,12 @@ public interface NotificationRequestService {
|
|||||||
|
|
||||||
NotificationRequest findNotificationRequestById(TenantId tenantId, NotificationRequestId id);
|
NotificationRequest findNotificationRequestById(TenantId tenantId, NotificationRequestId id);
|
||||||
|
|
||||||
|
NotificationRequestInfo findNotificationRequestInfoById(TenantId tenantId, NotificationRequestId id);
|
||||||
|
|
||||||
PageData<NotificationRequest> findNotificationRequestsByTenantIdAndOriginatorType(TenantId tenantId, EntityType originatorType, PageLink pageLink);
|
PageData<NotificationRequest> findNotificationRequestsByTenantIdAndOriginatorType(TenantId tenantId, EntityType originatorType, PageLink pageLink);
|
||||||
|
|
||||||
|
PageData<NotificationRequestInfo> findNotificationRequestsInfosByTenantIdAndOriginatorType(TenantId tenantId, EntityType originatorType, PageLink pageLink);
|
||||||
|
|
||||||
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> findNotificationRequestsByRuleIdAndOriginatorEntityId(TenantId tenantId, NotificationRuleId ruleId, EntityId originatorEntityId);
|
||||||
|
|||||||
@ -34,7 +34,7 @@ public interface NotificationTargetService {
|
|||||||
|
|
||||||
PageData<User> findRecipientsForNotificationTarget(TenantId tenantId, CustomerId customerId, NotificationTargetId targetId, PageLink pageLink);
|
PageData<User> findRecipientsForNotificationTarget(TenantId tenantId, CustomerId customerId, NotificationTargetId targetId, PageLink pageLink);
|
||||||
|
|
||||||
int countRecipientsForNotificationTarget(TenantId tenantId, NotificationTargetId targetId);
|
int countRecipientsForNotificationTargetConfig(TenantId tenantId, NotificationTargetConfig targetConfig);
|
||||||
|
|
||||||
PageData<User> findRecipientsForNotificationTargetConfig(TenantId tenantId, CustomerId customerId, NotificationTargetConfig targetConfig, PageLink pageLink);
|
PageData<User> findRecipientsForNotificationTargetConfig(TenantId tenantId, CustomerId customerId, NotificationTargetConfig targetConfig, PageLink pageLink);
|
||||||
|
|
||||||
|
|||||||
@ -63,6 +63,19 @@ public class NotificationRequest extends BaseData<NotificationRequestId> impleme
|
|||||||
|
|
||||||
private NotificationRequestStats stats;
|
private NotificationRequestStats stats;
|
||||||
|
|
||||||
|
public NotificationRequest(NotificationRequest other) {
|
||||||
|
super(other);
|
||||||
|
this.tenantId = other.tenantId;
|
||||||
|
this.targets = other.targets;
|
||||||
|
this.templateId = other.templateId;
|
||||||
|
this.info = other.info;
|
||||||
|
this.additionalConfig = other.additionalConfig;
|
||||||
|
this.originatorEntityId = other.originatorEntityId;
|
||||||
|
this.ruleId = other.ruleId;
|
||||||
|
this.status = other.status;
|
||||||
|
this.stats = other.stats;
|
||||||
|
}
|
||||||
|
|
||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
@Override
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
|
|||||||
@ -0,0 +1,38 @@
|
|||||||
|
/**
|
||||||
|
* Copyright © 2016-2022 The Thingsboard Authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.thingsboard.server.common.data.notification;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@NoArgsConstructor
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class NotificationRequestInfo extends NotificationRequest {
|
||||||
|
|
||||||
|
private String templateName;
|
||||||
|
private List<NotificationDeliveryMethod> deliveryMethods;
|
||||||
|
|
||||||
|
public NotificationRequestInfo(NotificationRequest request, String templateName, List<NotificationDeliveryMethod> deliveryMethods) {
|
||||||
|
super(request);
|
||||||
|
this.templateName = templateName;
|
||||||
|
this.deliveryMethods = deliveryMethods;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -19,13 +19,12 @@ import lombok.Data;
|
|||||||
import org.thingsboard.server.common.data.notification.template.DeliveryMethodNotificationTemplate;
|
import org.thingsboard.server.common.data.notification.template.DeliveryMethodNotificationTemplate;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
public class NotificationRequestPreview {
|
public class NotificationRequestPreview {
|
||||||
|
|
||||||
private Map<NotificationDeliveryMethod, DeliveryMethodNotificationTemplate> processedTemplates;
|
private Map<NotificationDeliveryMethod, DeliveryMethodNotificationTemplate> processedTemplates;
|
||||||
private int totalRecipientsCount;
|
private int totalRecipientsCount;
|
||||||
private Map<UUID, Integer> recipientsCountByTarget;
|
private Map<String, Integer> recipientsCountByTarget;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -103,6 +103,21 @@ public class NotificationRequestEntity extends BaseSqlEntity<NotificationRequest
|
|||||||
setStats(toJson(notificationRequest.getStats()));
|
setStats(toJson(notificationRequest.getStats()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public NotificationRequestEntity(NotificationRequestEntity other) {
|
||||||
|
this.id = other.id;
|
||||||
|
this.createdTime = other.createdTime;
|
||||||
|
this.tenantId = other.tenantId;
|
||||||
|
this.targets = other.targets;
|
||||||
|
this.templateId = other.templateId;
|
||||||
|
this.info = other.info;
|
||||||
|
this.additionalConfig = other.additionalConfig;
|
||||||
|
this.originatorEntityId = other.originatorEntityId;
|
||||||
|
this.originatorEntityType = other.originatorEntityType;
|
||||||
|
this.ruleId = other.ruleId;
|
||||||
|
this.status = other.status;
|
||||||
|
this.stats = other.stats;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public NotificationRequest toData() {
|
public NotificationRequest toData() {
|
||||||
NotificationRequest notificationRequest = new NotificationRequest();
|
NotificationRequest notificationRequest = new NotificationRequest();
|
||||||
|
|||||||
@ -0,0 +1,51 @@
|
|||||||
|
/**
|
||||||
|
* Copyright © 2016-2022 The Thingsboard Authors
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package org.thingsboard.server.dao.model.sql;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import org.thingsboard.server.common.data.notification.NotificationDeliveryMethod;
|
||||||
|
import org.thingsboard.server.common.data.notification.NotificationRequestInfo;
|
||||||
|
import org.thingsboard.server.common.data.notification.template.NotificationTemplateConfig;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class NotificationRequestInfoEntity extends NotificationRequestEntity {
|
||||||
|
|
||||||
|
private String templateName;
|
||||||
|
private JsonNode templateConfig;
|
||||||
|
|
||||||
|
public NotificationRequestInfoEntity(NotificationRequestEntity requestEntity, String templateName, Object templateConfig) {
|
||||||
|
super(requestEntity);
|
||||||
|
this.templateName = templateName;
|
||||||
|
this.templateConfig = (JsonNode) templateConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NotificationRequestInfo toData() {
|
||||||
|
List<NotificationDeliveryMethod> deliveryMethods = fromJson(templateConfig, NotificationTemplateConfig.class)
|
||||||
|
.getDeliveryMethodsTemplates().entrySet().stream()
|
||||||
|
.filter(entry -> entry.getValue().isEnabled())
|
||||||
|
.map(Map.Entry::getKey).collect(Collectors.toList());
|
||||||
|
return new NotificationRequestInfo(super.toData(), templateName, deliveryMethods);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -24,6 +24,7 @@ import org.thingsboard.server.common.data.id.NotificationRequestId;
|
|||||||
import org.thingsboard.server.common.data.id.NotificationRuleId;
|
import org.thingsboard.server.common.data.id.NotificationRuleId;
|
||||||
import org.thingsboard.server.common.data.id.TenantId;
|
import org.thingsboard.server.common.data.id.TenantId;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequest;
|
import org.thingsboard.server.common.data.notification.NotificationRequest;
|
||||||
|
import org.thingsboard.server.common.data.notification.NotificationRequestInfo;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequestStats;
|
import org.thingsboard.server.common.data.notification.NotificationRequestStats;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequestStatus;
|
import org.thingsboard.server.common.data.notification.NotificationRequestStatus;
|
||||||
import org.thingsboard.server.common.data.page.PageData;
|
import org.thingsboard.server.common.data.page.PageData;
|
||||||
@ -52,11 +53,21 @@ public class DefaultNotificationRequestService implements NotificationRequestSer
|
|||||||
return notificationRequestDao.findById(tenantId, id.getId());
|
return notificationRequestDao.findById(tenantId, id.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NotificationRequestInfo findNotificationRequestInfoById(TenantId tenantId, NotificationRequestId id) {
|
||||||
|
return notificationRequestDao.findInfoById(tenantId, id);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageData<NotificationRequest> findNotificationRequestsByTenantIdAndOriginatorType(TenantId tenantId, EntityType originatorType, PageLink pageLink) {
|
public PageData<NotificationRequest> findNotificationRequestsByTenantIdAndOriginatorType(TenantId tenantId, EntityType originatorType, PageLink pageLink) {
|
||||||
return notificationRequestDao.findByTenantIdAndOriginatorTypeAndPageLink(tenantId, originatorType, pageLink);
|
return notificationRequestDao.findByTenantIdAndOriginatorTypeAndPageLink(tenantId, originatorType, pageLink);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageData<NotificationRequestInfo> findNotificationRequestsInfosByTenantIdAndOriginatorType(TenantId tenantId, EntityType originatorType, PageLink pageLink) {
|
||||||
|
return notificationRequestDao.findInfosByTenantIdAndOriginatorTypeAndPageLink(tenantId, originatorType, pageLink);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<NotificationRequestId> findNotificationRequestsIdsByStatusAndRuleId(TenantId tenantId, NotificationRequestStatus requestStatus, NotificationRuleId ruleId) {
|
public List<NotificationRequestId> findNotificationRequestsIdsByStatusAndRuleId(TenantId tenantId, NotificationRequestStatus requestStatus, NotificationRuleId ruleId) {
|
||||||
return notificationRequestDao.findIdsByRuleId(tenantId, requestStatus, ruleId);
|
return notificationRequestDao.findIdsByRuleId(tenantId, requestStatus, ruleId);
|
||||||
|
|||||||
@ -70,8 +70,8 @@ public class DefaultNotificationTargetService implements NotificationTargetServi
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int countRecipientsForNotificationTarget(TenantId tenantId, NotificationTargetId targetId) {
|
public int countRecipientsForNotificationTargetConfig(TenantId tenantId, NotificationTargetConfig targetConfig) {
|
||||||
return (int) findRecipientsForNotificationTarget(tenantId, null, targetId, new PageLink(1)).getTotalElements();
|
return (int) findRecipientsForNotificationTargetConfig(tenantId, null, targetConfig, new PageLink(1)).getTotalElements();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -23,6 +23,7 @@ import org.thingsboard.server.common.data.id.NotificationTargetId;
|
|||||||
import org.thingsboard.server.common.data.id.NotificationTemplateId;
|
import org.thingsboard.server.common.data.id.NotificationTemplateId;
|
||||||
import org.thingsboard.server.common.data.id.TenantId;
|
import org.thingsboard.server.common.data.id.TenantId;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequest;
|
import org.thingsboard.server.common.data.notification.NotificationRequest;
|
||||||
|
import org.thingsboard.server.common.data.notification.NotificationRequestInfo;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequestStats;
|
import org.thingsboard.server.common.data.notification.NotificationRequestStats;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequestStatus;
|
import org.thingsboard.server.common.data.notification.NotificationRequestStatus;
|
||||||
import org.thingsboard.server.common.data.page.PageData;
|
import org.thingsboard.server.common.data.page.PageData;
|
||||||
@ -35,6 +36,8 @@ public interface NotificationRequestDao extends Dao<NotificationRequest> {
|
|||||||
|
|
||||||
PageData<NotificationRequest> findByTenantIdAndOriginatorTypeAndPageLink(TenantId tenantId, EntityType originatorType, PageLink pageLink);
|
PageData<NotificationRequest> findByTenantIdAndOriginatorTypeAndPageLink(TenantId tenantId, EntityType originatorType, PageLink pageLink);
|
||||||
|
|
||||||
|
PageData<NotificationRequestInfo> findInfosByTenantIdAndOriginatorTypeAndPageLink(TenantId tenantId, EntityType originatorType, PageLink pageLink);
|
||||||
|
|
||||||
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> findByRuleIdAndOriginatorEntityId(TenantId tenantId, NotificationRuleId ruleId, EntityId originatorEntityId);
|
||||||
@ -49,4 +52,6 @@ public interface NotificationRequestDao extends Dao<NotificationRequest> {
|
|||||||
|
|
||||||
int removeAllByCreatedTimeBefore(long ts);
|
int removeAllByCreatedTimeBefore(long ts);
|
||||||
|
|
||||||
|
NotificationRequestInfo findInfoById(TenantId tenantId, NotificationRequestId id);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,12 +27,14 @@ import org.thingsboard.server.common.data.id.NotificationTargetId;
|
|||||||
import org.thingsboard.server.common.data.id.NotificationTemplateId;
|
import org.thingsboard.server.common.data.id.NotificationTemplateId;
|
||||||
import org.thingsboard.server.common.data.id.TenantId;
|
import org.thingsboard.server.common.data.id.TenantId;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequest;
|
import org.thingsboard.server.common.data.notification.NotificationRequest;
|
||||||
|
import org.thingsboard.server.common.data.notification.NotificationRequestInfo;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequestStats;
|
import org.thingsboard.server.common.data.notification.NotificationRequestStats;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequestStatus;
|
import org.thingsboard.server.common.data.notification.NotificationRequestStatus;
|
||||||
import org.thingsboard.server.common.data.page.PageData;
|
import org.thingsboard.server.common.data.page.PageData;
|
||||||
import org.thingsboard.server.common.data.page.PageLink;
|
import org.thingsboard.server.common.data.page.PageLink;
|
||||||
import org.thingsboard.server.dao.DaoUtil;
|
import org.thingsboard.server.dao.DaoUtil;
|
||||||
import org.thingsboard.server.dao.model.sql.NotificationRequestEntity;
|
import org.thingsboard.server.dao.model.sql.NotificationRequestEntity;
|
||||||
|
import org.thingsboard.server.dao.model.sql.NotificationRequestInfoEntity;
|
||||||
import org.thingsboard.server.dao.notification.NotificationRequestDao;
|
import org.thingsboard.server.dao.notification.NotificationRequestDao;
|
||||||
import org.thingsboard.server.dao.sql.JpaAbstractDao;
|
import org.thingsboard.server.dao.sql.JpaAbstractDao;
|
||||||
import org.thingsboard.server.dao.util.SqlDao;
|
import org.thingsboard.server.dao.util.SqlDao;
|
||||||
@ -52,7 +54,14 @@ public class JpaNotificationRequestDao extends JpaAbstractDao<NotificationReques
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PageData<NotificationRequest> findByTenantIdAndOriginatorTypeAndPageLink(TenantId tenantId, EntityType originatorType, PageLink pageLink) {
|
public PageData<NotificationRequest> findByTenantIdAndOriginatorTypeAndPageLink(TenantId tenantId, EntityType originatorType, PageLink pageLink) {
|
||||||
return DaoUtil.toPageData(notificationRequestRepository.findByTenantIdAndOriginatorEntityType(getId(tenantId, true), originatorType, DaoUtil.toPageable(pageLink)));
|
return DaoUtil.toPageData(notificationRequestRepository.findByTenantIdAndOriginatorEntityType(getId(tenantId, true),
|
||||||
|
originatorType, DaoUtil.toPageable(pageLink)));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public PageData<NotificationRequestInfo> findInfosByTenantIdAndOriginatorTypeAndPageLink(TenantId tenantId, EntityType originatorType, PageLink pageLink) {
|
||||||
|
return DaoUtil.pageToPageData(notificationRequestRepository.findInfosByTenantIdAndOriginatorEntityType(getId(tenantId, true),
|
||||||
|
originatorType, DaoUtil.toPageable(pageLink))).mapData(NotificationRequestInfoEntity::toData);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -91,6 +100,12 @@ public class JpaNotificationRequestDao extends JpaAbstractDao<NotificationReques
|
|||||||
return notificationRequestRepository.deleteAllByCreatedTimeBefore(ts);
|
return notificationRequestRepository.deleteAllByCreatedTimeBefore(ts);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public NotificationRequestInfo findInfoById(TenantId tenantId, NotificationRequestId id) {
|
||||||
|
NotificationRequestInfoEntity info = notificationRequestRepository.findInfoById(id.getId());
|
||||||
|
return info != null ? info.toData() : null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Class<NotificationRequestEntity> getEntityClass() {
|
protected Class<NotificationRequestEntity> getEntityClass() {
|
||||||
return NotificationRequestEntity.class;
|
return NotificationRequestEntity.class;
|
||||||
|
|||||||
@ -27,6 +27,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import org.thingsboard.server.common.data.EntityType;
|
import org.thingsboard.server.common.data.EntityType;
|
||||||
import org.thingsboard.server.common.data.notification.NotificationRequestStatus;
|
import org.thingsboard.server.common.data.notification.NotificationRequestStatus;
|
||||||
import org.thingsboard.server.dao.model.sql.NotificationRequestEntity;
|
import org.thingsboard.server.dao.model.sql.NotificationRequestEntity;
|
||||||
|
import org.thingsboard.server.dao.model.sql.NotificationRequestInfoEntity;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@ -34,8 +35,19 @@ import java.util.UUID;
|
|||||||
@Repository
|
@Repository
|
||||||
public interface NotificationRequestRepository extends JpaRepository<NotificationRequestEntity, UUID> {
|
public interface NotificationRequestRepository extends JpaRepository<NotificationRequestEntity, UUID> {
|
||||||
|
|
||||||
|
String REQUEST_INFO_QUERY = "SELECT new org.thingsboard.server.dao.model.sql.NotificationRequestInfoEntity(r, t.name, t.configuration) " +
|
||||||
|
"FROM NotificationRequestEntity r INNER JOIN NotificationTemplateEntity t ON r.templateId = t.id";
|
||||||
|
|
||||||
Page<NotificationRequestEntity> findByTenantIdAndOriginatorEntityType(UUID tenantId, EntityType originatorType, Pageable pageable);
|
Page<NotificationRequestEntity> findByTenantIdAndOriginatorEntityType(UUID tenantId, EntityType originatorType, Pageable pageable);
|
||||||
|
|
||||||
|
@Query(REQUEST_INFO_QUERY + " WHERE r.tenantId = :tenantId AND r.originatorEntityType = :originatorType")
|
||||||
|
Page<NotificationRequestInfoEntity> findInfosByTenantIdAndOriginatorEntityType(@Param("tenantId") UUID tenantId,
|
||||||
|
@Param("originatorType") EntityType originatorType,
|
||||||
|
Pageable pageable);
|
||||||
|
|
||||||
|
@Query(REQUEST_INFO_QUERY + " WHERE r.id = :id")
|
||||||
|
NotificationRequestInfoEntity findInfoById(@Param("id") UUID id);
|
||||||
|
|
||||||
@Query("SELECT r.id FROM NotificationRequestEntity r WHERE r.status = :status AND r.ruleId = :ruleId")
|
@Query("SELECT r.id FROM NotificationRequestEntity r WHERE r.status = :status AND r.ruleId = :ruleId")
|
||||||
List<UUID> findAllIdsByStatusAndRuleId(@Param("status") NotificationRequestStatus status,
|
List<UUID> findAllIdsByStatusAndRuleId(@Param("status") NotificationRequestStatus status,
|
||||||
@Param("ruleId") UUID ruleId);
|
@Param("ruleId") UUID ruleId);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user