fix: the problem of failed to save workflow and job

This commit is contained in:
Echo009 2022-03-31 11:50:19 +08:00
parent 8909584976
commit 3923937f6c
6 changed files with 21 additions and 12 deletions

View File

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

View File

@ -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);
}
// 重写最后修改时间

View File

@ -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

View File

@ -39,7 +39,7 @@ public class JobController {
private JobInfoRepository jobInfoRepository;
@PostMapping("/save")
public ResultDTO<Void> saveJobInfo(@RequestBody SaveJobInfoRequest request) throws Exception {
public ResultDTO<Void> saveJobInfo(@RequestBody SaveJobInfoRequest request) {
jobService.saveJob(request);
return ResultDTO.success(null);
}

View File

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

View File

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