From 8e6e687c5df0607d63acd024f5bafc146332a451 Mon Sep 17 00:00:00 2001 From: ViacheslavKlimov Date: Wed, 28 May 2025 14:53:11 +0300 Subject: [PATCH] Refactor find jobs by filter --- .../server/dao/config/JpaDaoConfig.java | 2 +- .../server/dao/entity/BaseEntityService.java | 6 +++--- .../server/dao/job/DefaultJobService.java | 20 ++++++++++++++++++- .../server/dao/sql/job/JpaJobDao.java | 20 +------------------ 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/dao/src/main/java/org/thingsboard/server/dao/config/JpaDaoConfig.java b/dao/src/main/java/org/thingsboard/server/dao/config/JpaDaoConfig.java index 963a114e8f..164e4cdb3c 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/config/JpaDaoConfig.java +++ b/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) diff --git a/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java b/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java index 5df926faf2..2fca546fc9 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/entity/BaseEntityService.java +++ b/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; + 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; } diff --git a/dao/src/main/java/org/thingsboard/server/dao/job/DefaultJobService.java b/dao/src/main/java/org/thingsboard/server/dao/job/DefaultJobService.java index 5afac21e5a..153e95a404 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/job/DefaultJobService.java +++ b/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 findJobsByFilter(TenantId tenantId, JobFilter filter, PageLink pageLink) { - return jobDao.findByTenantIdAndFilter(tenantId, filter, pageLink); + PageData jobs = jobDao.findByTenantIdAndFilter(tenantId, filter, pageLink); + + Set entityIds = jobs.getData().stream() + .map(Job::getEntityId) + .collect(Collectors.toSet()); + Map 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 diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/job/JpaJobDao.java b/dao/src/main/java/org/thingsboard/server/dao/sql/job/JpaJobDao.java index 339f6af033..40d5177ad6 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/job/JpaJobDao.java +++ b/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 implements JobDao { private final JobRepository jobRepository; - private final EntityService entityService; @Override public PageData findByTenantIdAndFilter(TenantId tenantId, JobFilter filter, PageLink pageLink) { - PageData 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 entityIds = jobs.getData().stream() - .map(Job::getEntityId) - .collect(Collectors.toSet()); - Map 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