From 2cd0d0ca8ba7a8e522ea9748b3a8b00d5ca93b72 Mon Sep 17 00:00:00 2001
From: opensnail <598092184@qq.com>
Date: Thu, 11 Jul 2024 23:57:36 +0800
Subject: [PATCH] =?UTF-8?q?fix(sj=5F1.1.0-beta3):=201.=20=E4=BF=AE?=
=?UTF-8?q?=E5=A4=8D=E5=88=A0=E9=99=A4=E5=90=8E=EF=BC=8C=E7=9C=8B=E6=9D=BF?=
=?UTF-8?q?=E9=A1=B5=E9=9D=A2=E6=98=BE=E7=A4=BA=E7=A9=BA=E7=9A=84=E9=97=AE?=
=?UTF-8?q?=E9=A2=98=202.=20=E4=BF=AE=E5=A4=8D=E5=AE=9A=E6=97=B6=E5=BD=92?=
=?UTF-8?q?=E6=A1=A3=E4=BA=86=E5=B7=B2=E7=BB=8F=E5=88=A0=E9=99=A4=E7=9A=84?=
=?UTF-8?q?=E4=BB=BB=E5=8A=A1=E9=97=AE=E9=A2=98=203.=20=E4=BF=AE=E5=A4=8D?=
=?UTF-8?q?=E5=88=A0=E9=99=A4=E7=BB=84=E6=9C=AA=E5=88=A0=E9=99=A4=E5=8F=B7?=
=?UTF-8?q?=E6=AE=B5=E6=A8=A1=E5=BC=8F=E5=BA=8F=E5=8F=B7ID=E5=88=86?=
=?UTF-8?q?=E9=85=8D=E8=A1=A8?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../template/mapper/JobTaskBatchMapper.xml | 6 ++--
.../template/mapper/RetryTaskLogMapper.xml | 19 +++++-----
.../support/schedule/JobSummarySchedule.java | 18 +++++-----
.../actor/scan/AbstractScanGroup.java | 3 ++
.../schedule/RetrySummarySchedule.java | 15 +++-----
.../service/impl/GroupConfigServiceImpl.java | 5 +++
.../web/service/impl/JobServiceImpl.java | 16 ++++++++-
.../service/impl/SceneConfigServiceImpl.java | 35 +++++++++++++++----
.../web/service/impl/WorkflowServiceImpl.java | 22 +++++++++---
9 files changed, 98 insertions(+), 41 deletions(-)
diff --git a/snail-job-datasource/snail-job-datasource-template/src/main/resources/template/mapper/JobTaskBatchMapper.xml b/snail-job-datasource/snail-job-datasource-template/src/main/resources/template/mapper/JobTaskBatchMapper.xml
index f1486b8e..ccd87fd5 100644
--- a/snail-job-datasource/snail-job-datasource-template/src/main/resources/template/mapper/JobTaskBatchMapper.xml
+++ b/snail-job-datasource/snail-job-datasource-template/src/main/resources/template/mapper/JobTaskBatchMapper.xml
@@ -29,7 +29,8 @@
SUM(CASE WHEN (task_batch_status = 6) THEN 1 ELSE 0 END) AS cancelNum,
SUM(CASE WHEN (task_batch_status = 5) THEN 1 ELSE 0 END) AS stopNum,
SUM(CASE WHEN (task_batch_status = 4) THEN 1 ELSE 0 END) AS failNum
- FROM sj_job_task_batch
+ FROM sj_job_task_batch batch
+ JOIN (select id as jobId from sj_job) job ON batch.job_id = job.jobId
${ew.customSqlSegment}
@@ -45,7 +46,8 @@
SUM(CASE WHEN (task_batch_status = 6) THEN 1 ELSE 0 END) AS cancelNum,
SUM(CASE WHEN (task_batch_status = 5) THEN 1 ELSE 0 END) AS stopNum,
SUM(CASE WHEN (task_batch_status = 4) THEN 1 ELSE 0 END) AS failNum
- FROM sj_workflow_task_batch
+ FROM sj_workflow_task_batch batch
+ JOIN (select id as flowId from sj_workflow) flow ON batch.workflow_id = flow.flowId
${ew.customSqlSegment}
diff --git a/snail-job-datasource/snail-job-datasource-template/src/main/resources/template/mapper/RetryTaskLogMapper.xml b/snail-job-datasource/snail-job-datasource-template/src/main/resources/template/mapper/RetryTaskLogMapper.xml
index 5fcb5c92..49f27115 100644
--- a/snail-job-datasource/snail-job-datasource-template/src/main/resources/template/mapper/RetryTaskLogMapper.xml
+++ b/snail-job-datasource/snail-job-datasource-template/src/main/resources/template/mapper/RetryTaskLogMapper.xml
@@ -18,14 +18,17 @@
diff --git a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/schedule/JobSummarySchedule.java b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/schedule/JobSummarySchedule.java
index 76f2a1fd..857424fc 100644
--- a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/schedule/JobSummarySchedule.java
+++ b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/schedule/JobSummarySchedule.java
@@ -12,12 +12,15 @@ import com.aizuda.snailjob.server.common.enums.SyetemTaskTypeEnum;
import com.aizuda.snailjob.server.common.schedule.AbstractSchedule;
import com.aizuda.snailjob.server.common.triple.Pair;
import com.aizuda.snailjob.template.datasource.persistence.dataobject.JobBatchSummaryResponseDO;
+import com.aizuda.snailjob.template.datasource.persistence.mapper.JobMapper;
import com.aizuda.snailjob.template.datasource.persistence.mapper.JobSummaryMapper;
import com.aizuda.snailjob.template.datasource.persistence.mapper.JobTaskBatchMapper;
import com.aizuda.snailjob.template.datasource.persistence.po.JobSummary;
import com.aizuda.snailjob.template.datasource.persistence.po.JobTaskBatch;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Lists;
+import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -40,15 +43,12 @@ import java.util.stream.Collectors;
* @since 2.5.0
*/
@Component
-@Slf4j
+@RequiredArgsConstructor
public class JobSummarySchedule extends AbstractSchedule implements Lifecycle {
-
- @Autowired
- private JobTaskBatchMapper jobTaskBatchMapper;
- @Autowired
- private JobSummaryMapper jobSummaryMapper;
- @Autowired
- private SystemProperties systemProperties;
+ private final JobTaskBatchMapper jobTaskBatchMapper;
+ private final JobSummaryMapper jobSummaryMapper;
+ private final JobMapper jobMapper;
+ private final SystemProperties systemProperties;
@Override
public String lockName() {
@@ -79,7 +79,7 @@ public class JobSummarySchedule extends AbstractSchedule implements Lifecycle {
.groupBy(JobTaskBatch::getNamespaceId, JobTaskBatch::getGroupName,
JobTaskBatch::getJobId, JobTaskBatch::getTaskBatchStatus, JobTaskBatch::getOperationReason);
List summaryResponseDOList = jobTaskBatchMapper.selectJobBatchSummaryList(wrapper);
- if (summaryResponseDOList == null || summaryResponseDOList.size() < 1) {
+ if (CollUtil.isEmpty(summaryResponseDOList)) {
continue;
}
diff --git a/snail-job-server/snail-job-server-retry-task/src/main/java/com/aizuda/snailjob/server/retry/task/support/dispatch/actor/scan/AbstractScanGroup.java b/snail-job-server/snail-job-server-retry-task/src/main/java/com/aizuda/snailjob/server/retry/task/support/dispatch/actor/scan/AbstractScanGroup.java
index 5d474db3..86b5e7f2 100644
--- a/snail-job-server/snail-job-server-retry-task/src/main/java/com/aizuda/snailjob/server/retry/task/support/dispatch/actor/scan/AbstractScanGroup.java
+++ b/snail-job-server/snail-job-server-retry-task/src/main/java/com/aizuda/snailjob/server/retry/task/support/dispatch/actor/scan/AbstractScanGroup.java
@@ -113,6 +113,9 @@ public abstract class AbstractScanGroup extends AbstractActor {
}
private void processRetryPartitionTasks(List extends PartitionTask> partitionTasks, final ScanTask scanTask) {
+ if (CollUtil.isEmpty(partitionTasks)) {
+ return;
+ }
// 批次查询场景
Map sceneConfigMap = getSceneConfigMap(partitionTasks, scanTask);
diff --git a/snail-job-server/snail-job-server-retry-task/src/main/java/com/aizuda/snailjob/server/retry/task/support/schedule/RetrySummarySchedule.java b/snail-job-server/snail-job-server-retry-task/src/main/java/com/aizuda/snailjob/server/retry/task/support/schedule/RetrySummarySchedule.java
index a2b49181..087e417d 100644
--- a/snail-job-server/snail-job-server-retry-task/src/main/java/com/aizuda/snailjob/server/retry/task/support/schedule/RetrySummarySchedule.java
+++ b/snail-job-server/snail-job-server-retry-task/src/main/java/com/aizuda/snailjob/server/retry/task/support/schedule/RetrySummarySchedule.java
@@ -15,8 +15,7 @@ import com.aizuda.snailjob.template.datasource.persistence.po.RetryTaskLog;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
+import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import java.time.Duration;
@@ -33,15 +32,11 @@ import java.util.*;
* @since 2.1.0
*/
@Component
-@Slf4j
+@RequiredArgsConstructor
public class RetrySummarySchedule extends AbstractSchedule implements Lifecycle {
-
- @Autowired
- private RetryTaskLogMapper retryTaskLogMapper;
- @Autowired
- private RetrySummaryMapper retrySummaryMapper;
- @Autowired
- private SystemProperties systemProperties;
+ private final RetryTaskLogMapper retryTaskLogMapper;
+ private final RetrySummaryMapper retrySummaryMapper;
+ private final SystemProperties systemProperties;
@Override
public String lockName() {
diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/GroupConfigServiceImpl.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/GroupConfigServiceImpl.java
index 612fe78f..ec340e07 100644
--- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/GroupConfigServiceImpl.java
+++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/GroupConfigServiceImpl.java
@@ -483,6 +483,11 @@ public class GroupConfigServiceImpl implements GroupConfigService {
.eq(GroupConfig::getGroupName, groupName)),
() -> new SnailJobServerException("删除组失败, 请检查状态是否关闭状态"));
+ Assert.isTrue(1 == sequenceAllocMapper.delete(new LambdaQueryWrapper()
+ .eq(SequenceAlloc::getNamespaceId, namespaceId)
+ .eq(SequenceAlloc::getGroupName, groupName)),
+ () -> new SnailJobServerException("删除分布式Id表数据失败"));
+
return Boolean.TRUE;
}
diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/JobServiceImpl.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/JobServiceImpl.java
index 5331bf8c..bc6083d6 100644
--- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/JobServiceImpl.java
+++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/JobServiceImpl.java
@@ -12,6 +12,7 @@ import com.aizuda.snailjob.server.common.WaitStrategy;
import com.aizuda.snailjob.server.common.config.SystemProperties;
import com.aizuda.snailjob.server.common.dto.PartitionTask;
import com.aizuda.snailjob.server.common.enums.JobTaskExecutorSceneEnum;
+import com.aizuda.snailjob.server.common.enums.SyetemTaskTypeEnum;
import com.aizuda.snailjob.server.common.exception.SnailJobServerException;
import com.aizuda.snailjob.server.common.strategy.WaitStrategies;
import com.aizuda.snailjob.server.common.util.CronUtils;
@@ -31,9 +32,10 @@ import com.aizuda.snailjob.server.web.service.handler.GroupHandler;
import com.aizuda.snailjob.server.web.util.UserSessionUtils;
import com.aizuda.snailjob.template.datasource.access.AccessTemplate;
import com.aizuda.snailjob.template.datasource.persistence.mapper.JobMapper;
+import com.aizuda.snailjob.template.datasource.persistence.mapper.JobSummaryMapper;
import com.aizuda.snailjob.template.datasource.persistence.po.GroupConfig;
import com.aizuda.snailjob.template.datasource.persistence.po.Job;
-import com.aizuda.snailjob.template.datasource.persistence.po.RetrySceneConfig;
+import com.aizuda.snailjob.template.datasource.persistence.po.JobSummary;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import lombok.EqualsAndHashCode;
@@ -63,6 +65,7 @@ public class JobServiceImpl implements JobService {
private final JobPrepareHandler terminalJobPrepareHandler;
private final AccessTemplate accessTemplate;
private final GroupHandler groupHandler;
+ private final JobSummaryMapper jobSummaryMapper;
private static Long calculateNextTriggerAt(final JobRequestVO jobRequestVO, Long time) {
if (Objects.equals(jobRequestVO.getTriggerType(), SystemConstants.WORKFLOW_TRIGGER_TYPE)) {
@@ -287,6 +290,7 @@ public class JobServiceImpl implements JobService {
}
@Override
+ @Transactional
public Boolean deleteJobByIds(Set ids) {
String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId();
@@ -297,6 +301,16 @@ public class JobServiceImpl implements JobService {
.in(Job::getId, ids)
), () -> new SnailJobServerException("删除定时任务失败, 请检查任务状态是否关闭状态"));
+ List jobSummaries = jobSummaryMapper.selectList(new LambdaQueryWrapper()
+ .select(JobSummary::getId)
+ .in(JobSummary::getBusinessId, ids)
+ .eq(JobSummary::getNamespaceId, namespaceId)
+ .eq(JobSummary::getSystemTaskType, SyetemTaskTypeEnum.JOB.getType())
+ );
+ if (CollUtil.isNotEmpty(jobSummaries)) {
+ jobSummaryMapper.deleteByIds(StreamUtils.toSet(jobSummaries, JobSummary::getId));
+ }
+
return Boolean.TRUE;
}
diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/SceneConfigServiceImpl.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/SceneConfigServiceImpl.java
index 2937bf3d..1d3cff70 100644
--- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/SceneConfigServiceImpl.java
+++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/SceneConfigServiceImpl.java
@@ -25,7 +25,9 @@ import com.aizuda.snailjob.server.web.service.handler.SyncConfigHandler;
import com.aizuda.snailjob.server.web.util.UserSessionUtils;
import com.aizuda.snailjob.template.datasource.access.AccessTemplate;
import com.aizuda.snailjob.template.datasource.access.ConfigAccess;
+import com.aizuda.snailjob.template.datasource.persistence.mapper.RetrySummaryMapper;
import com.aizuda.snailjob.template.datasource.persistence.po.RetrySceneConfig;
+import com.aizuda.snailjob.template.datasource.persistence.po.RetrySummary;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
@@ -53,6 +55,7 @@ public class SceneConfigServiceImpl implements SceneConfigService {
private final AccessTemplate accessTemplate;
private final GroupHandler groupHandler;
+ private final RetrySummaryMapper retrySummaryMapper;
private static void checkExecuteInterval(SceneConfigRequestVO requestVO) {
if (Lists.newArrayList(WaitStrategies.WaitStrategyEnum.FIXED.getType(),
@@ -220,15 +223,35 @@ public class SceneConfigServiceImpl implements SceneConfigService {
}
@Override
+ @Transactional
public boolean deleteByIds(Set ids) {
String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId();
- Assert.isTrue(ids.size() == accessTemplate.getSceneConfigAccess().delete(
- new LambdaQueryWrapper()
- .eq(RetrySceneConfig::getNamespaceId, namespaceId)
- .eq(RetrySceneConfig::getSceneStatus, StatusEnum.NO.getStatus())
- .in(RetrySceneConfig::getId, ids)
- ), () -> new SnailJobServerException("删除重试场景失败, 请检查场景状态是否关闭状态"));
+ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper()
+ .select(RetrySceneConfig::getSceneName, RetrySceneConfig::getGroupName)
+ .eq(RetrySceneConfig::getNamespaceId, namespaceId)
+ .eq(RetrySceneConfig::getSceneStatus, StatusEnum.NO.getStatus())
+ .in(RetrySceneConfig::getId, ids);
+
+ List sceneConfigs = accessTemplate.getSceneConfigAccess().list(queryWrapper);
+ Assert.notEmpty(sceneConfigs, () -> new SnailJobServerException("删除重试场景失败, 请检查场景状态是否关闭状态"));
+
+ Assert.isTrue(ids.size() == accessTemplate.getSceneConfigAccess().delete(queryWrapper),
+ () -> new SnailJobServerException("删除重试场景失败, 请检查场景状态是否关闭状态"));
+
+ Set sceneNames = StreamUtils.toSet(sceneConfigs, RetrySceneConfig::getSceneName);
+ Set groupNames = StreamUtils.toSet(sceneConfigs, RetrySceneConfig::getGroupName);
+ List retrySummaries = retrySummaryMapper.selectList(
+ new LambdaQueryWrapper()
+ .select(RetrySummary::getId)
+ .eq(RetrySummary::getNamespaceId, namespaceId)
+ .in(RetrySummary::getGroupName, groupNames)
+ .in(RetrySummary::getSceneName, sceneNames)
+ );
+ if (CollUtil.isNotEmpty(retrySummaries)) {
+ Assert.isTrue(retrySummaries.size() == retrySummaryMapper.deleteByIds(StreamUtils.toSet(retrySummaries, RetrySummary::getId))
+ , () -> new SnailJobServerException("删除汇总表数据失败"));
+ }
return Boolean.TRUE;
}
diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/WorkflowServiceImpl.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/WorkflowServiceImpl.java
index 36ab9492..2822985d 100644
--- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/WorkflowServiceImpl.java
+++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/impl/WorkflowServiceImpl.java
@@ -14,11 +14,11 @@ import com.aizuda.snailjob.common.core.util.StreamUtils;
import com.aizuda.snailjob.common.log.SnailJobLog;
import com.aizuda.snailjob.server.common.WaitStrategy;
import com.aizuda.snailjob.server.common.config.SystemProperties;
-import com.aizuda.snailjob.server.common.dto.DecisionConfig;
import com.aizuda.snailjob.server.common.dto.JobTaskConfig;
import com.aizuda.snailjob.server.common.dto.PartitionTask;
import com.aizuda.snailjob.server.common.enums.ExpressionTypeEnum;
import com.aizuda.snailjob.server.common.enums.JobTaskExecutorSceneEnum;
+import com.aizuda.snailjob.server.common.enums.SyetemTaskTypeEnum;
import com.aizuda.snailjob.server.common.exception.SnailJobServerException;
import com.aizuda.snailjob.server.common.strategy.WaitStrategies;
import com.aizuda.snailjob.server.common.util.CronUtils;
@@ -41,12 +41,10 @@ import com.aizuda.snailjob.server.web.service.handler.WorkflowHandler;
import com.aizuda.snailjob.server.web.util.UserSessionUtils;
import com.aizuda.snailjob.template.datasource.access.AccessTemplate;
import com.aizuda.snailjob.template.datasource.persistence.mapper.JobMapper;
+import com.aizuda.snailjob.template.datasource.persistence.mapper.JobSummaryMapper;
import com.aizuda.snailjob.template.datasource.persistence.mapper.WorkflowMapper;
import com.aizuda.snailjob.template.datasource.persistence.mapper.WorkflowNodeMapper;
-import com.aizuda.snailjob.template.datasource.persistence.po.GroupConfig;
-import com.aizuda.snailjob.template.datasource.persistence.po.Job;
-import com.aizuda.snailjob.template.datasource.persistence.po.Workflow;
-import com.aizuda.snailjob.template.datasource.persistence.po.WorkflowNode;
+import com.aizuda.snailjob.template.datasource.persistence.po.*;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageDTO;
import com.google.common.collect.Lists;
@@ -85,6 +83,7 @@ public class WorkflowServiceImpl implements WorkflowService {
private final JobMapper jobMapper;
private final AccessTemplate accessTemplate;
private final GroupHandler groupHandler;
+ private final JobSummaryMapper jobSummaryMapper;
private static Long calculateNextTriggerAt(final WorkflowRequestVO workflowRequestVO, Long time) {
checkExecuteInterval(workflowRequestVO);
@@ -350,6 +349,7 @@ public class WorkflowServiceImpl implements WorkflowService {
}
@Override
+ @Transactional
public Boolean deleteByIds(Set ids) {
String namespaceId = UserSessionUtils.currentUserSession().getNamespaceId();
@@ -360,6 +360,18 @@ public class WorkflowServiceImpl implements WorkflowService {
.in(Workflow::getId, ids)
), () -> new SnailJobServerException("删除工作流任务失败, 请检查任务状态是否关闭状态"));
+ List jobSummaries = jobSummaryMapper.selectList(new LambdaQueryWrapper()
+ .select(JobSummary::getId)
+ .in(JobSummary::getBusinessId, ids)
+ .eq(JobSummary::getNamespaceId, namespaceId)
+ .eq(JobSummary::getSystemTaskType, SyetemTaskTypeEnum.WORKFLOW.getType())
+ );
+ if (CollUtil.isNotEmpty(jobSummaries)) {
+ Assert.isTrue(jobSummaries.size() ==
+ jobSummaryMapper.deleteByIds(StreamUtils.toSet(jobSummaries, JobSummary::getId)),
+ () -> new SnailJobServerException("汇总表删除失败")
+ );
+ }
return Boolean.TRUE;
}