added TbEdgeService
This commit is contained in:
parent
8cde2ac848
commit
1bd4e6e3bf
@ -550,8 +550,7 @@ public class AssetController extends BaseController {
|
||||
@PostMapping("/asset/bulk_import")
|
||||
public BulkImportResult<Asset> processAssetsBulkImport(@RequestBody BulkImportRequest request) throws Exception {
|
||||
SecurityUser user = getCurrentUser();
|
||||
return assetBulkImportService.processBulkImport(request, user, importedAssetInfo -> {
|
||||
});
|
||||
return assetBulkImportService.processBulkImport(request, user);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -794,8 +794,7 @@ public class DeviceController extends BaseController {
|
||||
public BulkImportResult<Device> processDevicesBulkImport(@RequestBody BulkImportRequest request) throws
|
||||
Exception {
|
||||
SecurityUser user = getCurrentUser();
|
||||
return deviceBulkImportService.processBulkImport(request, user, importedDeviceInfo -> {
|
||||
});
|
||||
return deviceBulkImportService.processBulkImport(request, user);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -34,10 +34,7 @@ import org.springframework.web.bind.annotation.ResponseStatus;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.thingsboard.server.common.data.Customer;
|
||||
import org.thingsboard.server.common.data.EntitySubtype;
|
||||
import org.thingsboard.server.common.data.EntityType;
|
||||
import org.thingsboard.server.common.data.audit.ActionType;
|
||||
import org.thingsboard.server.common.data.edge.Edge;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
|
||||
import org.thingsboard.server.common.data.edge.EdgeInfo;
|
||||
import org.thingsboard.server.common.data.edge.EdgeSearchQuery;
|
||||
import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
|
||||
@ -48,20 +45,19 @@ import org.thingsboard.server.common.data.id.RuleChainId;
|
||||
import org.thingsboard.server.common.data.id.TenantId;
|
||||
import org.thingsboard.server.common.data.page.PageData;
|
||||
import org.thingsboard.server.common.data.page.PageLink;
|
||||
import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent;
|
||||
import org.thingsboard.server.common.data.rule.RuleChain;
|
||||
import org.thingsboard.server.dao.exception.DataValidationException;
|
||||
import org.thingsboard.server.dao.exception.IncorrectParameterException;
|
||||
import org.thingsboard.server.dao.model.ModelConstants;
|
||||
import org.thingsboard.server.queue.util.TbCoreComponent;
|
||||
import org.thingsboard.server.service.edge.EdgeBulkImportService;
|
||||
import org.thingsboard.server.service.entitiy.edge.TbEdgeService;
|
||||
import org.thingsboard.server.service.importing.BulkImportRequest;
|
||||
import org.thingsboard.server.service.importing.BulkImportResult;
|
||||
import org.thingsboard.server.service.security.model.SecurityUser;
|
||||
import org.thingsboard.server.service.security.permission.Operation;
|
||||
import org.thingsboard.server.service.security.permission.Resource;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
@ -90,6 +86,7 @@ import static org.thingsboard.server.controller.ControllerConstants.UUID_WIKI_LI
|
||||
@RequiredArgsConstructor
|
||||
public class EdgeController extends BaseController {
|
||||
private final EdgeBulkImportService edgeBulkImportService;
|
||||
private final TbEdgeService tbEdgeService;
|
||||
|
||||
public static final String EDGE_ID = "edgeId";
|
||||
public static final String EDGE_SECURITY_CHECK = "If the user has the authority of 'Tenant Administrator', the server checks that the edge is owned by the same tenant. " +
|
||||
@ -151,7 +148,6 @@ public class EdgeController extends BaseController {
|
||||
@ResponseBody
|
||||
public Edge saveEdge(@ApiParam(value = "A JSON value representing the edge.", required = true)
|
||||
@RequestBody Edge edge) throws ThingsboardException {
|
||||
try {
|
||||
TenantId tenantId = getCurrentUser().getTenantId();
|
||||
edge.setTenantId(tenantId);
|
||||
boolean created = edge.getId() == null;
|
||||
@ -166,31 +162,9 @@ public class EdgeController extends BaseController {
|
||||
|
||||
Operation operation = created ? Operation.CREATE : Operation.WRITE;
|
||||
|
||||
accessControlService.checkPermission(getCurrentUser(), Resource.EDGE, operation,
|
||||
edge.getId(), edge);
|
||||
accessControlService.checkPermission(getCurrentUser(), Resource.EDGE, operation, edge.getId(), edge);
|
||||
|
||||
Edge savedEdge = checkNotNull(edgeService.saveEdge(edge));
|
||||
onEdgeCreatedOrUpdated(tenantId, savedEdge, edgeTemplateRootRuleChain, !created, getCurrentUser());
|
||||
|
||||
return savedEdge;
|
||||
} catch (Exception e) {
|
||||
logEntityAction(emptyId(EntityType.EDGE), edge,
|
||||
null, edge.getId() == null ? ActionType.ADDED : ActionType.UPDATED, e);
|
||||
throw handleException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private void onEdgeCreatedOrUpdated(TenantId tenantId, Edge edge, RuleChain edgeTemplateRootRuleChain, boolean updated, SecurityUser user) throws IOException, ThingsboardException {
|
||||
if (!updated) {
|
||||
ruleChainService.assignRuleChainToEdge(tenantId, edgeTemplateRootRuleChain.getId(), edge.getId());
|
||||
edgeNotificationService.setEdgeRootRuleChain(tenantId, edge, edgeTemplateRootRuleChain.getId());
|
||||
edgeService.assignDefaultRuleChainsToEdge(tenantId, edge.getId());
|
||||
}
|
||||
|
||||
tbClusterService.broadcastEntityStateChangeEvent(edge.getTenantId(), edge.getId(),
|
||||
updated ? ComponentLifecycleEvent.UPDATED : ComponentLifecycleEvent.CREATED);
|
||||
|
||||
logEntityAction(user, edge.getId(), edge, null, updated ? ActionType.UPDATED : ActionType.ADDED, null);
|
||||
return tbEdgeService.saveEdge(edge, edgeTemplateRootRuleChain, getCurrentUser());
|
||||
}
|
||||
|
||||
@ApiOperation(value = "Delete edge (deleteEdge)",
|
||||
@ -201,27 +175,9 @@ public class EdgeController extends BaseController {
|
||||
public void deleteEdge(@ApiParam(value = EDGE_ID_PARAM_DESCRIPTION, required = true)
|
||||
@PathVariable(EDGE_ID) String strEdgeId) throws ThingsboardException {
|
||||
checkParameter(EDGE_ID, strEdgeId);
|
||||
try {
|
||||
EdgeId edgeId = new EdgeId(toUUID(strEdgeId));
|
||||
Edge edge = checkEdgeId(edgeId, Operation.DELETE);
|
||||
edgeService.deleteEdge(getTenantId(), edgeId);
|
||||
|
||||
tbClusterService.broadcastEntityStateChangeEvent(getTenantId(), edgeId,
|
||||
ComponentLifecycleEvent.DELETED);
|
||||
|
||||
logEntityAction(edgeId, edge,
|
||||
null,
|
||||
ActionType.DELETED, null, strEdgeId);
|
||||
|
||||
} catch (Exception e) {
|
||||
|
||||
logEntityAction(emptyId(EntityType.EDGE),
|
||||
null,
|
||||
null,
|
||||
ActionType.DELETED, e, strEdgeId);
|
||||
|
||||
throw handleException(e);
|
||||
}
|
||||
tbEdgeService.deleteEdge(edge, getCurrentUser());
|
||||
}
|
||||
|
||||
@ApiOperation(value = "Get Tenant Edges (getEdges)",
|
||||
@ -261,32 +217,11 @@ public class EdgeController extends BaseController {
|
||||
@PathVariable(EDGE_ID) String strEdgeId) throws ThingsboardException {
|
||||
checkParameter("customerId", strCustomerId);
|
||||
checkParameter(EDGE_ID, strEdgeId);
|
||||
try {
|
||||
CustomerId customerId = new CustomerId(toUUID(strCustomerId));
|
||||
Customer customer = checkCustomerId(customerId, Operation.READ);
|
||||
|
||||
EdgeId edgeId = new EdgeId(toUUID(strEdgeId));
|
||||
checkEdgeId(edgeId, Operation.ASSIGN_TO_CUSTOMER);
|
||||
|
||||
Edge savedEdge = checkNotNull(edgeService.assignEdgeToCustomer(getCurrentUser().getTenantId(), edgeId, customerId));
|
||||
|
||||
tbClusterService.broadcastEntityStateChangeEvent(getTenantId(), edgeId,
|
||||
ComponentLifecycleEvent.UPDATED);
|
||||
|
||||
logEntityAction(edgeId, savedEdge,
|
||||
savedEdge.getCustomerId(),
|
||||
ActionType.ASSIGNED_TO_CUSTOMER, null, strEdgeId, strCustomerId, customer.getName());
|
||||
|
||||
sendEntityAssignToCustomerNotificationMsg(savedEdge.getTenantId(), savedEdge.getId(),
|
||||
customerId, EdgeEventActionType.ASSIGNED_TO_CUSTOMER);
|
||||
|
||||
return savedEdge;
|
||||
} catch (Exception e) {
|
||||
logEntityAction(emptyId(EntityType.EDGE), null,
|
||||
null,
|
||||
ActionType.ASSIGNED_TO_CUSTOMER, e, strEdgeId, strCustomerId);
|
||||
throw handleException(e);
|
||||
}
|
||||
return tbEdgeService.assignEdgeToCustomer(getTenantId(), edgeId, customer, getCurrentUser());
|
||||
}
|
||||
|
||||
@ApiOperation(value = "Unassign edge from customer (unassignEdgeFromCustomer)",
|
||||
@ -298,7 +233,6 @@ public class EdgeController extends BaseController {
|
||||
public Edge unassignEdgeFromCustomer(@ApiParam(value = EDGE_ID_PARAM_DESCRIPTION, required = true)
|
||||
@PathVariable(EDGE_ID) String strEdgeId) throws ThingsboardException {
|
||||
checkParameter(EDGE_ID, strEdgeId);
|
||||
try {
|
||||
EdgeId edgeId = new EdgeId(toUUID(strEdgeId));
|
||||
Edge edge = checkEdgeId(edgeId, Operation.UNASSIGN_FROM_CUSTOMER);
|
||||
if (edge.getCustomerId() == null || edge.getCustomerId().getId().equals(ModelConstants.NULL_UUID)) {
|
||||
@ -306,25 +240,7 @@ public class EdgeController extends BaseController {
|
||||
}
|
||||
Customer customer = checkCustomerId(edge.getCustomerId(), Operation.READ);
|
||||
|
||||
Edge savedEdge = checkNotNull(edgeService.unassignEdgeFromCustomer(getCurrentUser().getTenantId(), edgeId));
|
||||
|
||||
tbClusterService.broadcastEntityStateChangeEvent(getTenantId(), edgeId,
|
||||
ComponentLifecycleEvent.UPDATED);
|
||||
|
||||
logEntityAction(edgeId, edge,
|
||||
edge.getCustomerId(),
|
||||
ActionType.UNASSIGNED_FROM_CUSTOMER, null, strEdgeId, customer.getId().toString(), customer.getName());
|
||||
|
||||
sendEntityAssignToCustomerNotificationMsg(savedEdge.getTenantId(), savedEdge.getId(),
|
||||
customer.getId(), EdgeEventActionType.UNASSIGNED_FROM_CUSTOMER);
|
||||
|
||||
return savedEdge;
|
||||
} catch (Exception e) {
|
||||
logEntityAction(emptyId(EntityType.EDGE), null,
|
||||
null,
|
||||
ActionType.UNASSIGNED_FROM_CUSTOMER, e, strEdgeId);
|
||||
throw handleException(e);
|
||||
}
|
||||
return tbEdgeService.unassignEdgeFromCustomer(edge, customer, getCurrentUser());
|
||||
}
|
||||
|
||||
@ApiOperation(value = "Make edge publicly available (assignEdgeToPublicCustomer)",
|
||||
@ -338,26 +254,9 @@ public class EdgeController extends BaseController {
|
||||
public Edge assignEdgeToPublicCustomer(@ApiParam(value = EDGE_ID_PARAM_DESCRIPTION, required = true)
|
||||
@PathVariable(EDGE_ID) String strEdgeId) throws ThingsboardException {
|
||||
checkParameter(EDGE_ID, strEdgeId);
|
||||
try {
|
||||
EdgeId edgeId = new EdgeId(toUUID(strEdgeId));
|
||||
Edge edge = checkEdgeId(edgeId, Operation.ASSIGN_TO_CUSTOMER);
|
||||
Customer publicCustomer = customerService.findOrCreatePublicCustomer(edge.getTenantId());
|
||||
Edge savedEdge = checkNotNull(edgeService.assignEdgeToCustomer(getCurrentUser().getTenantId(), edgeId, publicCustomer.getId()));
|
||||
|
||||
tbClusterService.broadcastEntityStateChangeEvent(getTenantId(), edgeId,
|
||||
ComponentLifecycleEvent.UPDATED);
|
||||
|
||||
logEntityAction(edgeId, savedEdge,
|
||||
savedEdge.getCustomerId(),
|
||||
ActionType.ASSIGNED_TO_CUSTOMER, null, strEdgeId, publicCustomer.getId().toString(), publicCustomer.getName());
|
||||
|
||||
return savedEdge;
|
||||
} catch (Exception e) {
|
||||
logEntityAction(emptyId(EntityType.EDGE), null,
|
||||
null,
|
||||
ActionType.ASSIGNED_TO_CUSTOMER, e, strEdgeId);
|
||||
throw handleException(e);
|
||||
}
|
||||
checkEdgeId(edgeId, Operation.ASSIGN_TO_CUSTOMER);
|
||||
return tbEdgeService.assignEdgeToPublicCustomer(getTenantId(), edgeId, getCurrentUser());
|
||||
}
|
||||
|
||||
@ApiOperation(value = "Get Tenant Edges (getTenantEdges)",
|
||||
@ -455,29 +354,12 @@ public class EdgeController extends BaseController {
|
||||
@PathVariable("ruleChainId") String strRuleChainId) throws ThingsboardException {
|
||||
checkParameter(EDGE_ID, strEdgeId);
|
||||
checkParameter("ruleChainId", strRuleChainId);
|
||||
try {
|
||||
RuleChainId ruleChainId = new RuleChainId(toUUID(strRuleChainId));
|
||||
checkRuleChain(ruleChainId, Operation.WRITE);
|
||||
|
||||
EdgeId edgeId = new EdgeId(toUUID(strEdgeId));
|
||||
Edge edge = checkEdgeId(edgeId, Operation.WRITE);
|
||||
accessControlService.checkPermission(getCurrentUser(), Resource.EDGE, Operation.WRITE,
|
||||
edge.getId(), edge);
|
||||
|
||||
Edge updatedEdge = edgeNotificationService.setEdgeRootRuleChain(getTenantId(), edge, ruleChainId);
|
||||
|
||||
tbClusterService.broadcastEntityStateChangeEvent(updatedEdge.getTenantId(), updatedEdge.getId(), ComponentLifecycleEvent.UPDATED);
|
||||
|
||||
logEntityAction(updatedEdge.getId(), updatedEdge, null, ActionType.UPDATED, null);
|
||||
|
||||
return updatedEdge;
|
||||
} catch (Exception e) {
|
||||
logEntityAction(emptyId(EntityType.EDGE),
|
||||
null,
|
||||
null,
|
||||
ActionType.UPDATED, e, strEdgeId);
|
||||
throw handleException(e);
|
||||
}
|
||||
accessControlService.checkPermission(getCurrentUser(), Resource.EDGE, Operation.WRITE, edge.getId(), edge);
|
||||
return tbEdgeService.setEdgeRootRuleChain(edge, ruleChainId, getCurrentUser());
|
||||
}
|
||||
|
||||
@ApiOperation(value = "Get Customer Edges (getCustomerEdges)",
|
||||
@ -693,12 +575,6 @@ public class EdgeController extends BaseController {
|
||||
throw new DataValidationException("Root edge rule chain is not available!");
|
||||
}
|
||||
|
||||
return edgeBulkImportService.processBulkImport(request, user, importedAssetInfo -> {
|
||||
try {
|
||||
onEdgeCreatedOrUpdated(user.getTenantId(), importedAssetInfo.getEntity(), edgeTemplateRootRuleChain, importedAssetInfo.isUpdated(), user);
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
});
|
||||
return edgeBulkImportService.processBulkImport(request, user);
|
||||
}
|
||||
}
|
||||
|
||||
@ -18,13 +18,17 @@ package org.thingsboard.server.service.edge;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import com.fasterxml.jackson.databind.node.TextNode;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.SneakyThrows;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.thingsboard.common.util.JacksonUtil;
|
||||
import org.thingsboard.server.common.data.EntityType;
|
||||
import org.thingsboard.server.common.data.edge.Edge;
|
||||
import org.thingsboard.server.common.data.id.TenantId;
|
||||
import org.thingsboard.server.common.data.rule.RuleChain;
|
||||
import org.thingsboard.server.dao.edge.EdgeService;
|
||||
import org.thingsboard.server.dao.rule.RuleChainService;
|
||||
import org.thingsboard.server.queue.util.TbCoreComponent;
|
||||
import org.thingsboard.server.service.entitiy.edge.TbEdgeService;
|
||||
import org.thingsboard.server.service.importing.AbstractBulkImportService;
|
||||
import org.thingsboard.server.service.importing.BulkImportColumnType;
|
||||
import org.thingsboard.server.service.security.model.SecurityUser;
|
||||
@ -37,6 +41,8 @@ import java.util.Optional;
|
||||
@RequiredArgsConstructor
|
||||
public class EdgeBulkImportService extends AbstractBulkImportService<Edge> {
|
||||
private final EdgeService edgeService;
|
||||
private final TbEdgeService tbEdgeService;
|
||||
private final RuleChainService ruleChainService;
|
||||
|
||||
@Override
|
||||
protected void setEntityFields(Edge entity, Map<BulkImportColumnType, String> fields) {
|
||||
@ -66,9 +72,11 @@ public class EdgeBulkImportService extends AbstractBulkImportService<Edge> {
|
||||
entity.setAdditionalInfo(additionalInfo);
|
||||
}
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
protected Edge saveEntity(SecurityUser user, Edge entity, Map<BulkImportColumnType, String> fields) {
|
||||
return edgeService.saveEdge(entity);
|
||||
RuleChain edgeTemplateRootRuleChain = ruleChainService.getEdgeTemplateRootRuleChain(user.getTenantId());
|
||||
return tbEdgeService.saveEdge(entity, edgeTemplateRootRuleChain, user);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -50,9 +50,11 @@ import org.thingsboard.server.dao.edge.EdgeService;
|
||||
import org.thingsboard.server.dao.exception.DataValidationException;
|
||||
import org.thingsboard.server.dao.exception.IncorrectParameterException;
|
||||
import org.thingsboard.server.dao.model.ModelConstants;
|
||||
import org.thingsboard.server.dao.rule.RuleChainService;
|
||||
import org.thingsboard.server.dao.tenant.TbTenantProfileCache;
|
||||
import org.thingsboard.server.dao.tenant.TenantService;
|
||||
import org.thingsboard.server.service.action.EntityActionService;
|
||||
import org.thingsboard.server.service.edge.EdgeNotificationService;
|
||||
import org.thingsboard.server.service.executors.DbCallbackExecutorService;
|
||||
|
||||
import javax.mail.MessagingException;
|
||||
@ -102,6 +104,10 @@ public abstract class AbstractTbEntityService {
|
||||
protected ClaimDevicesService claimDevicesService;
|
||||
@Autowired
|
||||
protected TbTenantProfileCache tenantProfileCache;
|
||||
@Autowired
|
||||
protected RuleChainService ruleChainService;
|
||||
@Autowired
|
||||
protected EdgeNotificationService edgeNotificationService;
|
||||
|
||||
protected ListenableFuture<Void> removeAlarmsByEntityId(TenantId tenantId, EntityId entityId) {
|
||||
ListenableFuture<PageData<AlarmInfo>> alarmsFuture =
|
||||
|
||||
@ -28,6 +28,7 @@ import org.thingsboard.server.common.data.HasName;
|
||||
import org.thingsboard.server.common.data.Tenant;
|
||||
import org.thingsboard.server.common.data.asset.Asset;
|
||||
import org.thingsboard.server.common.data.audit.ActionType;
|
||||
import org.thingsboard.server.common.data.edge.Edge;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventType;
|
||||
import org.thingsboard.server.common.data.id.AssetId;
|
||||
@ -36,6 +37,7 @@ import org.thingsboard.server.common.data.id.DeviceId;
|
||||
import org.thingsboard.server.common.data.id.EdgeId;
|
||||
import org.thingsboard.server.common.data.id.EntityId;
|
||||
import org.thingsboard.server.common.data.id.TenantId;
|
||||
import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent;
|
||||
import org.thingsboard.server.common.data.security.DeviceCredentials;
|
||||
import org.thingsboard.server.common.msg.TbMsg;
|
||||
import org.thingsboard.server.common.msg.TbMsgDataType;
|
||||
@ -50,9 +52,6 @@ import java.util.List;
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class DefaultTbNotificationEntityService implements TbNotificationEntityService {
|
||||
|
||||
protected static final int DEFAULT_PAGE_SIZE = 1000;
|
||||
|
||||
private static final ObjectMapper json = new ObjectMapper();
|
||||
|
||||
private final EntityActionService entityActionService;
|
||||
@ -74,6 +73,7 @@ public class DefaultTbNotificationEntityService implements TbNotificationEntityS
|
||||
sendDeleteNotificationMsg(tenantId, entityId, relatedEdgeIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public <E extends HasName, I extends EntityId> void notifyAssignOrUnassignEntityToCustomer(TenantId tenantId, I entityId,
|
||||
CustomerId customerId, E entity,
|
||||
ActionType actionType,
|
||||
@ -97,7 +97,6 @@ public class DefaultTbNotificationEntityService implements TbNotificationEntityS
|
||||
sendEntityAssignToEdgeNotificationMsg(tenantId, edgeId, entityId, edgeActionType);
|
||||
}
|
||||
|
||||
//Device
|
||||
@Override
|
||||
public void notifyCreateOrUpdateDevice(TenantId tenantId, DeviceId deviceId, CustomerId customerId,
|
||||
Device device, Device oldDevice, ActionType actionType,
|
||||
@ -130,7 +129,7 @@ public class DefaultTbNotificationEntityService implements TbNotificationEntityS
|
||||
pushAssignedFromNotification(tenant, newTenantId, device);
|
||||
}
|
||||
|
||||
//Asset
|
||||
@Override
|
||||
public void notifyCreateOrUpdateAsset(TenantId tenantId, AssetId assetId, CustomerId customerId, Asset asset,
|
||||
ActionType actionType, SecurityUser user, Object... additionalInfo) {
|
||||
logEntityAction(tenantId, assetId, asset, customerId, actionType, user, additionalInfo);
|
||||
@ -140,6 +139,42 @@ public class DefaultTbNotificationEntityService implements TbNotificationEntityS
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void notifyEdge(TenantId tenantId, EdgeId edgeId, CustomerId customerId, Edge edge, ActionType actionType,
|
||||
SecurityUser user, Object... additionalInfo) {
|
||||
ComponentLifecycleEvent lifecycleEvent;
|
||||
EdgeEventActionType edgeEventActionType = null;
|
||||
switch (actionType) {
|
||||
case ADDED:
|
||||
lifecycleEvent = ComponentLifecycleEvent.CREATED;
|
||||
break;
|
||||
case UPDATED:
|
||||
lifecycleEvent = ComponentLifecycleEvent.UPDATED;
|
||||
break;
|
||||
case ASSIGNED_TO_CUSTOMER:
|
||||
lifecycleEvent = ComponentLifecycleEvent.UPDATED;
|
||||
edgeEventActionType = EdgeEventActionType.ASSIGNED_TO_CUSTOMER;
|
||||
break;
|
||||
case UNASSIGNED_FROM_CUSTOMER:
|
||||
lifecycleEvent = ComponentLifecycleEvent.UPDATED;
|
||||
edgeEventActionType = EdgeEventActionType.UNASSIGNED_FROM_CUSTOMER;
|
||||
break;
|
||||
case DELETED:
|
||||
lifecycleEvent = ComponentLifecycleEvent.DELETED;
|
||||
break;
|
||||
default:
|
||||
throw new IllegalArgumentException("Unknown actionType: " + actionType);
|
||||
}
|
||||
|
||||
tbClusterService.broadcastEntityStateChangeEvent(tenantId, edgeId, lifecycleEvent);
|
||||
logEntityAction(tenantId, edgeId, edge, customerId, actionType, user, additionalInfo);
|
||||
|
||||
//Send notification to edge
|
||||
if (edgeEventActionType != null) {
|
||||
sendEntityAssignToCustomerNotificationMsg(tenantId, edgeId, customerId, edgeEventActionType);
|
||||
}
|
||||
}
|
||||
|
||||
private <E extends HasName, I extends EntityId> void logEntityAction(TenantId tenantId, I entityId, E entity, CustomerId customerId,
|
||||
ActionType actionType, SecurityUser user, Object... additionalInfo) {
|
||||
logEntityAction(tenantId, entityId, entity, customerId, actionType, user, null, additionalInfo);
|
||||
@ -154,11 +189,11 @@ public class DefaultTbNotificationEntityService implements TbNotificationEntityS
|
||||
}
|
||||
}
|
||||
|
||||
protected void sendEntityNotificationMsg(TenantId tenantId, EntityId entityId, EdgeEventActionType action) {
|
||||
private void sendEntityNotificationMsg(TenantId tenantId, EntityId entityId, EdgeEventActionType action) {
|
||||
sendNotificationMsgToEdgeService(tenantId, null, entityId, null, null, action);
|
||||
}
|
||||
|
||||
protected void sendEntityAssignToCustomerNotificationMsg(TenantId tenantId, EntityId entityId, CustomerId customerId, EdgeEventActionType action) {
|
||||
private void sendEntityAssignToCustomerNotificationMsg(TenantId tenantId, EntityId entityId, CustomerId customerId, EdgeEventActionType action) {
|
||||
try {
|
||||
sendNotificationMsgToEdgeService(tenantId, null, entityId, json.writeValueAsString(customerId), null, action);
|
||||
} catch (Exception e) {
|
||||
@ -166,11 +201,11 @@ public class DefaultTbNotificationEntityService implements TbNotificationEntityS
|
||||
}
|
||||
}
|
||||
|
||||
protected void sendDeleteNotificationMsg(TenantId tenantId, EntityId entityId, List<EdgeId> edgeIds) {
|
||||
private void sendDeleteNotificationMsg(TenantId tenantId, EntityId entityId, List<EdgeId> edgeIds) {
|
||||
sendDeleteNotificationMsg(tenantId, entityId, edgeIds, null);
|
||||
}
|
||||
|
||||
protected void sendDeleteNotificationMsg(TenantId tenantId, EntityId entityId, List<EdgeId> edgeIds, String body) {
|
||||
private void sendDeleteNotificationMsg(TenantId tenantId, EntityId entityId, List<EdgeId> edgeIds, String body) {
|
||||
if (edgeIds != null && !edgeIds.isEmpty()) {
|
||||
for (EdgeId edgeId : edgeIds) {
|
||||
sendNotificationMsgToEdgeService(tenantId, edgeId, entityId, body, null, EdgeEventActionType.DELETED);
|
||||
@ -178,7 +213,7 @@ public class DefaultTbNotificationEntityService implements TbNotificationEntityS
|
||||
}
|
||||
}
|
||||
|
||||
protected void sendEntityAssignToEdgeNotificationMsg(TenantId tenantId, EdgeId edgeId, EntityId entityId, EdgeEventActionType action) {
|
||||
private void sendEntityAssignToEdgeNotificationMsg(TenantId tenantId, EdgeId edgeId, EntityId entityId, EdgeEventActionType action) {
|
||||
sendNotificationMsgToEdgeService(tenantId, edgeId, entityId, null, null, action);
|
||||
}
|
||||
|
||||
|
||||
@ -20,6 +20,7 @@ import org.thingsboard.server.common.data.HasName;
|
||||
import org.thingsboard.server.common.data.Tenant;
|
||||
import org.thingsboard.server.common.data.asset.Asset;
|
||||
import org.thingsboard.server.common.data.audit.ActionType;
|
||||
import org.thingsboard.server.common.data.edge.Edge;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
|
||||
import org.thingsboard.server.common.data.id.AssetId;
|
||||
import org.thingsboard.server.common.data.id.CustomerId;
|
||||
@ -70,4 +71,6 @@ public interface TbNotificationEntityService {
|
||||
void notifyCreateOrUpdateAsset(TenantId tenantId, AssetId assetId, CustomerId customerId, Asset asset,
|
||||
ActionType actionType, SecurityUser user, Object... additionalInfo);
|
||||
|
||||
void notifyEdge(TenantId tenantId, EdgeId edgeId, CustomerId customerId, Edge edge, ActionType actionType, SecurityUser user, Object... additionalInfo);
|
||||
|
||||
}
|
||||
|
||||
@ -0,0 +1,150 @@
|
||||
/**
|
||||
* 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.service.entitiy.edge;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.thingsboard.server.common.data.Customer;
|
||||
import org.thingsboard.server.common.data.EntityType;
|
||||
import org.thingsboard.server.common.data.audit.ActionType;
|
||||
import org.thingsboard.server.common.data.edge.Edge;
|
||||
import org.thingsboard.server.common.data.exception.ThingsboardException;
|
||||
import org.thingsboard.server.common.data.id.CustomerId;
|
||||
import org.thingsboard.server.common.data.id.EdgeId;
|
||||
import org.thingsboard.server.common.data.id.RuleChainId;
|
||||
import org.thingsboard.server.common.data.id.TenantId;
|
||||
import org.thingsboard.server.common.data.rule.RuleChain;
|
||||
import org.thingsboard.server.queue.util.TbCoreComponent;
|
||||
import org.thingsboard.server.service.entitiy.AbstractTbEntityService;
|
||||
import org.thingsboard.server.service.security.model.SecurityUser;
|
||||
|
||||
@AllArgsConstructor
|
||||
@TbCoreComponent
|
||||
@Service
|
||||
@Slf4j
|
||||
public class DefaultTbEdgeService extends AbstractTbEntityService implements TbEdgeService {
|
||||
|
||||
@Override
|
||||
public Edge saveEdge(Edge edge, RuleChain edgeTemplateRootRuleChain, SecurityUser user) throws ThingsboardException {
|
||||
ActionType actionType = edge.getId() == null ? ActionType.ADDED : ActionType.UPDATED;
|
||||
TenantId tenantId = edge.getTenantId();
|
||||
try {
|
||||
Edge savedEdge = checkNotNull(edgeService.saveEdge(edge));
|
||||
EdgeId edgeId = savedEdge.getId();
|
||||
|
||||
if (actionType == ActionType.ADDED) {
|
||||
ruleChainService.assignRuleChainToEdge(tenantId, edgeTemplateRootRuleChain.getId(), edgeId);
|
||||
edgeNotificationService.setEdgeRootRuleChain(tenantId, savedEdge, edgeTemplateRootRuleChain.getId());
|
||||
edgeService.assignDefaultRuleChainsToEdge(tenantId, edgeId);
|
||||
}
|
||||
|
||||
notificationEntityService.notifyEdge(tenantId, edgeId, savedEdge.getCustomerId(), savedEdge, actionType, user);
|
||||
|
||||
return savedEdge;
|
||||
} catch (Exception e) {
|
||||
notificationEntityService.notifyEntity(tenantId, emptyId(EntityType.EDGE), edge, null, actionType, user, e);
|
||||
throw handleException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteEdge(Edge edge, SecurityUser user) throws ThingsboardException {
|
||||
ActionType actionType = ActionType.DELETED;
|
||||
EdgeId edgeId = edge.getId();
|
||||
TenantId tenantId = edge.getTenantId();
|
||||
try {
|
||||
edgeService.deleteEdge(tenantId, edgeId);
|
||||
notificationEntityService.notifyEdge(tenantId, edgeId, edge.getCustomerId(), edge, actionType, user, edgeId.toString());
|
||||
|
||||
} catch (Exception e) {
|
||||
notificationEntityService.notifyEntity(tenantId, emptyId(EntityType.EDGE), edge, null, actionType, user, e);
|
||||
throw handleException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Edge assignEdgeToCustomer(TenantId tenantId, EdgeId edgeId, Customer customer, SecurityUser user) throws ThingsboardException {
|
||||
ActionType actionType = ActionType.ASSIGNED_TO_CUSTOMER;
|
||||
CustomerId customerId = customer.getId();
|
||||
try {
|
||||
Edge savedEdge = checkNotNull(edgeService.assignEdgeToCustomer(tenantId, edgeId, customerId));
|
||||
|
||||
notificationEntityService.notifyEdge(tenantId, edgeId, customerId, savedEdge, actionType, user,
|
||||
edgeId.toString(), customerId.toString(), customer.getName());
|
||||
|
||||
return savedEdge;
|
||||
} catch (Exception e) {
|
||||
notificationEntityService.notifyEntity(tenantId, emptyId(EntityType.EDGE), null, null,
|
||||
actionType, user, e, edgeId.toString(), customerId.toString());
|
||||
throw handleException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Edge unassignEdgeFromCustomer(Edge edge, Customer customer, SecurityUser user) throws ThingsboardException {
|
||||
ActionType actionType = ActionType.UNASSIGNED_FROM_CUSTOMER;
|
||||
TenantId tenantId = edge.getTenantId();
|
||||
EdgeId edgeId = edge.getId();
|
||||
CustomerId customerId = customer.getId();
|
||||
try {
|
||||
Edge savedEdge = checkNotNull(edgeService.unassignEdgeFromCustomer(tenantId, edgeId));
|
||||
|
||||
notificationEntityService.notifyEdge(tenantId, edgeId, customerId, savedEdge, actionType, user,
|
||||
edgeId.toString(), customerId.toString(), customer.getName());
|
||||
return savedEdge;
|
||||
} catch (Exception e) {
|
||||
notificationEntityService.notifyEntity(tenantId, emptyId(EntityType.EDGE), null, null,
|
||||
actionType, user, e, edgeId.toString());
|
||||
throw handleException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Edge assignEdgeToPublicCustomer(TenantId tenantId, EdgeId edgeId, SecurityUser user) throws ThingsboardException {
|
||||
ActionType actionType = ActionType.ASSIGNED_TO_CUSTOMER;
|
||||
try {
|
||||
Customer publicCustomer = customerService.findOrCreatePublicCustomer(tenantId);
|
||||
CustomerId customerId = publicCustomer.getId();
|
||||
Edge savedEdge = checkNotNull(edgeService.assignEdgeToCustomer(tenantId, edgeId, customerId));
|
||||
|
||||
notificationEntityService.notifyEdge(tenantId, edgeId, customerId, savedEdge, actionType, user,
|
||||
edgeId.toString(), customerId.toString(), publicCustomer.getName());
|
||||
|
||||
return savedEdge;
|
||||
} catch (Exception e) {
|
||||
notificationEntityService.notifyEntity(tenantId, emptyId(EntityType.EDGE), null, null,
|
||||
actionType, user, e, edgeId.toString());
|
||||
throw handleException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public Edge setEdgeRootRuleChain(Edge edge, RuleChainId ruleChainId, SecurityUser user) throws ThingsboardException {
|
||||
ActionType actionType = ActionType.UPDATED;
|
||||
TenantId tenantId = edge.getTenantId();
|
||||
EdgeId edgeId = edge.getId();
|
||||
try {
|
||||
Edge updatedEdge = edgeNotificationService.setEdgeRootRuleChain(tenantId, edge, ruleChainId);
|
||||
notificationEntityService.notifyEdge(tenantId, edgeId, null, updatedEdge, actionType, user);
|
||||
return updatedEdge;
|
||||
} catch (Exception e) {
|
||||
notificationEntityService.notifyEntity(tenantId, emptyId(EntityType.EDGE), null, null,
|
||||
actionType, user, e, edgeId.toString());
|
||||
throw handleException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,39 @@
|
||||
/**
|
||||
* 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.service.entitiy.edge;
|
||||
|
||||
import org.thingsboard.server.common.data.Customer;
|
||||
import org.thingsboard.server.common.data.edge.Edge;
|
||||
import org.thingsboard.server.common.data.exception.ThingsboardException;
|
||||
import org.thingsboard.server.common.data.id.EdgeId;
|
||||
import org.thingsboard.server.common.data.id.RuleChainId;
|
||||
import org.thingsboard.server.common.data.id.TenantId;
|
||||
import org.thingsboard.server.common.data.rule.RuleChain;
|
||||
import org.thingsboard.server.service.security.model.SecurityUser;
|
||||
|
||||
public interface TbEdgeService {
|
||||
Edge saveEdge(Edge edge, RuleChain edgeTemplateRootRuleChain, SecurityUser user) throws ThingsboardException;
|
||||
|
||||
void deleteEdge(Edge edge, SecurityUser user) throws ThingsboardException;
|
||||
|
||||
Edge assignEdgeToCustomer(TenantId tenantId, EdgeId edgeId, Customer customer, SecurityUser user) throws ThingsboardException;
|
||||
|
||||
Edge unassignEdgeFromCustomer(Edge edge, Customer customer, SecurityUser user) throws ThingsboardException;
|
||||
|
||||
Edge assignEdgeToPublicCustomer(TenantId tenantId, EdgeId edgeId, SecurityUser user) throws ThingsboardException;
|
||||
|
||||
Edge setEdgeRootRuleChain(Edge edge, RuleChainId ruleChainId, SecurityUser user) throws ThingsboardException;
|
||||
}
|
||||
@ -95,7 +95,7 @@ public abstract class AbstractBulkImportService<E extends HasId<? extends Entity
|
||||
}
|
||||
}
|
||||
|
||||
public final BulkImportResult<E> processBulkImport(BulkImportRequest request, SecurityUser user, Consumer<ImportedEntityInfo<E>> onEntityImported) throws Exception {
|
||||
public final BulkImportResult<E> processBulkImport(BulkImportRequest request, SecurityUser user) throws Exception {
|
||||
List<EntityData> entitiesData = parseData(request);
|
||||
|
||||
BulkImportResult<E> result = new BulkImportResult<>();
|
||||
@ -109,7 +109,6 @@ public abstract class AbstractBulkImportService<E extends HasId<? extends Entity
|
||||
ImportedEntityInfo<E> importedEntityInfo = saveEntity(entityData.getFields(), user);
|
||||
E entity = importedEntityInfo.getEntity();
|
||||
|
||||
onEntityImported.accept(importedEntityInfo);
|
||||
saveKvs(user, entity, entityData.getKvs());
|
||||
|
||||
return importedEntityInfo;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user