Merge pull request #12792 from irynamatveieva/calculated-fields
Calculated fields
This commit is contained in:
		
						commit
						16167d8631
					
				@ -35,19 +35,22 @@ import org.springframework.web.bind.annotation.RestController;
 | 
				
			|||||||
import org.thingsboard.common.util.JacksonUtil;
 | 
					import org.thingsboard.common.util.JacksonUtil;
 | 
				
			||||||
import org.thingsboard.script.api.tbel.TbelCfArg;
 | 
					import org.thingsboard.script.api.tbel.TbelCfArg;
 | 
				
			||||||
import org.thingsboard.script.api.tbel.TbelInvokeService;
 | 
					import org.thingsboard.script.api.tbel.TbelInvokeService;
 | 
				
			||||||
import org.thingsboard.server.common.data.Device;
 | 
					 | 
				
			||||||
import org.thingsboard.server.common.data.EntityType;
 | 
					import org.thingsboard.server.common.data.EntityType;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.EventInfo;
 | 
				
			||||||
import org.thingsboard.server.common.data.HasTenantId;
 | 
					import org.thingsboard.server.common.data.HasTenantId;
 | 
				
			||||||
import org.thingsboard.server.common.data.cf.CalculatedField;
 | 
					import org.thingsboard.server.common.data.cf.CalculatedField;
 | 
				
			||||||
import org.thingsboard.server.common.data.cf.configuration.CalculatedFieldConfiguration;
 | 
					import org.thingsboard.server.common.data.cf.configuration.CalculatedFieldConfiguration;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.event.EventType;
 | 
				
			||||||
import org.thingsboard.server.common.data.exception.ThingsboardException;
 | 
					import org.thingsboard.server.common.data.exception.ThingsboardException;
 | 
				
			||||||
import org.thingsboard.server.common.data.id.CalculatedFieldId;
 | 
					import org.thingsboard.server.common.data.id.CalculatedFieldId;
 | 
				
			||||||
import org.thingsboard.server.common.data.id.EntityId;
 | 
					import org.thingsboard.server.common.data.id.EntityId;
 | 
				
			||||||
import org.thingsboard.server.common.data.id.EntityIdFactory;
 | 
					import org.thingsboard.server.common.data.id.EntityIdFactory;
 | 
				
			||||||
import org.thingsboard.server.common.data.id.HasId;
 | 
					import org.thingsboard.server.common.data.id.HasId;
 | 
				
			||||||
 | 
					import org.thingsboard.server.common.data.id.TenantId;
 | 
				
			||||||
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.config.annotations.ApiOperation;
 | 
					import org.thingsboard.server.config.annotations.ApiOperation;
 | 
				
			||||||
 | 
					import org.thingsboard.server.dao.event.EventService;
 | 
				
			||||||
import org.thingsboard.server.queue.util.TbCoreComponent;
 | 
					import org.thingsboard.server.queue.util.TbCoreComponent;
 | 
				
			||||||
import org.thingsboard.server.service.cf.ctx.state.CalculatedFieldScriptEngine;
 | 
					import org.thingsboard.server.service.cf.ctx.state.CalculatedFieldScriptEngine;
 | 
				
			||||||
import org.thingsboard.server.service.cf.ctx.state.CalculatedFieldTbelScriptEngine;
 | 
					import org.thingsboard.server.service.cf.ctx.state.CalculatedFieldTbelScriptEngine;
 | 
				
			||||||
@ -61,6 +64,7 @@ import java.util.Collections;
 | 
				
			|||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
import java.util.Map;
 | 
					import java.util.Map;
 | 
				
			||||||
import java.util.Objects;
 | 
					import java.util.Objects;
 | 
				
			||||||
 | 
					import java.util.Optional;
 | 
				
			||||||
