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 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; }