mirror of
https://github.com/PowerJob/PowerJob.git
synced 2025-07-17 00:00:04 +08:00
fix: the problem of failed to save workflow and job
This commit is contained in:
parent
8909584976
commit
3923937f6c
@ -83,15 +83,14 @@ public class TimingStrategyService {
|
|||||||
/**
|
/**
|
||||||
* 计算下次的调度时间并检查校验规则
|
* 计算下次的调度时间并检查校验规则
|
||||||
*
|
*
|
||||||
* @param preTriggerTime 上次触发时间(nullable)
|
|
||||||
* @param timeExpressionType 定时表达式类型
|
* @param timeExpressionType 定时表达式类型
|
||||||
* @param timeExpression 表达式
|
* @param timeExpression 表达式
|
||||||
* @param startTime 起始时间(include)
|
* @param startTime 起始时间(include)
|
||||||
* @param endTime 结束时间(include)
|
* @param endTime 结束时间(include)
|
||||||
* @return 下次的调度时间
|
* @return 下次的调度时间
|
||||||
*/
|
*/
|
||||||
public Long calculateNextTriggerTimeWithInspection(Long preTriggerTime, TimeExpressionType timeExpressionType, String timeExpression, Long startTime, Long endTime) {
|
public Long calculateNextTriggerTimeWithInspection( TimeExpressionType timeExpressionType, String timeExpression, Long startTime, Long endTime) {
|
||||||
Long nextTriggerTime = calculateNextTriggerTime(preTriggerTime, timeExpressionType, timeExpression, startTime, endTime);
|
Long nextTriggerTime = calculateNextTriggerTime(null, timeExpressionType, timeExpression, startTime, endTime);
|
||||||
if (TimeExpressionType.INSPECT_TYPES.contains(timeExpressionType.getV()) && nextTriggerTime == null) {
|
if (TimeExpressionType.INSPECT_TYPES.contains(timeExpressionType.getV()) && nextTriggerTime == null) {
|
||||||
throw new PowerJobException("time expression is out of date: " + timeExpression);
|
throw new PowerJobException("time expression is out of date: " + timeExpression);
|
||||||
}
|
}
|
||||||
|
@ -91,7 +91,7 @@ public class JobService {
|
|||||||
if (!CollectionUtils.isEmpty(request.getNotifyUserIds())) {
|
if (!CollectionUtils.isEmpty(request.getNotifyUserIds())) {
|
||||||
jobInfoDO.setNotifyUserIds(SJ.COMMA_JOINER.join(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));
|
jobInfoDO.setLifecycle(JSON.toJSONString(lifecycle));
|
||||||
// 检查定时策略
|
// 检查定时策略
|
||||||
timingStrategyService.validate(request.getTimeExpressionType(), request.getTimeExpression(), lifecycle.getStart(), lifecycle.getEnd());
|
timingStrategyService.validate(request.getTimeExpressionType(), request.getTimeExpression(), lifecycle.getStart(), lifecycle.getEnd());
|
||||||
@ -255,7 +255,7 @@ public class JobService {
|
|||||||
jobInfo.setTimeExpression(null);
|
jobInfo.setTimeExpression(null);
|
||||||
} else {
|
} else {
|
||||||
LifeCycle lifeCycle = LifeCycle.parse(jobInfo.getLifecycle());
|
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);
|
jobInfo.setNextTriggerTime(nextValidTime);
|
||||||
}
|
}
|
||||||
// 重写最后修改时间
|
// 重写最后修改时间
|
||||||
|
@ -88,12 +88,12 @@ public class WorkflowService {
|
|||||||
if (req.getLifeCycle() != null) {
|
if (req.getLifeCycle() != null) {
|
||||||
wf.setLifecycle(JSON.toJSONString(req.getLifeCycle()));
|
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);
|
wf.setTimeExpression(null);
|
||||||
}else {
|
} else {
|
||||||
LifeCycle lifeCycle = Optional.of(req.getLifeCycle()).orElse(LifeCycle.EMPTY_LIFE_CYCLE);
|
LifeCycle lifeCycle = Optional.ofNullable(req.getLifeCycle()).orElse(LifeCycle.EMPTY_LIFE_CYCLE);
|
||||||
Long nextValidTime = timingStrategyService.calculateNextTriggerTimeWithInspection(wf.getNextTriggerTime(), TimeExpressionType.CRON, wf.getTimeExpression(), lifeCycle.getStart(), lifeCycle.getEnd());
|
Long nextValidTime = timingStrategyService.calculateNextTriggerTimeWithInspection(TimeExpressionType.of(wf.getTimeExpressionType()), wf.getTimeExpression(), lifeCycle.getStart(), lifeCycle.getEnd());
|
||||||
wf.setNextTriggerTime(nextValidTime);
|
wf.setNextTriggerTime(nextValidTime);
|
||||||
}
|
}
|
||||||
// 新增工作流,需要先 save 一下获取 ID
|
// 新增工作流,需要先 save 一下获取 ID
|
||||||
|
@ -39,7 +39,7 @@ public class JobController {
|
|||||||
private JobInfoRepository jobInfoRepository;
|
private JobInfoRepository jobInfoRepository;
|
||||||
|
|
||||||
@PostMapping("/save")
|
@PostMapping("/save")
|
||||||
public ResultDTO<Void> saveJobInfo(@RequestBody SaveJobInfoRequest request) throws Exception {
|
public ResultDTO<Void> saveJobInfo(@RequestBody SaveJobInfoRequest request) {
|
||||||
jobService.saveJob(request);
|
jobService.saveJob(request);
|
||||||
return ResultDTO.success(null);
|
return ResultDTO.success(null);
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import tech.powerjob.common.enums.ExecuteType;
|
|||||||
import tech.powerjob.common.enums.ProcessorType;
|
import tech.powerjob.common.enums.ProcessorType;
|
||||||
import tech.powerjob.common.enums.TimeExpressionType;
|
import tech.powerjob.common.enums.TimeExpressionType;
|
||||||
import tech.powerjob.common.model.AlarmConfig;
|
import tech.powerjob.common.model.AlarmConfig;
|
||||||
|
import tech.powerjob.common.model.LifeCycle;
|
||||||
import tech.powerjob.common.utils.CommonUtils;
|
import tech.powerjob.common.utils.CommonUtils;
|
||||||
import tech.powerjob.server.common.SJ;
|
import tech.powerjob.server.common.SJ;
|
||||||
import tech.powerjob.common.enums.DispatchStrategy;
|
import tech.powerjob.common.enums.DispatchStrategy;
|
||||||
@ -139,7 +140,7 @@ public class JobInfoVO {
|
|||||||
|
|
||||||
private String dispatchStrategy;
|
private String dispatchStrategy;
|
||||||
|
|
||||||
private String lifecycle;
|
private LifeCycle lifecycle;
|
||||||
|
|
||||||
private AlarmConfig alarmConfig;
|
private AlarmConfig alarmConfig;
|
||||||
|
|
||||||
@ -168,6 +169,9 @@ public class JobInfoVO {
|
|||||||
if (!StringUtils.isEmpty(jobInfoDO.getAlarmConfig())){
|
if (!StringUtils.isEmpty(jobInfoDO.getAlarmConfig())){
|
||||||
jobInfoVO.setAlarmConfig(JSON.parseObject(jobInfoDO.getAlarmConfig(),AlarmConfig.class));
|
jobInfoVO.setAlarmConfig(JSON.parseObject(jobInfoDO.getAlarmConfig(),AlarmConfig.class));
|
||||||
}
|
}
|
||||||
|
if (!StringUtils.isEmpty(jobInfoDO.getLifecycle())){
|
||||||
|
jobInfoVO.setLifecycle(LifeCycle.parse(jobInfoDO.getLifecycle()));
|
||||||
|
}
|
||||||
|
|
||||||
return jobInfoVO;
|
return jobInfoVO;
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package tech.powerjob.server.web.response;
|
|||||||
|
|
||||||
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSON;
|
||||||
import tech.powerjob.common.enums.TimeExpressionType;
|
import tech.powerjob.common.enums.TimeExpressionType;
|
||||||
|
import tech.powerjob.common.model.LifeCycle;
|
||||||
import tech.powerjob.common.model.PEWorkflowDAG;
|
import tech.powerjob.common.model.PEWorkflowDAG;
|
||||||
import tech.powerjob.server.common.SJ;
|
import tech.powerjob.server.common.SJ;
|
||||||
import tech.powerjob.server.common.constants.SwitchableStatus;
|
import tech.powerjob.server.common.constants.SwitchableStatus;
|
||||||
@ -46,7 +47,7 @@ public class WorkflowInfoVO {
|
|||||||
*/
|
*/
|
||||||
private String timeExpressionType;
|
private String timeExpressionType;
|
||||||
/**
|
/**
|
||||||
* 时间表达式,CRON/NULL/LONG/LONG
|
* 时间表达式,CRON/NULL/LONG/LONG
|
||||||
*/
|
*/
|
||||||
private String timeExpression;
|
private String timeExpression;
|
||||||
|
|
||||||
@ -64,6 +65,8 @@ public class WorkflowInfoVO {
|
|||||||
*/
|
*/
|
||||||
private List<Long> notifyUserIds;
|
private List<Long> notifyUserIds;
|
||||||
|
|
||||||
|
private LifeCycle lifeCycle;
|
||||||
|
|
||||||
private Date gmtCreate;
|
private Date gmtCreate;
|
||||||
|
|
||||||
private Date gmtModified;
|
private Date gmtModified;
|
||||||
@ -78,6 +81,9 @@ public class WorkflowInfoVO {
|
|||||||
if (!StringUtils.isEmpty(wfDO.getNotifyUserIds())) {
|
if (!StringUtils.isEmpty(wfDO.getNotifyUserIds())) {
|
||||||
vo.setNotifyUserIds(SJ.COMMA_SPLITTER.splitToList(wfDO.getNotifyUserIds()).stream().map(Long::valueOf).collect(Collectors.toList()));
|
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;
|
return vo;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user