import java.util.concurrent.TimeUnit;
 | 
					import java.util.concurrent.TimeUnit;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import static org.thingsboard.server.controller.ControllerConstants.CF_TEXT_SEARCH_DESCRIPTION;
 | 
					import static org.thingsboard.server.controller.ControllerConstants.CF_TEXT_SEARCH_DESCRIPTION;
 | 
				
			||||||
@ -84,6 +88,7 @@ import static org.thingsboard.server.controller.ControllerConstants.UUID_WIKI_LI
 | 
				
			|||||||
public class CalculatedFieldController extends BaseController {
 | 
					public class CalculatedFieldController extends BaseController {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private final TbCalculatedFieldService tbCalculatedFieldService;
 | 
					    private final TbCalculatedFieldService tbCalculatedFieldService;
 | 
				
			||||||
 | 
					    private final EventService eventService;
 | 
				
			||||||
    private final TbelInvokeService tbelInvokeService;
 | 
					    private final TbelInvokeService tbelInvokeService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static final String CALCULATED_FIELD_ID = "calculatedFieldId";
 | 
					    public static final String CALCULATED_FIELD_ID = "calculatedFieldId";
 | 
				
			||||||
@ -176,14 +181,31 @@ public class CalculatedFieldController extends BaseController {
 | 
				
			|||||||
    @PreAuthorize("hasAuthority('TENANT_ADMIN')")
 | 
					    @PreAuthorize("hasAuthority('TENANT_ADMIN')")
 | 
				
			||||||
    @RequestMapping(value = "/calculatedField/{calculatedFieldId}", method = RequestMethod.DELETE)
 | 
					    @RequestMapping(value = "/calculatedField/{calculatedFieldId}", method = RequestMethod.DELETE)
 | 
				
			||||||
    @ResponseStatus(value = HttpStatus.OK)
 | 
					    @ResponseStatus(value = HttpStatus.OK)
 | 
				
			||||||
    public void deleteCalculatedField(@PathVariable(CALCULATED_FIELD_ID) String strCalculatedField) throws Exception {
 | 
					    public void deleteCalculatedField(@PathVariable(CALCULATED_FIELD_ID) String strCalculatedFieldId) throws Exception {
 | 
				
			||||||
        checkParameter(CALCULATED_FIELD_ID, strCalculatedField);
 | 
					        checkParameter(CALCULATED_FIELD_ID, strCalculatedFieldId);
 | 
				
			||||||
        CalculatedFieldId calculatedFieldId = new CalculatedFieldId(toUUID(strCalculatedField));
 | 
					        CalculatedFieldId calculatedFieldId = new CalculatedFieldId(toUUID(strCalculatedFieldId));
 | 
				
			||||||
        CalculatedField calculatedField = checkCalculatedFieldId(calculatedFieldId, Operation.DELETE);
 | 
					        CalculatedField calculatedField = checkCalculatedFieldId(calculatedFieldId, Operation.DELETE);
 | 
				
			||||||
        checkEntityId(calculatedField.getEntityId(), Operation.WRITE_CALCULATED_FIELD);
 | 
					        checkEntityId(calculatedField.getEntityId(), Operation.WRITE_CALCULATED_FIELD);
 | 
				
			||||||
        tbCalculatedFieldService.delete(calculatedField, getCurrentUser());
 | 
					        tbCalculatedFieldService.delete(calculatedField, getCurrentUser());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @ApiOperation(value = "Get latest calculated field debug event (getLatestCalculatedFieldDebugEvent)",
 | 
				
			||||||
 | 
					            notes = "Gets latest calculated field debug event for specified calculated field id. " +
 | 
				
			||||||
 | 
					                    "Referencing non-existing calculated field id will cause an error. " + TENANT_AUTHORITY_PARAGRAPH)
 | 
				
			||||||
 | 
					    @PreAuthorize("hasAnyAuthority('TENANT_ADMIN')")
 | 
				
			||||||
 | 
					    @RequestMapping(value = "/calculatedField/{calculatedFieldId}/debug", method = RequestMethod.GET)
 | 
				
			||||||
 | 
					    @ResponseBody
 | 
				
			||||||
 | 
					    public JsonNode getLatestCalculatedFieldDebugEvent(@Parameter @PathVariable(CALCULATED_FIELD_ID) String strCalculatedFieldId) throws ThingsboardException {
 | 
				
			||||||
 | 
					        checkParameter(CALCULATED_FIELD_ID, strCalculatedFieldId);
 | 
				
			||||||
 | 
					        CalculatedFieldId calculatedFieldId = new CalculatedFieldId(toUUID(strCalculatedFieldId));
 | 
				
			||||||
 | 
					        CalculatedField calculatedField = checkCalculatedFieldId(calculatedFieldId, Operation.READ);
 | 
				
			||||||
 | 
					        checkEntityId(calculatedField.getEntityId(), Operation.READ_CALCULATED_FIELD);
 | 
				
			||||||
 | 
					        TenantId tenantId = getCurrentUser().getTenantId();
 | 
				
			||||||
 | 
					        return Optional.ofNullable(eventService.findLatestEvents(tenantId, calculatedFieldId, EventType.DEBUG_CALCULATED_FIELD, 1))
 | 
				
			||||||
 | 
					                .flatMap(events -> events.stream().map(EventInfo::getBody).findFirst())
 | 
				
			||||||
 | 
					                .orElse(null);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @ApiOperation(value = "Test Script expression",
 | 
					    @ApiOperation(value = "Test Script expression",
 | 
				
			||||||
            notes = TEST_SCRIPT_EXPRESSION + TENANT_AUTHORITY_PARAGRAPH)
 | 
					            notes = TEST_SCRIPT_EXPRESSION + TENANT_AUTHORITY_PARAGRAPH)
 | 
				
			||||||
    @PreAuthorize("hasAuthority('TENANT_ADMIN')")
 | 
					    @PreAuthorize("hasAuthority('TENANT_ADMIN')")
 | 
				
			||||||
 | 
				
			|||||||
@ -15,9 +15,7 @@
 | 
				
			|||||||
 */
 | 
					 */
 | 
				
			||||||
package org.thingsboard.server.dao.model.sql;
 | 
					package org.thingsboard.server.dao.model.sql;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import com.fasterxml.jackson.databind.JsonNode;
 | 
					 | 
				
			||||||
import jakarta.persistence.Column;
 | 
					import jakarta.persistence.Column;
 | 
				
			||||||
import jakarta.persistence.Convert;
 | 
					 | 
				
			||||||
import jakarta.persistence.Entity;
 | 
					import jakarta.persistence.Entity;
 | 
				
			||||||
import jakarta.persistence.Table;
 | 
					import jakarta.persistence.Table;
 | 
				
			||||||
import lombok.Data;
 | 
					import lombok.Data;
 | 
				
			||||||
@ -61,8 +59,7 @@ public class CalculatedFieldLinkEntity extends BaseSqlEntity<CalculatedFieldLink
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public CalculatedFieldLinkEntity(CalculatedFieldLink calculatedFieldLink) {
 | 
					    public CalculatedFieldLinkEntity(CalculatedFieldLink calculatedFieldLink) {
 | 
				
			||||||
        this.setUuid(calculatedFieldLink.getUuidId());
 | 
					        super(calculatedFieldLink);
 | 
				
			||||||
        this.createdTime = calculatedFieldLink.getCreatedTime();
 | 
					 | 
				
			||||||
        this.tenantId = calculatedFieldLink.getTenantId().getId();
 | 
					        this.tenantId = calculatedFieldLink.getTenantId().getId();
 | 
				
			||||||
        this.entityType = calculatedFieldLink.getEntityId().getEntityType().name();
 | 
					        this.entityType = calculatedFieldLink.getEntityId().getEntityType().name();
 | 
				
			||||||
        this.entityId = calculatedFieldLink.getEntityId().getId();
 | 
					        this.entityId = calculatedFieldLink.getEntityId().getId();
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user