diff --git a/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/scheduler/TimingStrategyService.java b/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/scheduler/TimingStrategyService.java index 2b7db845..d1168bf1 100644 --- a/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/scheduler/TimingStrategyService.java +++ b/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/scheduler/TimingStrategyService.java @@ -83,15 +83,14 @@ public class TimingStrategyService { /** * 计算下次的调度时间并检查校验规则 * - * @param preTriggerTime 上次触发时间(nullable) * @param timeExpressionType 定时表达式类型 * @param timeExpression 表达式 * @param startTime 起始时间(include) * @param endTime 结束时间(include) * @return 下次的调度时间 */ - public Long calculateNextTriggerTimeWithInspection(Long preTriggerTime, TimeExpressionType timeExpressionType, String timeExpression, Long startTime, Long endTime) { - Long nextTriggerTime = calculateNextTriggerTime(preTriggerTime, timeExpressionType, timeExpression, startTime, endTime); + public Long calculateNextTriggerTimeWithInspection( TimeExpressionType timeExpressionType, String timeExpression, Long startTime, Long endTime) { + Long nextTriggerTime = calculateNextTriggerTime(null, timeExpressionType, timeExpression, startTime, endTime); if (TimeExpressionType.INSPECT_TYPES.contains(timeExpressionType.getV()) && nextTriggerTime == null) { throw new PowerJobException("time expression is out of date: " + timeExpression); } diff --git a/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/service/JobService.java b/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/service/JobService.java index 732b791b..1fd5347e 100644 --- a/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/service/JobService.java +++ b/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/service/JobService.java @@ -91,7 +91,7 @@ public class JobService { if (!CollectionUtils.isEmpty(request.getNotifyUserIds())) { jobInfoDO.setNotifyUserIds(SJ.COMMA_JOINER.join(request.getNotifyUserIds())); } - LifeCycle lifecycle = Optional.of(request.getLifecycle()).orElse(LifeCycle.EMPTY_LIFE_CYCLE); + LifeCycle lifecycle = Optional.ofNullable(request.getLifecycle()).orElse(LifeCycle.EMPTY_LIFE_CYCLE); jobInfoDO.setLifecycle(JSON.toJSONString(lifecycle)); // 检查定时策略 timingStrategyService.validate(request.getTimeExpressionType(), request.getTimeExpression(), lifecycle.getStart(), lifecycle.getEnd()); @@ -255,7 +255,7 @@ public class JobService { jobInfo.setTimeExpression(null); } else { LifeCycle lifeCycle = LifeCycle.parse(jobInfo.getLifecycle()); - Long nextValidTime = timingStrategyService.calculateNextTriggerTimeWithInspection(jobInfo.getNextTriggerTime(), TimeExpressionType.CRON, jobInfo.getTimeExpression(), lifeCycle.getStart(), lifeCycle.getEnd()); + Long nextValidTime = timingStrategyService.calculateNextTriggerTimeWithInspection(TimeExpressionType.of(jobInfo.getTimeExpressionType()), jobInfo.getTimeExpression(), lifeCycle.getStart(), lifeCycle.getEnd()); jobInfo.setNextTriggerTime(nextValidTime); } // 重写最后修改时间 diff --git a/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/workflow/WorkflowService.java b/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/workflow/WorkflowService.java index d6ef06e8..9db75a07 100644 --- a/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/workflow/WorkflowService.java +++ b/powerjob-server/powerjob-server-core/src/main/java/tech/powerjob/server/core/workflow/WorkflowService.java @@ -88,12 +88,12 @@ public class WorkflowService { if (req.getLifeCycle() != null) { wf.setLifecycle(JSON.toJSONString(req.getLifeCycle())); } - if (TimeExpressionType.FREQUENT_TYPES.contains(req.getTimeExpressionType().getV())){ + if (TimeExpressionType.FREQUENT_TYPES.contains(req.getTimeExpressionType().getV())) { // 固定频率类型的任务不计算 wf.setTimeExpression(null); - }else { - LifeCycle lifeCycle = Optional.of(req.getLifeCycle()).orElse(LifeCycle.EMPTY_LIFE_CYCLE); - Long nextValidTime = timingStrategyService.calculateNextTriggerTimeWithInspection(wf.getNextTriggerTime(), TimeExpressionType.CRON, wf.getTimeExpression(), lifeCycle.getStart(), lifeCycle.getEnd()); + } else { + LifeCycle lifeCycle = Optional.ofNullable(req.getLifeCycle()).orElse(LifeCycle.EMPTY_LIFE_CYCLE); + Long nextValidTime = timingStrategyService.calculateNextTriggerTimeWithInspection(TimeExpressionType.of(wf.getTimeExpressionType()), wf.getTimeExpression(), lifeCycle.getStart(), lifeCycle.getEnd()); wf.setNextTriggerTime(nextValidTime); } // 新增工作流,需要先 save 一下获取 ID diff --git a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/controller/JobController.java b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/controller/JobController.java index 325bef7e..9aa226dc 100644 --- a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/controller/JobController.java +++ b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/controller/JobController.java @@ -39,7 +39,7 @@ public class JobController { private JobInfoRepository jobInfoRepository; @PostMapping("/save") - public ResultDTO saveJobInfo(@RequestBody SaveJobInfoRequest request) throws Exception { + public ResultDTO saveJobInfo(@RequestBody SaveJobInfoRequest request) { jobService.saveJob(request); return ResultDTO.success(null); } diff --git a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/JobInfoVO.java b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/JobInfoVO.java index 0b7a23f0..ce9608e9 100644 --- a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/JobInfoVO.java +++ b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/JobInfoVO.java @@ -5,6 +5,7 @@ import tech.powerjob.common.enums.ExecuteType; import tech.powerjob.common.enums.ProcessorType; import tech.powerjob.common.enums.TimeExpressionType; import tech.powerjob.common.model.AlarmConfig; +import tech.powerjob.common.model.LifeCycle; import tech.powerjob.common.utils.CommonUtils; import tech.powerjob.server.common.SJ; import tech.powerjob.common.enums.DispatchStrategy; @@ -139,7 +140,7 @@ public class JobInfoVO { private String dispatchStrategy; - private String lifecycle; + private LifeCycle lifecycle; private AlarmConfig alarmConfig; @@ -168,6 +169,9 @@ public class JobInfoVO { if (!StringUtils.isEmpty(jobInfoDO.getAlarmConfig())){ jobInfoVO.setAlarmConfig(JSON.parseObject(jobInfoDO.getAlarmConfig(),AlarmConfig.class)); } + if (!StringUtils.isEmpty(jobInfoDO.getLifecycle())){ + jobInfoVO.setLifecycle(LifeCycle.parse(jobInfoDO.getLifecycle())); + } return jobInfoVO; } diff --git a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/WorkflowInfoVO.java b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/WorkflowInfoVO.java index dfdb2e05..e258aea2 100644 --- a/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/WorkflowInfoVO.java +++ b/powerjob-server/powerjob-server-starter/src/main/java/tech/powerjob/server/web/response/WorkflowInfoVO.java @@ -2,6 +2,7 @@ package tech.powerjob.server.web.response; import com.alibaba.fastjson.JSON; import tech.powerjob.common.enums.TimeExpressionType; +import tech.powerjob.common.model.LifeCycle; import tech.powerjob.common.model.PEWorkflowDAG; import tech.powerjob.server.common.SJ; import tech.powerjob.server.common.constants.SwitchableStatus; @@ -46,7 +47,7 @@ public class WorkflowInfoVO { */ private String timeExpressionType; /** - * 时间表达式,CRON/NULL/LONG/LONG + * 时间表达式,CRON/NULL/LONG/LONG */ private String timeExpression; @@ -64,6 +65,8 @@ public class WorkflowInfoVO { */ private List notifyUserIds; + private LifeCycle lifeCycle; + private Date gmtCreate; private Date gmtModified; @@ -78,6 +81,9 @@ public class WorkflowInfoVO { if (!StringUtils.isEmpty(wfDO.getNotifyUserIds())) { vo.setNotifyUserIds(SJ.COMMA_SPLITTER.splitToList(wfDO.getNotifyUserIds()).stream().map(Long::valueOf).collect(Collectors.toList())); } + if (!StringUtils.isEmpty(wfDO.getLifecycle())) { + vo.lifeCycle = LifeCycle.parse(wfDO.getLifecycle()); + } return vo; } }