From da85ee21d2f0c7b093eedb6bab0daf3801cca8b7 Mon Sep 17 00:00:00 2001 From: wodeyangzipingpingwuqi Date: Thu, 12 Dec 2024 17:11:04 +0800 Subject: [PATCH] =?UTF-8?q?feat(sj=5F1.3.0-beta1):=201=E3=80=81=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E9=87=8D=E8=AF=95=E5=9C=BA=E6=99=AF=E5=91=8A=E8=AD=A6?= =?UTF-8?q?=E9=80=9A=E7=9F=A5=E9=85=8D=E7=BD=AE=202=E3=80=81=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=B7=A5=E4=BD=9C=E6=B5=81=E4=BB=BB=E5=8A=A1=E5=91=8A?= =?UTF-8?q?=E8=AD=A6=E9=80=9A=E7=9F=A5=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../persistence/po/RetrySceneConfig.java | 4 +++ .../datasource/persistence/po/Workflow.java | 4 +++ .../server/common/AlarmInfoConverter.java | 3 --- .../server/common/alarm/AbstractAlarm.java | 13 +++------ .../server/common/alarm/AbstractJobAlarm.java | 4 +-- .../common/alarm/AbstractRetryAlarm.java | 10 +++---- .../common/alarm/AbstractWorkflowAlarm.java | 4 +-- .../server/common/dto/JobAlarmInfo.java | 6 +++++ .../job/task/dto/CompleteJobBatchDTO.java | 1 + .../task/dto/JobTaskFailAlarmEventDTO.java | 18 +++++++++++++ .../alarm/event/JobTaskFailAlarmEvent.java | 9 ++++--- .../listener/JobTaskFailAlarmListener.java | 23 +++++++++------- .../support/dispatch/JobExecutorActor.java | 13 +++++++-- .../dispatch/JobExecutorResultActor.java | 4 +-- .../executor/job/RequestClientActor.java | 7 +++-- .../batch/JobTaskBatchGenerator.java | 8 +++--- .../prepare/job/RunningJobPrepareHandler.java | 8 +++--- .../job/AbstractJobExecutorResultHandler.java | 4 ++- .../result/job/JobExecutorResultContext.java | 4 +++ .../support/timer/JobTimeoutCheckTask.java | 4 ++- .../model/request/SceneConfigRequestVO.java | 6 +++++ .../web/model/request/WorkflowRequestVO.java | 5 ++++ .../web/model/response/JobResponseVO.java | 5 ++++ .../model/response/SceneConfigResponseVO.java | 5 ++++ .../response/WorkflowDetailResponseVO.java | 6 +++++ .../model/response/WorkflowResponseVO.java | 5 ++++ .../convert/JobResponseVOConverter.java | 9 ++++--- .../service/convert/SceneConfigConverter.java | 27 +++++++++++++++++++ .../SceneConfigResponseVOConverter.java | 19 ++++++++++++- .../service/convert/WorkflowConverter.java | 25 ++++++++++++++++- .../web/service/impl/JobServiceImpl.java | 1 + .../service/impl/SceneConfigServiceImpl.java | 6 ++--- .../web/service/impl/WorkflowServiceImpl.java | 5 ++-- 33 files changed, 214 insertions(+), 61 deletions(-) create mode 100644 snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/dto/JobTaskFailAlarmEventDTO.java diff --git a/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/po/RetrySceneConfig.java b/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/po/RetrySceneConfig.java index 8b552770..0a8e5a33 100644 --- a/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/po/RetrySceneConfig.java +++ b/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/po/RetrySceneConfig.java @@ -42,4 +42,8 @@ public class RetrySceneConfig extends CreateUpdateDt { private Integer executorTimeout; + /** + * 通知告警场景配置id列表 + */ + private String notifyIds; } diff --git a/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/po/Workflow.java b/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/po/Workflow.java index 97071afe..b09f3c0b 100644 --- a/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/po/Workflow.java +++ b/snail-job-datasource/snail-job-datasource-template/src/main/java/com/aizuda/snailjob/template/datasource/persistence/po/Workflow.java @@ -105,4 +105,8 @@ public class Workflow extends CreateUpdateDt { */ private Integer deleted; + /** + * 通知告警场景配置id列表 + */ + private String notifyIds; } diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/AlarmInfoConverter.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/AlarmInfoConverter.java index f2b7cf25..d5e2ad5b 100644 --- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/AlarmInfoConverter.java +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/AlarmInfoConverter.java @@ -8,7 +8,6 @@ import com.aizuda.snailjob.server.common.dto.RetryAlarmInfo; import com.aizuda.snailjob.server.common.dto.WorkflowAlarmInfo; import com.aizuda.snailjob.template.datasource.persistence.dataobject.JobBatchResponseDO; import com.aizuda.snailjob.template.datasource.persistence.dataobject.WorkflowBatchResponseDO; -import com.aizuda.snailjob.template.datasource.persistence.po.JobNotifyConfig; import com.aizuda.snailjob.template.datasource.persistence.po.NotifyConfig; import com.aizuda.snailjob.template.datasource.persistence.po.RetryDeadLetter; import com.aizuda.snailjob.template.datasource.persistence.po.RetryTask; @@ -58,8 +57,6 @@ public interface AlarmInfoConverter { return new HashSet<>(JsonUtil.parseList(notifyRecipientIdsStr, Long.class)); } - List jobToNotifyConfigInfos(List notifyConfigs); - List toJobAlarmInfos(List jobBatchResponse); List toWorkflowAlarmInfos(List workflowBatchResponses); diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/alarm/AbstractAlarm.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/alarm/AbstractAlarm.java index fd7290c7..3901669e 100644 --- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/alarm/AbstractAlarm.java +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/alarm/AbstractAlarm.java @@ -1,4 +1,4 @@ -package com.aizuda.snailjob.client.common.annotation; +package com.aizuda.snailjob.server.common.alarm; import cn.hutool.core.collection.CollUtil; import com.aizuda.snailjob.common.core.alarm.Alarm; @@ -90,12 +90,10 @@ public abstract class AbstractAlarm>, List> obtainNotifyConfig(Set namespaceIds, - Set groupNames, Set notifyIds) { - + Set groupNames, Set notifyIds) { // 批量获取所需的通知配置 List notifyConfigs = accessTemplate.getNotifyConfigAccess().list( new LambdaQueryWrapper() @@ -138,13 +136,12 @@ public abstract class AbstractAlarm getSystemTaskType(); protected abstract Map>, List> convertAlarmDTO(List alarmData, - Set namespaceIds, Set groupNames, Set notifyIds); + Set namespaceIds, Set groupNames, Set notifyIds); protected abstract List poll() throws InterruptedException; @@ -186,11 +183,9 @@ public abstract class AbstractAlarm alarm = SnailJobAlarmFactory.getAlarmType( - recipientInfo.getNotifyType()); + Alarm alarm = SnailJobAlarmFactory.getAlarmType(recipientInfo.getNotifyType()); alarm.asyncSendMessage(context); } - } } diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/alarm/AbstractJobAlarm.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/alarm/AbstractJobAlarm.java index b8ead066..8ddcc8ed 100644 --- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/alarm/AbstractJobAlarm.java +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/alarm/AbstractJobAlarm.java @@ -1,6 +1,6 @@ package com.aizuda.snailjob.server.common.alarm; -import com.aizuda.snailjob.client.common.annotation.AbstractAlarm; +import cn.hutool.core.util.StrUtil; import com.aizuda.snailjob.common.core.util.JsonUtil; import com.aizuda.snailjob.common.core.util.StreamUtils; import com.aizuda.snailjob.server.common.dto.JobAlarmInfo; @@ -23,7 +23,7 @@ public abstract class AbstractJobAlarm extends Abstr return StreamUtils.groupByKey(alarmInfos, alarmInfo -> { String namespaceId = alarmInfo.getNamespaceId(); String groupName = alarmInfo.getGroupName(); - HashSet notifyIdsSet = Objects.isNull(alarmInfo.getNotifyIds()) ? new HashSet<>() : new HashSet<>(JsonUtil.parseList(alarmInfo.getNotifyIds(), Long.class)); + HashSet notifyIdsSet = StrUtil.isBlank(alarmInfo.getNotifyIds()) ? new HashSet<>() : new HashSet<>(JsonUtil.parseList(alarmInfo.getNotifyIds(), Long.class)); namespaceIds.add(namespaceId); groupNames.add(groupName); diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/alarm/AbstractRetryAlarm.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/alarm/AbstractRetryAlarm.java index dd9bd1ee..4101934b 100644 --- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/alarm/AbstractRetryAlarm.java +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/alarm/AbstractRetryAlarm.java @@ -1,6 +1,6 @@ package com.aizuda.snailjob.server.common.alarm; -import com.aizuda.snailjob.client.common.annotation.AbstractAlarm; +import cn.hutool.core.util.StrUtil; import com.aizuda.snailjob.common.core.util.JsonUtil; import com.aizuda.snailjob.common.core.util.StreamUtils; import com.aizuda.snailjob.server.common.dto.RetryAlarmInfo; @@ -17,16 +17,12 @@ import java.util.*; */ public abstract class AbstractRetryAlarm extends AbstractAlarm { @Override - protected Map>, List> convertAlarmDTO( - List retryAlarmInfoList, - Set namespaceIds, - Set groupNames, - Set notifyIds) { + protected Map>, List> convertAlarmDTO(List retryAlarmInfoList, Set namespaceIds, Set groupNames, Set notifyIds) { return StreamUtils.groupByKey(retryAlarmInfoList, retryAlarmInfo -> { String namespaceId = retryAlarmInfo.getNamespaceId(); String groupName = retryAlarmInfo.getGroupName(); - HashSet notifyIdsSet = Objects.isNull(retryAlarmInfo.getNotifyIds()) ? new HashSet<>() : new HashSet<>(JsonUtil.parseList(retryAlarmInfo.getNotifyIds(), Long.class)); + HashSet notifyIdsSet = StrUtil.isBlank(retryAlarmInfo.getNotifyIds()) ? new HashSet<>() : new HashSet<>(JsonUtil.parseList(retryAlarmInfo.getNotifyIds(), Long.class)); namespaceIds.add(namespaceId); groupNames.add(groupName); diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/alarm/AbstractWorkflowAlarm.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/alarm/AbstractWorkflowAlarm.java index a0088609..63b2bd7a 100644 --- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/alarm/AbstractWorkflowAlarm.java +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/alarm/AbstractWorkflowAlarm.java @@ -1,6 +1,6 @@ package com.aizuda.snailjob.server.common.alarm; -import com.aizuda.snailjob.client.common.annotation.AbstractAlarm; +import cn.hutool.core.util.StrUtil; import com.aizuda.snailjob.common.core.util.JsonUtil; import com.aizuda.snailjob.server.common.dto.WorkflowAlarmInfo; import com.aizuda.snailjob.server.common.triple.ImmutableTriple; @@ -23,7 +23,7 @@ public abstract class AbstractWorkflowAlarm extends return alarmInfos.stream().collect(Collectors.groupingBy(workflowAlarmInfo -> { String namespaceId = workflowAlarmInfo.getNamespaceId(); String groupName = workflowAlarmInfo.getGroupName(); - HashSet notifyIdsSet = Objects.isNull(workflowAlarmInfo.getNotifyIds()) ? new HashSet<>() : new HashSet<>(JsonUtil.parseList(workflowAlarmInfo.getNotifyIds(), Long.class)); + HashSet notifyIdsSet = StrUtil.isBlank(workflowAlarmInfo.getNotifyIds()) ? new HashSet<>() : new HashSet<>(JsonUtil.parseList(workflowAlarmInfo.getNotifyIds(), Long.class)); namespaceIds.add(namespaceId); groupNames.add(groupName); diff --git a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/dto/JobAlarmInfo.java b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/dto/JobAlarmInfo.java index 98f50062..1dd1415c 100644 --- a/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/dto/JobAlarmInfo.java +++ b/snail-job-server/snail-job-server-common/src/main/java/com/aizuda/snailjob/server/common/dto/JobAlarmInfo.java @@ -37,6 +37,12 @@ public class JobAlarmInfo extends AlarmInfo { */ private Integer operationReason; + /** + * 原因 + */ + private String reason; + + /** * 通知告警场景 */ diff --git a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/dto/CompleteJobBatchDTO.java b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/dto/CompleteJobBatchDTO.java index d0ea841c..59f0071a 100644 --- a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/dto/CompleteJobBatchDTO.java +++ b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/dto/CompleteJobBatchDTO.java @@ -19,6 +19,7 @@ public class CompleteJobBatchDTO extends BaseDTO { private Long taskBatchId; private Integer jobOperationReason; private Object result; + private String message; private Integer taskType; private Boolean retryStatus; diff --git a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/dto/JobTaskFailAlarmEventDTO.java b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/dto/JobTaskFailAlarmEventDTO.java new file mode 100644 index 00000000..423c8db1 --- /dev/null +++ b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/dto/JobTaskFailAlarmEventDTO.java @@ -0,0 +1,18 @@ +package com.aizuda.snailjob.server.job.task.dto; + +import lombok.Builder; +import lombok.Data; + +/** + * @author zhengweilin + * @version 1.0.0 + * @date 2024/12/12 + */ +@Data +@Builder +public class JobTaskFailAlarmEventDTO { + + private Long jobTaskBatchId; + + private String reason; +} diff --git a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/alarm/event/JobTaskFailAlarmEvent.java b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/alarm/event/JobTaskFailAlarmEvent.java index 0396256e..b0d3afe8 100644 --- a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/alarm/event/JobTaskFailAlarmEvent.java +++ b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/alarm/event/JobTaskFailAlarmEvent.java @@ -1,5 +1,6 @@ package com.aizuda.snailjob.server.job.task.support.alarm.event; +import com.aizuda.snailjob.server.job.task.dto.JobTaskFailAlarmEventDTO; import lombok.Getter; import org.springframework.context.ApplicationEvent; @@ -13,11 +14,11 @@ import org.springframework.context.ApplicationEvent; @Getter public class JobTaskFailAlarmEvent extends ApplicationEvent { - private final Long jobTaskBatchId; + private JobTaskFailAlarmEventDTO jobTaskFailAlarmEventDTO; - public JobTaskFailAlarmEvent(Long jobTaskBatchId) { - super(jobTaskBatchId); - this.jobTaskBatchId = jobTaskBatchId; + public JobTaskFailAlarmEvent(JobTaskFailAlarmEventDTO jobTaskFailAlarmEventDTO) { + super(jobTaskFailAlarmEventDTO); + this.jobTaskFailAlarmEventDTO = jobTaskFailAlarmEventDTO; } } diff --git a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/alarm/listener/JobTaskFailAlarmListener.java b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/alarm/listener/JobTaskFailAlarmListener.java index 9a909c9a..c646546e 100644 --- a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/alarm/listener/JobTaskFailAlarmListener.java +++ b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/alarm/listener/JobTaskFailAlarmListener.java @@ -1,5 +1,6 @@ package com.aizuda.snailjob.server.job.task.support.alarm.listener; +import cn.hutool.core.util.StrUtil; import com.aizuda.snailjob.common.core.alarm.AlarmContext; import com.aizuda.snailjob.common.core.enums.JobNotifySceneEnum; import com.aizuda.snailjob.common.core.enums.JobOperationReasonEnum; @@ -11,6 +12,7 @@ import com.aizuda.snailjob.server.common.dto.JobAlarmInfo; import com.aizuda.snailjob.server.common.dto.NotifyConfigInfo; import com.aizuda.snailjob.server.common.enums.SyetemTaskTypeEnum; import com.aizuda.snailjob.server.common.util.DateUtils; +import com.aizuda.snailjob.server.job.task.dto.JobTaskFailAlarmEventDTO; import com.aizuda.snailjob.server.job.task.support.alarm.event.JobTaskFailAlarmEvent; import com.aizuda.snailjob.template.datasource.persistence.dataobject.JobBatchResponseDO; import com.aizuda.snailjob.template.datasource.persistence.mapper.JobTaskBatchMapper; @@ -22,6 +24,7 @@ import org.springframework.stereotype.Component; import org.springframework.transaction.event.TransactionPhase; import org.springframework.transaction.event.TransactionalEventListener; +import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.concurrent.LinkedBlockingQueue; @@ -44,7 +47,7 @@ public class JobTaskFailAlarmListener extends AbstractJobAlarm queue = new LinkedBlockingQueue<>(1000); + private final LinkedBlockingQueue queue = new LinkedBlockingQueue<>(1000); private static final String MESSAGES_FORMATTER = """ {}环境 Job任务执行失败\s @@ -60,24 +63,26 @@ public class JobTaskFailAlarmListener extends AbstractJobAlarm poll() throws InterruptedException { // 无数据时阻塞线程 - Long jobTaskBatchId = queue.poll(100, TimeUnit.MILLISECONDS); - if (Objects.isNull(jobTaskBatchId)) { + JobTaskFailAlarmEventDTO jobTaskFailAlarmEventDTO = queue.poll(100, TimeUnit.MILLISECONDS); + if (Objects.isNull(jobTaskFailAlarmEventDTO)) { return Lists.newArrayList(); } // 拉取200条 - List jobTaskBatchIds = Lists.newArrayList(jobTaskBatchId); - queue.drainTo(jobTaskBatchIds, 200); + List jobTaskBatchIds = Lists.newArrayList(jobTaskFailAlarmEventDTO.getJobTaskBatchId()); + queue.drainTo(Collections.singleton(jobTaskBatchIds), 200); QueryWrapper wrapper = new QueryWrapper() .in("batch.id", jobTaskBatchIds) .eq("batch.deleted", 0); List jobTaskBatchList = jobTaskBatchMapper.selectJobBatchListByIds(wrapper); - return AlarmInfoConverter.INSTANCE.toJobAlarmInfos(jobTaskBatchList); + List jobAlarmInfos = AlarmInfoConverter.INSTANCE.toJobAlarmInfos(jobTaskBatchList); + jobAlarmInfos.stream().forEach(i -> i.setReason(jobTaskFailAlarmEventDTO.getReason())); + return jobAlarmInfos; } @Override protected AlarmContext buildAlarmContext(JobAlarmInfo alarmDTO, NotifyConfigInfo notifyConfig) { - String desc = JobOperationReasonEnum.getByReason(alarmDTO.getOperationReason()).getDesc(); + String desc = StrUtil.isNotBlank(alarmDTO.getReason()) ? alarmDTO.getReason() : JobOperationReasonEnum.getByReason(alarmDTO.getOperationReason()).getDesc(); // 预警 return AlarmContext.build() .text(MESSAGES_FORMATTER, @@ -109,8 +114,8 @@ public class JobTaskFailAlarmListener extends AbstractJobAlarm new SnailJobServerException("更新任务失败")); if (JobTaskBatchStatusEnum.NOT_SUCCESS.contains(taskStatus)) { - SnailSpringContext.getContext().publishEvent(new JobTaskFailAlarmEvent(taskExecute.getTaskBatchId())); + SnailSpringContext.getContext().publishEvent( + new JobTaskFailAlarmEvent(JobTaskFailAlarmEventDTO.builder().jobTaskBatchId(taskExecute.getTaskBatchId()).build())); } } diff --git a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/dispatch/JobExecutorResultActor.java b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/dispatch/JobExecutorResultActor.java index 393e9c77..6e471897 100644 --- a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/dispatch/JobExecutorResultActor.java +++ b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/dispatch/JobExecutorResultActor.java @@ -74,8 +74,8 @@ public class JobExecutorResultActor extends AbstractActor { } - private void tryCompleteAndStop(JobExecutorResultDTO result) { - CompleteJobBatchDTO completeJobBatchDTO = JobTaskConverter.INSTANCE.toCompleteJobBatchDTO(result); + private void tryCompleteAndStop(JobExecutorResultDTO jobExecutorResultDTO) { + CompleteJobBatchDTO completeJobBatchDTO = JobTaskConverter.INSTANCE.toCompleteJobBatchDTO(jobExecutorResultDTO); jobTaskBatchHandler.handleResult(completeJobBatchDTO); } } diff --git a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/executor/job/RequestClientActor.java b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/executor/job/RequestClientActor.java index 7b2a220a..5bcb4603 100644 --- a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/executor/job/RequestClientActor.java +++ b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/executor/job/RequestClientActor.java @@ -17,6 +17,7 @@ import com.aizuda.snailjob.server.common.rpc.client.RequestBuilder; import com.aizuda.snailjob.server.common.util.DateUtils; import com.aizuda.snailjob.server.job.task.client.JobRpcClient; import com.aizuda.snailjob.server.job.task.dto.JobExecutorResultDTO; +import com.aizuda.snailjob.server.job.task.dto.JobTaskFailAlarmEventDTO; import com.aizuda.snailjob.server.job.task.dto.RealJobExecutorDTO; import com.aizuda.snailjob.server.job.task.support.ClientCallbackHandler; import com.aizuda.snailjob.server.job.task.support.JobTaskConverter; @@ -114,12 +115,14 @@ public class RequestClientActor extends AbstractActor { SnailJobLog.REMOTE.error("taskId:[{}] 任务调度失败执行重试 重试次数:[{}]. <|>{}<|>", jobLogMetaDTO.getTaskId(), realJobExecutorDTO.getRetryCount(), jobLogMetaDTO, throwable); } else { - SnailJobLog.REMOTE.error("taskId:[{}] 任务调度失败. <|>{}<|>", jobLogMetaDTO.getTaskId(), + SnailJobLog.REMOTE.error("taskId:[{}] 任务调度失败. <|>{}<|>", + jobLogMetaDTO.getTaskId(), jobLogMetaDTO, throwable); } taskExecuteFailure(realJobExecutorDTO, throwable.getMessage()); - SnailSpringContext.getContext().publishEvent(new JobTaskFailAlarmEvent(dispatchJobRequest.getTaskBatchId())); + SnailSpringContext.getContext().publishEvent( + new JobTaskFailAlarmEvent(JobTaskFailAlarmEventDTO.builder().jobTaskBatchId(dispatchJobRequest.getTaskBatchId()).build())); } } diff --git a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/generator/batch/JobTaskBatchGenerator.java b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/generator/batch/JobTaskBatchGenerator.java index e5e9439f..3314128e 100644 --- a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/generator/batch/JobTaskBatchGenerator.java +++ b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/generator/batch/JobTaskBatchGenerator.java @@ -9,6 +9,7 @@ import com.aizuda.snailjob.server.common.cache.CacheRegisterTable; import com.aizuda.snailjob.server.common.enums.JobTaskExecutorSceneEnum; import com.aizuda.snailjob.server.common.exception.SnailJobServerException; import com.aizuda.snailjob.server.common.util.DateUtils; +import com.aizuda.snailjob.server.job.task.dto.JobTaskFailAlarmEventDTO; import com.aizuda.snailjob.server.job.task.dto.JobTimerTaskDTO; import com.aizuda.snailjob.server.job.task.dto.TaskExecuteDTO; import com.aizuda.snailjob.server.job.task.dto.WorkflowNodeTaskExecuteDTO; @@ -82,9 +83,10 @@ public class JobTaskBatchGenerator { ); } - // 无执行的节点-告警通知 - if (JobTaskBatchStatusEnum.CANCEL.getStatus() == jobTaskBatch.getTaskBatchStatus()) { - SnailSpringContext.getContext().publishEvent(new JobTaskFailAlarmEvent(jobTaskBatch.getId())); + // 无客户端节点-告警通知 + if (JobTaskBatchStatusEnum.CANCEL.getStatus() == jobTaskBatch.getTaskBatchStatus() && JobOperationReasonEnum.NOT_CLIENT.getReason() == jobTaskBatch.getOperationReason()) { + SnailSpringContext.getContext().publishEvent( + new JobTaskFailAlarmEvent(JobTaskFailAlarmEventDTO.builder().jobTaskBatchId(jobTaskBatch.getId()).build())); } // 非待处理状态无需进入时间轮中 diff --git a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/prepare/job/RunningJobPrepareHandler.java b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/prepare/job/RunningJobPrepareHandler.java index a9cd83d6..b8035660 100644 --- a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/prepare/job/RunningJobPrepareHandler.java +++ b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/prepare/job/RunningJobPrepareHandler.java @@ -1,17 +1,17 @@ package com.aizuda.snailjob.server.job.task.support.prepare.job; import com.aizuda.snailjob.common.core.context.SnailSpringContext; +import com.aizuda.snailjob.common.core.enums.BlockStrategyEnum; import com.aizuda.snailjob.common.core.enums.JobOperationReasonEnum; import com.aizuda.snailjob.common.core.enums.JobTaskBatchStatusEnum; import com.aizuda.snailjob.common.core.util.JsonUtil; import com.aizuda.snailjob.server.common.util.DateUtils; import com.aizuda.snailjob.server.job.task.dto.CompleteJobBatchDTO; +import com.aizuda.snailjob.server.job.task.dto.JobTaskFailAlarmEventDTO; import com.aizuda.snailjob.server.job.task.dto.JobTaskPrepareDTO; -import com.aizuda.snailjob.common.core.enums.BlockStrategyEnum; import com.aizuda.snailjob.server.job.task.support.BlockStrategy; import com.aizuda.snailjob.server.job.task.support.JobTaskConverter; import com.aizuda.snailjob.server.job.task.support.JobTaskStopHandler; -import com.aizuda.snailjob.server.job.task.support.alarm.event.JobTaskFailAlarmEvent; import com.aizuda.snailjob.server.job.task.support.block.job.BlockStrategyContext; import com.aizuda.snailjob.server.job.task.support.block.job.JobBlockStrategyFactory; import com.aizuda.snailjob.server.job.task.support.handler.JobTaskBatchHandler; @@ -64,7 +64,9 @@ public class RunningJobPrepareHandler extends AbstractJobPrepareHandler { stopJobContext.setJobOperationReason(JobOperationReasonEnum.TASK_EXECUTION_TIMEOUT.getReason()); stopJobContext.setNeedUpdateTaskStatus(Boolean.TRUE); instanceInterrupt.stop(stopJobContext); - SnailSpringContext.getContext().publishEvent(new JobTaskFailAlarmEvent(prepare.getTaskBatchId())); + + SnailSpringContext.getContext().publishEvent( + JobTaskFailAlarmEventDTO.builder().jobTaskBatchId(prepare.getTaskBatchId())); } } diff --git a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/result/job/AbstractJobExecutorResultHandler.java b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/result/job/AbstractJobExecutorResultHandler.java index 83668f7c..45491cdf 100644 --- a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/result/job/AbstractJobExecutorResultHandler.java +++ b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/result/job/AbstractJobExecutorResultHandler.java @@ -6,6 +6,7 @@ import com.aizuda.snailjob.common.core.enums.JobOperationReasonEnum; import com.aizuda.snailjob.common.core.enums.JobTaskBatchStatusEnum; import com.aizuda.snailjob.common.core.enums.JobTaskStatusEnum; import com.aizuda.snailjob.server.common.enums.JobTaskExecutorSceneEnum; +import com.aizuda.snailjob.server.job.task.dto.JobTaskFailAlarmEventDTO; import com.aizuda.snailjob.server.job.task.dto.WorkflowNodeTaskExecuteDTO; import com.aizuda.snailjob.server.job.task.support.JobExecutorResultHandler; import com.aizuda.snailjob.server.job.task.support.JobTaskConverter; @@ -67,7 +68,8 @@ public abstract class AbstractJobExecutorResultHandler implements JobExecutorRes int taskBatchStatus; if (failCount > 0) { taskBatchStatus = JobTaskBatchStatusEnum.FAIL.getStatus(); - SnailSpringContext.getContext().publishEvent(new JobTaskFailAlarmEvent(context.getTaskBatchId())); + SnailSpringContext.getContext().publishEvent( + new JobTaskFailAlarmEvent(JobTaskFailAlarmEventDTO.builder().jobTaskBatchId(context.getTaskBatchId()).reason(context.getMessage()).build())); doHandleFail(context); } else if (stopCount > 0) { taskBatchStatus = JobTaskBatchStatusEnum.STOP.getStatus(); diff --git a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/result/job/JobExecutorResultContext.java b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/result/job/JobExecutorResultContext.java index 63ec0256..2c001b0d 100644 --- a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/result/job/JobExecutorResultContext.java +++ b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/result/job/JobExecutorResultContext.java @@ -32,5 +32,9 @@ public class JobExecutorResultContext extends BaseDTO { */ private boolean taskBatchComplete; + /** + * 原因 + */ + private String message; } diff --git a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/timer/JobTimeoutCheckTask.java b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/timer/JobTimeoutCheckTask.java index 2a0a289a..7b374298 100644 --- a/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/timer/JobTimeoutCheckTask.java +++ b/snail-job-server/snail-job-server-job-task/src/main/java/com/aizuda/snailjob/server/job/task/support/timer/JobTimeoutCheckTask.java @@ -5,6 +5,7 @@ import com.aizuda.snailjob.common.core.enums.JobOperationReasonEnum; import com.aizuda.snailjob.common.core.enums.JobTaskBatchStatusEnum; import com.aizuda.snailjob.common.log.SnailJobLog; import com.aizuda.snailjob.server.common.TimerTask; +import com.aizuda.snailjob.server.job.task.dto.JobTaskFailAlarmEventDTO; import com.aizuda.snailjob.server.job.task.support.JobTaskConverter; import com.aizuda.snailjob.server.job.task.support.JobTaskStopHandler; import com.aizuda.snailjob.server.job.task.support.alarm.event.JobTaskFailAlarmEvent; @@ -67,7 +68,8 @@ public class JobTimeoutCheckTask implements TimerTask { stopJobContext.setWorkflowTaskBatchId(jobTaskBatch.getWorkflowTaskBatchId()); instanceInterrupt.stop(stopJobContext); - SnailSpringContext.getContext().publishEvent(new JobTaskFailAlarmEvent(taskBatchId)); + SnailSpringContext.getContext().publishEvent( + new JobTaskFailAlarmEvent(JobTaskFailAlarmEventDTO.builder().jobTaskBatchId(taskBatchId).build())); SnailJobLog.LOCAL.info("超时中断.taskBatchId:[{}]", taskBatchId); } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/SceneConfigRequestVO.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/SceneConfigRequestVO.java index 7c683e6a..85807294 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/SceneConfigRequestVO.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/SceneConfigRequestVO.java @@ -4,6 +4,8 @@ import com.aizuda.snailjob.common.core.constant.SystemConstants; import jakarta.validation.constraints.*; import lombok.Data; +import java.util.Set; + /** * @author opensnail * @date 2023-10-25 08:40:57 @@ -62,4 +64,8 @@ public class SceneConfigRequestVO { */ private Integer isDeleted; + /** + * 通知告警场景配置id列表 + */ + private Set notifyIds; } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/WorkflowRequestVO.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/WorkflowRequestVO.java index 3ed89937..2815f327 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/WorkflowRequestVO.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/request/WorkflowRequestVO.java @@ -10,6 +10,7 @@ import jakarta.validation.constraints.Pattern; import lombok.Data; import java.util.List; +import java.util.Set; /** * @author xiaowoniu @@ -131,4 +132,8 @@ public class WorkflowRequestVO { private CallbackConfig callback; } + /** + * 通知告警场景配置id列表 + */ + private Set notifyIds; } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/response/JobResponseVO.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/response/JobResponseVO.java index 80aa91de..0b3ae8f3 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/response/JobResponseVO.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/response/JobResponseVO.java @@ -3,6 +3,7 @@ package com.aizuda.snailjob.server.web.model.response; import lombok.Data; import java.time.LocalDateTime; +import java.util.Set; /** * @author opensnail @@ -129,4 +130,8 @@ public class JobResponseVO { */ private Integer deleted; + /** + * 通知告警场景配置id列表 + */ + private Set notifyIds; } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/response/SceneConfigResponseVO.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/response/SceneConfigResponseVO.java index 40cd9101..685fe388 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/response/SceneConfigResponseVO.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/response/SceneConfigResponseVO.java @@ -3,6 +3,7 @@ package com.aizuda.snailjob.server.web.model.response; import lombok.Data; import java.time.LocalDateTime; +import java.util.Set; /** * @author: opensnail @@ -37,4 +38,8 @@ public class SceneConfigResponseVO { private LocalDateTime updateDt; + /** + * 通知告警场景配置id列表 + */ + private Set notifyIds; } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/response/WorkflowDetailResponseVO.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/response/WorkflowDetailResponseVO.java index 18e7eced..970edd39 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/response/WorkflowDetailResponseVO.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/response/WorkflowDetailResponseVO.java @@ -6,6 +6,7 @@ import com.aizuda.snailjob.server.common.dto.JobTaskConfig; import lombok.Data; import java.util.List; +import java.util.Set; /** * @author xiaowoniu @@ -155,4 +156,9 @@ public class WorkflowDetailResponseVO { } + /** + * 通知告警场景配置id列表 + */ + private Set notifyIds; + } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/response/WorkflowResponseVO.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/response/WorkflowResponseVO.java index 4aceb08d..918b924a 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/response/WorkflowResponseVO.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/model/response/WorkflowResponseVO.java @@ -3,6 +3,7 @@ package com.aizuda.snailjob.server.web.model.response; import lombok.Data; import java.time.LocalDateTime; +import java.util.Set; /** * @author: xiaowoniu @@ -59,4 +60,8 @@ public class WorkflowResponseVO { */ private LocalDateTime updateDt; + /** + * 通知告警场景配置id列表 + */ + private Set notifyIds; } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/convert/JobResponseVOConverter.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/convert/JobResponseVOConverter.java index 8e318f6e..186493b0 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/convert/JobResponseVOConverter.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/convert/JobResponseVOConverter.java @@ -22,13 +22,14 @@ public interface JobResponseVOConverter { JobResponseVOConverter INSTANCE = Mappers.getMapper(JobResponseVOConverter.class); - // @Mappings({ -// @Mapping(source = "nextTriggerAt", target = "nextTriggerAt", expression = "java(DateUtils.toLocalDateTime())") -// }) + @Mappings({ + @Mapping(target = "notifyIds", expression = "java(JobConverter.toNotifyIds(job.getNotifyIds()))") + }) List convertList(List jobs); @Mappings({ - @Mapping(target = "nextTriggerAt", expression = "java(JobResponseVOConverter.toLocalDateTime(job.getNextTriggerAt()))") + @Mapping(target = "nextTriggerAt", expression = "java(JobResponseVOConverter.toLocalDateTime(job.getNextTriggerAt()))"), + @Mapping(target = "notifyIds", expression = "java(JobConverter.toNotifyIds(job.getNotifyIds()))") }) JobResponseVO convert(Job job); diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/convert/SceneConfigConverter.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/convert/SceneConfigConverter.java index c7ce78e7..f47decdf 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/convert/SceneConfigConverter.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/convert/SceneConfigConverter.java @@ -1,11 +1,18 @@ package com.aizuda.snailjob.server.web.service.convert; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; +import com.aizuda.snailjob.common.core.util.JsonUtil; import com.aizuda.snailjob.server.web.model.request.SceneConfigRequestVO; import com.aizuda.snailjob.template.datasource.persistence.po.RetrySceneConfig; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Mappings; import org.mapstruct.factory.Mappers; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * @author: opensnail @@ -16,11 +23,31 @@ public interface SceneConfigConverter { SceneConfigConverter INSTANCE = Mappers.getMapper(SceneConfigConverter.class); + @Mappings({ + @Mapping(target = "notifyIds", expression = "java(SceneConfigConverter.toNotifyIdsStr(requestVO.getNotifyIds()))") + }) RetrySceneConfig toRetrySceneConfig(SceneConfigRequestVO requestVO); List toRetrySceneConfigs(List requestVOs); + @Mappings({ + @Mapping(target = "notifyIds", expression = "java(SceneConfigConverter.toNotifyIds(requestVOs.getNotifyIds()))") + }) List toSceneConfigRequestVOs(List requestVOs); + static Set toNotifyIds(String notifyIds) { + if (StrUtil.isBlank(notifyIds)) { + return new HashSet<>(); + } + return new HashSet<>(JsonUtil.parseList(notifyIds, Long.class)); + } + + static String toNotifyIdsStr(Set notifyIds) { + if (CollUtil.isEmpty(notifyIds)) { + return null; + } + + return JsonUtil.toJsonString(notifyIds); + } } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/convert/SceneConfigResponseVOConverter.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/convert/SceneConfigResponseVOConverter.java index 25eea2f0..e4a0e1bf 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/convert/SceneConfigResponseVOConverter.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/convert/SceneConfigResponseVOConverter.java @@ -1,11 +1,17 @@ package com.aizuda.snailjob.server.web.service.convert; +import cn.hutool.core.util.StrUtil; +import com.aizuda.snailjob.common.core.util.JsonUtil; import com.aizuda.snailjob.server.web.model.response.SceneConfigResponseVO; import com.aizuda.snailjob.template.datasource.persistence.po.RetrySceneConfig; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.Mappings; import org.mapstruct.factory.Mappers; +import java.util.HashSet; import java.util.List; +import java.util.Set; /** * @author: opensnail @@ -16,7 +22,18 @@ public interface SceneConfigResponseVOConverter { SceneConfigResponseVOConverter INSTANCE = Mappers.getMapper(SceneConfigResponseVOConverter.class); + List convertList(List retrySceneConfigs); + + @Mappings({ + @Mapping(target = "notifyIds", expression = "java(SceneConfigResponseVOConverter.toNotifyIds(retrySceneConfig.getNotifyIds()))") + }) SceneConfigResponseVO convert(RetrySceneConfig retrySceneConfig); - List convertList(List retrySceneConfigs); + static Set toNotifyIds(String notifyIds) { + if (StrUtil.isBlank(notifyIds)) { + return new HashSet<>(); + } + + return new HashSet<>(JsonUtil.parseList(notifyIds, Long.class)); + } } diff --git a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/convert/WorkflowConverter.java b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/convert/WorkflowConverter.java index 7c0f5b07..298f3c56 100644 --- a/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/convert/WorkflowConverter.java +++ b/snail-job-server/snail-job-server-web/src/main/java/com/aizuda/snailjob/server/web/service/convert/WorkflowConverter.java @@ -1,5 +1,7 @@ package com.aizuda.snailjob.server.web.service.convert; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.StrUtil; import com.aizuda.snailjob.common.core.enums.WorkflowNodeTypeEnum; import com.aizuda.snailjob.common.core.util.JsonUtil; import com.aizuda.snailjob.server.common.dto.CallbackConfig; @@ -20,8 +22,10 @@ import org.mapstruct.Mappings; import org.mapstruct.factory.Mappers; import java.time.LocalDateTime; +import java.util.HashSet; import java.util.List; import java.util.Objects; +import java.util.Set; /** * @author: xiaowoniu @@ -37,6 +41,9 @@ public interface WorkflowConverter { WorkflowNode convert(WorkflowRequestVO.NodeInfo nodeInfo); + @Mappings({ + @Mapping(target = "notifyIds", expression = "java(WorkflowConverter.toNotifyIds(workflow.getNotifyIds()))") + }) WorkflowDetailResponseVO convert(Workflow workflow); List convertList(List workflowNodes); @@ -51,7 +58,8 @@ public interface WorkflowConverter { List convertListToWorkflowList(List workflowList); @Mappings({ - @Mapping(target = "nextTriggerAt", expression = "java(WorkflowConverter.toLocalDateTime(workflow.getNextTriggerAt()))") + @Mapping(target = "nextTriggerAt", expression = "java(WorkflowConverter.toLocalDateTime(workflow.getNextTriggerAt()))"), + @Mapping(target = "notifyIds", expression = "java(WorkflowConverter.toNotifyIds(workflow.getNotifyIds()))") }) WorkflowResponseVO convertToWorkflow(Workflow workflow); @@ -99,5 +107,20 @@ public interface WorkflowConverter { return null; } + static Set toNotifyIds(String notifyIds) { + if (StrUtil.isBlank(notifyIds)) { + return new HashSet<>(); + } + + return new HashSet<>(JsonUtil.parseList(notifyIds, Long.class)); + } + + static String toNotifyIdsStr(Set notifyIds) { + if (CollUtil.isEmpty(notifyIds)) { + return null; + } + + return JsonUtil.toJsonString(notifyIds); + } } 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 90e4c580..f771e6d8 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 @@ -139,6 +139,7 @@ public class JobServiceImpl implements JobService { % systemProperties.getBucketTotal()); job.setNextTriggerAt(calculateNextTriggerAt(jobRequestVO, DateUtils.toNowMilli())); job.setNamespaceId(UserSessionUtils.currentUserSession().getNamespaceId()); + job.setNotifyIds(JsonUtil.toJsonString(jobRequestVO.getNotifyIds())); job.setId(null); return 1 == jobMapper.insert(job); } 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 2a59ed69..96042aab 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 @@ -86,12 +86,10 @@ public class SceneConfigServiceImpl implements SceneConfigService { .eq(RetrySceneConfig::getNamespaceId, userSessionVO.getNamespaceId()) .in(CollUtil.isNotEmpty(groupNames), RetrySceneConfig::getGroupName, groupNames) .eq(Objects.nonNull(queryVO.getSceneStatus()), RetrySceneConfig::getSceneStatus, queryVO.getSceneStatus()) - .likeRight(StrUtil.isNotBlank(queryVO.getSceneName()), - RetrySceneConfig::getSceneName, StrUtil.trim(queryVO.getSceneName())) + .likeRight(StrUtil.isNotBlank(queryVO.getSceneName()), RetrySceneConfig::getSceneName, StrUtil.trim(queryVO.getSceneName())) .orderByDesc(RetrySceneConfig::getCreateDt)); return new PageResult<>(pageDTO, SceneConfigResponseVOConverter.INSTANCE.convertList(pageDTO.getRecords())); - } @Override @@ -127,6 +125,7 @@ public class SceneConfigServiceImpl implements SceneConfigService { RetrySceneConfig retrySceneConfig = SceneConfigConverter.INSTANCE.toRetrySceneConfig(requestVO); retrySceneConfig.setCreateDt(LocalDateTime.now()); retrySceneConfig.setNamespaceId(namespaceId); + retrySceneConfig.setNotifyIds(JsonUtil.toJsonString(requestVO.getNotifyIds())); if (requestVO.getBackOff() == WaitStrategies.WaitStrategyEnum.DELAY_LEVEL.getType()) { retrySceneConfig.setTriggerInterval(StrUtil.EMPTY); } @@ -154,6 +153,7 @@ public class SceneConfigServiceImpl implements SceneConfigService { retrySceneConfig.setTriggerInterval( Optional.ofNullable(retrySceneConfig.getTriggerInterval()).orElse(StrUtil.EMPTY)); + retrySceneConfig.setNotifyIds(JsonUtil.toJsonString(requestVO.getNotifyIds())); Assert.isTrue(1 == accessTemplate.getSceneConfigAccess().update(retrySceneConfig, new LambdaUpdateWrapper() .eq(RetrySceneConfig::getNamespaceId, namespaceId) 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 71525abf..4b4f44f1 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 @@ -127,6 +127,7 @@ public class WorkflowServiceImpl implements WorkflowService { HashUtil.bkdrHash(workflowRequestVO.getGroupName() + workflowRequestVO.getWorkflowName()) % systemProperties.getBucketTotal()); workflow.setNamespaceId(UserSessionUtils.currentUserSession().getNamespaceId()); + workflow.setNotifyIds(JsonUtil.toJsonString(workflowRequestVO.getNotifyIds())); workflow.setId(null); Assert.isTrue(1 == workflowMapper.insert(workflow), () -> new SnailJobServerException("新增工作流失败")); @@ -190,8 +191,7 @@ public class WorkflowServiceImpl implements WorkflowService { queryVO.getWorkflowStatus()) .orderByDesc(Workflow::getId)); - List jobResponseList = WorkflowConverter.INSTANCE.convertListToWorkflowList( - page.getRecords()); + List jobResponseList = WorkflowConverter.INSTANCE.convertListToWorkflowList(page.getRecords()); return new PageResult<>(pageDTO, jobResponseList); } @@ -226,6 +226,7 @@ public class WorkflowServiceImpl implements WorkflowService { workflow.setVersion(version); workflow.setNextTriggerAt(calculateNextTriggerAt(workflowRequestVO, DateUtils.toNowMilli())); workflow.setFlowInfo(JsonUtil.toJsonString(GraphUtils.serializeGraphToJson(graph))); + workflow.setNotifyIds(JsonUtil.toJsonString(workflowRequestVO.getNotifyIds())); // 不允许更新组 workflow.setGroupName(null); Assert.isTrue(