diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/job/JobService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/job/JobService.java index dd333c072e..65b21853b8 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/job/JobService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/job/JobService.java @@ -37,4 +37,6 @@ public interface JobService extends EntityDaoService { PageData findJobsByTenantId(TenantId tenantId, PageLink pageLink); + Job findJobByKey(TenantId tenantId, String key); + } 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 f2802f4771..6cc315c8f8 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 @@ -29,8 +29,8 @@ import org.thingsboard.server.common.data.job.JobResult; import org.thingsboard.server.common.data.job.JobStats; import org.thingsboard.server.common.data.job.JobStatus; import org.thingsboard.server.common.data.job.JobType; -import org.thingsboard.server.common.data.job.TaskResult; import org.thingsboard.server.common.data.job.TaskFailure; +import org.thingsboard.server.common.data.job.TaskResult; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.dao.entity.AbstractEntityService; @@ -187,6 +187,11 @@ public class DefaultJobService extends AbstractEntityService implements JobServi return jobDao.findByTenantId(tenantId, pageLink); } + @Override + public Job findJobByKey(TenantId tenantId, String key) { + return jobDao.findByKey(tenantId, key); + } + private Job findForUpdate(TenantId tenantId, JobId jobId) { return jobDao.findByIdForUpdate(tenantId, jobId); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/job/JobDao.java b/dao/src/main/java/org/thingsboard/server/dao/job/JobDao.java index 799717fea8..a892fb3e22 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/job/JobDao.java +++ b/dao/src/main/java/org/thingsboard/server/dao/job/JobDao.java @@ -30,6 +30,8 @@ public interface JobDao extends Dao { Job findByIdForUpdate(TenantId tenantId, JobId jobId); + Job findByKey(TenantId tenantId, String key); + boolean existsByKeyAndStatusOneOf(String key, JobStatus... statuses); boolean existsByTenantIdAndTypeAndStatusOneOf(TenantId tenantId, JobType type, JobStatus... statuses); diff --git a/dao/src/main/java/org/thingsboard/server/dao/sql/job/JobRepository.java b/dao/src/main/java/org/thingsboard/server/dao/sql/job/JobRepository.java index bec5bf5f87..bbbdbf3a47 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/sql/job/JobRepository.java +++ b/dao/src/main/java/org/thingsboard/server/dao/sql/job/JobRepository.java @@ -35,8 +35,8 @@ import java.util.UUID; public interface JobRepository extends JpaRepository { @Query("SELECT j FROM JobEntity j WHERE j.tenantId = :tenantId " + - "AND (:searchText IS NULL OR ilike(j.key, concat('%', :searchText, '%')) = true " + - "OR ilike(j.description, concat('%', :searchText, '%')) = true)") + "AND (:searchText IS NULL OR ilike(j.key, concat('%', :searchText, '%')) = true " + + "OR ilike(j.description, concat('%', :searchText, '%')) = true)") Page findByTenantIdAndSearchText(@Param("tenantId") UUID tenantId, @Param("searchText") String searchText, Pageable pageable); @@ -45,6 +45,8 @@ public interface JobRepository extends JpaRepository { @Query("SELECT j FROM JobEntity j WHERE j.id = :id") JobEntity findByIdForUpdate(UUID id); + JobEntity findByTenantIdAndKey(@Param("tenantId") UUID tenantId, @Param("key") String key); + boolean existsByKeyAndStatusIn(String key, List statuses); boolean existsByTenantIdAndTypeAndStatusIn(UUID tenantId, JobType type, List statuses); 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 1b3a394e28..71bbdb2f79 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 @@ -29,9 +29,9 @@ import org.thingsboard.server.common.data.job.JobType; import org.thingsboard.server.common.data.page.PageData; import org.thingsboard.server.common.data.page.PageLink; import org.thingsboard.server.dao.DaoUtil; +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.job.JobDao; import org.thingsboard.server.dao.util.SqlDao; import java.util.Arrays; @@ -54,6 +54,11 @@ public class JpaJobDao extends JpaAbstractDao implements JobDao return DaoUtil.getData(jobRepository.findByIdForUpdate(jobId.getId())); } + @Override + public Job findByKey(TenantId tenantId, String key) { + return DaoUtil.getData(jobRepository.findByTenantIdAndKey(tenantId.getId(), key)); + } + @Override public boolean existsByKeyAndStatusOneOf(String key, JobStatus... statuses) { return jobRepository.existsByKeyAndStatusIn(key, Arrays.stream(statuses).toList());