Browse Source

Refactor find jobs by filter

pull/13285/head
ViacheslavKlimov 1 year ago
parent
commit
8e6e687c5d
  1. 2
      dao/src/main/java/org/thingsboard/server/dao/config/JpaDaoConfig.java
  2. 6
      dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java
  3. 20
      dao/src/main/java/org/thingsboard/server/dao/job/DefaultJobService.java
  4. 20
      dao/src/main/java/org/thingsboard/server/dao/sql/job/JpaJobDao.java

2
dao/src/main/java/org/thingsboard/server/dao/config/JpaDaoConfig.java

@ -45,7 +45,7 @@ import java.util.Objects;
@Configuration
@TbAutoConfiguration
@ComponentScan({"org.thingsboard.server.dao.sql", "org.thingsboard.server.dao.attributes", "org.thingsboard.server.dao.sqlts.dictionary", "org.thingsboard.server.dao.cache", "org.thingsboard.server.cache", "org.thingsboard.server.dao.entity"})
@ComponentScan({"org.thingsboard.server.dao.sql", "org.thingsboard.server.dao.attributes", "org.thingsboard.server.dao.sqlts.dictionary", "org.thingsboard.server.dao.cache", "org.thingsboard.server.cache"})
@EnableJpaRepositories(value = {"org.thingsboard.server.dao.sql", "org.thingsboard.server.dao.sqlts.dictionary"},
excludeFilters = @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = {EventRepository.class, AuditLogRepository.class}),
bootstrapMode = BootstrapMode.LAZY)

6
dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java

@ -103,7 +103,7 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe
private EdqsApiService edqsApiService;
@Autowired
private Optional<EdqsStatsService> edqsStatsService;
private EdqsStatsService edqsStatsService;
@Override
public long countEntitiesByQuery(TenantId tenantId, CustomerId customerId, EntityCountQuery query) {
@ -123,7 +123,7 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe
} else {
result = entityQueryDao.countEntitiesByQuery(tenantId, customerId, query);
}
edqsStatsService.ifPresent(statsService -> statsService.reportEntityCountQuery(tenantId, query, System.nanoTime() - startNs));
edqsStatsService.reportEntityCountQuery(tenantId, query, System.nanoTime() - startNs);
return result;
}
@ -157,7 +157,7 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe
}
}
}
edqsStatsService.ifPresent(statsService -> statsService.reportEntityDataQuery(tenantId, query, System.nanoTime() - startNs));
edqsStatsService.reportEntityDataQuery(tenantId, query, System.nanoTime() - startNs);
return result;
}

20
dao/src/main/java/org/thingsboard/server/dao/job/DefaultJobService.java

@ -19,6 +19,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.thingsboard.server.common.data.EntityInfo;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.HasId;
@ -34,10 +35,14 @@ import org.thingsboard.server.common.data.job.task.TaskResult;
import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.dao.entity.AbstractEntityService;
import org.thingsboard.server.dao.entity.EntityService;
import org.thingsboard.server.dao.eventsourcing.SaveEntityEvent;
import org.thingsboard.server.dao.service.ConstraintValidator;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import static org.thingsboard.server.common.data.job.JobStatus.CANCELLED;
import static org.thingsboard.server.common.data.job.JobStatus.COMPLETED;
@ -52,6 +57,7 @@ import static org.thingsboard.server.common.data.job.JobStatus.RUNNING;
public class DefaultJobService extends AbstractEntityService implements JobService {
private final JobDao jobDao;
private final EntityService entityService;
@Transactional
@Override
@ -190,7 +196,19 @@ public class DefaultJobService extends AbstractEntityService implements JobServi
@Override
public PageData<Job> findJobsByFilter(TenantId tenantId, JobFilter filter, PageLink pageLink) {
return jobDao.findByTenantIdAndFilter(tenantId, filter, pageLink);
PageData<Job> jobs = jobDao.findByTenantIdAndFilter(tenantId, filter, pageLink);
Set<EntityId> entityIds = jobs.getData().stream()
.map(Job::getEntityId)
.collect(Collectors.toSet());
Map<EntityId, EntityInfo> entityInfos = entityService.fetchEntityInfos(tenantId, null, entityIds);
jobs.getData().forEach(job -> {
EntityInfo entityInfo = entityInfos.get(job.getEntityId());
if (entityInfo != null) {
job.setEntityName(entityInfo.getName());
}
});
return jobs;
}
@Override

20
dao/src/main/java/org/thingsboard/server/dao/sql/job/JpaJobDao.java

@ -20,7 +20,6 @@ import lombok.RequiredArgsConstructor;
import org.springframework.data.domain.Limit;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Component;
import org.thingsboard.server.common.data.EntityInfo;
import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.id.EntityId;
import org.thingsboard.server.common.data.id.JobId;
@ -33,17 +32,13 @@ import org.thingsboard.server.common.data.page.PageData;
import org.thingsboard.server.common.data.page.PageLink;
import org.thingsboard.server.common.data.util.CollectionsUtil;
import org.thingsboard.server.dao.DaoUtil;
import org.thingsboard.server.dao.entity.EntityService;
import org.thingsboard.server.dao.job.JobDao;
import org.thingsboard.server.dao.model.sql.JobEntity;
import org.thingsboard.server.dao.sql.JpaAbstractDao;
import org.thingsboard.server.dao.util.SqlDao;
import java.util.Arrays;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.stream.Collectors;
@Component
@SqlDao
@ -51,29 +46,16 @@ import java.util.stream.Collectors;
public class JpaJobDao extends JpaAbstractDao<JobEntity, Job> implements JobDao {
private final JobRepository jobRepository;
private final EntityService entityService;
@Override
public PageData<Job> findByTenantIdAndFilter(TenantId tenantId, JobFilter filter, PageLink pageLink) {
PageData<Job> jobs = DaoUtil.toPageData(jobRepository.findByTenantIdAndTypesAndStatusesAndEntitiesAndTimeAndSearchText(tenantId.getId(),
return DaoUtil.toPageData(jobRepository.findByTenantIdAndTypesAndStatusesAndEntitiesAndTimeAndSearchText(tenantId.getId(),
CollectionsUtil.isEmpty(filter.getTypes()) ? null : filter.getTypes(),
CollectionsUtil.isEmpty(filter.getStatuses()) ? null : filter.getStatuses(),
CollectionsUtil.isEmpty(filter.getEntities()) ? null : filter.getEntities(),
filter.getStartTime() != null ? filter.getStartTime() : 0,
filter.getEndTime() != null ? filter.getEndTime() : 0,
Strings.emptyToNull(pageLink.getTextSearch()), DaoUtil.toPageable(pageLink)));
Set<EntityId> entityIds = jobs.getData().stream()
.map(Job::getEntityId)
.collect(Collectors.toSet());
Map<EntityId, EntityInfo> entityInfos = entityService.fetchEntityInfos(tenantId, null, entityIds);
jobs.getData().forEach(job -> {
EntityInfo entityInfo = entityInfos.get(job.getEntityId());
if (entityInfo != null) {
job.setEntityName(entityInfo.getName());
}
});
return jobs;
}
@Override

Loading…
Cancel
Save