[Bug] [Server] Once click online schedule time, task will be automatically scheduled (#13092)
* fix bug that trigger mis-fire strategy when setting start time earlier than current time
* update ut
* add warning msg
* add check start time when set schedule online
(cherry picked from commit 7497b26979)
This commit is contained in:
parent
e028e640af
commit
bc957153c6
|
|
@ -330,6 +330,7 @@ public enum Status {
|
|||
COMMAND_STATE_COUNT_ERROR(80001, "task instance state count error", "查询各状态任务实例数错误"),
|
||||
NEGTIVE_SIZE_NUMBER_ERROR(80002, "query size number error", "查询size错误"),
|
||||
START_TIME_BIGGER_THAN_END_TIME_ERROR(80003, "start time bigger than end time error", "开始时间在结束时间之后错误"),
|
||||
START_TIME_BEFORE_CURRENT_TIME_ERROR(80004, "start time before current time error", "开始时间在当前时间之前错误"),
|
||||
QUEUE_COUNT_ERROR(90001, "queue count error", "查询队列数据错误"),
|
||||
|
||||
KERBEROS_STARTUP_STATE(100001, "get kerberos startup state error", "获取kerberos启动状态错误"),
|
||||
|
|
|
|||
|
|
@ -166,13 +166,18 @@ public class SchedulerServiceImpl extends BaseServiceImpl implements SchedulerSe
|
|||
scheduleObj.setProcessDefinitionName(processDefinition.getName());
|
||||
|
||||
ScheduleParam scheduleParam = JSONUtils.parseObject(schedule, ScheduleParam.class);
|
||||
if (now.after(scheduleParam.getStartTime())) {
|
||||
logger.warn("The start time must be later than current time.");
|
||||
putMsg(result, Status.START_TIME_BEFORE_CURRENT_TIME_ERROR);
|
||||
return result;
|
||||
}
|
||||
if (DateUtils.differSec(scheduleParam.getStartTime(), scheduleParam.getEndTime()) == 0) {
|
||||
logger.warn("The start time must not be the same as the end");
|
||||
putMsg(result, Status.SCHEDULE_START_TIME_END_TIME_SAME);
|
||||
return result;
|
||||
}
|
||||
if (scheduleParam.getStartTime().getTime() > scheduleParam.getEndTime().getTime()) {
|
||||
logger.warn("The start time must smaller than end time");
|
||||
logger.warn("The start time must be smaller than end time.");
|
||||
putMsg(result, Status.START_TIME_BIGGER_THAN_END_TIME_ERROR);
|
||||
return result;
|
||||
}
|
||||
|
|
@ -319,6 +324,13 @@ public class SchedulerServiceImpl extends BaseServiceImpl implements SchedulerSe
|
|||
return result;
|
||||
}
|
||||
if (scheduleStatus == ReleaseState.ONLINE) {
|
||||
// check schedule start time
|
||||
Date now = new Date();
|
||||
if (now.after(scheduleObj.getStartTime())) {
|
||||
logger.warn("The start time must be later than current time.");
|
||||
putMsg(result, Status.START_TIME_BEFORE_CURRENT_TIME_ERROR);
|
||||
return result;
|
||||
}
|
||||
// check process definition release state
|
||||
if (processDefinition.getReleaseState() != ReleaseState.ONLINE) {
|
||||
logger.info("not release process definition id: {} , name : {}",
|
||||
|
|
@ -667,13 +679,18 @@ public class SchedulerServiceImpl extends BaseServiceImpl implements SchedulerSe
|
|||
putMsg(result, Status.PARSE_TO_CRON_EXPRESSION_ERROR);
|
||||
return;
|
||||
}
|
||||
if (now.after(scheduleParam.getStartTime())) {
|
||||
logger.warn("The start time must be later than current time.");
|
||||
putMsg(result, Status.START_TIME_BEFORE_CURRENT_TIME_ERROR);
|
||||
return;
|
||||
}
|
||||
if (DateUtils.differSec(scheduleParam.getStartTime(), scheduleParam.getEndTime()) == 0) {
|
||||
logger.warn("The start time must not be the same as the end");
|
||||
putMsg(result, Status.SCHEDULE_START_TIME_END_TIME_SAME);
|
||||
return;
|
||||
}
|
||||
if (scheduleParam.getStartTime().getTime() > scheduleParam.getEndTime().getTime()) {
|
||||
logger.warn("The start time must smaller than end time");
|
||||
logger.warn("The start time must be smaller than end time.");
|
||||
putMsg(result, Status.START_TIME_BIGGER_THAN_END_TIME_ERROR);
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -83,6 +83,21 @@ public class SchedulerServiceTest {
|
|||
@InjectMocks
|
||||
private QuartzExecutorImpl quartzExecutors;
|
||||
|
||||
protected static User user;
|
||||
protected Exception exception;
|
||||
private static final String userName = "userName";
|
||||
private static final String projectName = "projectName";
|
||||
private static final long projectCode = 1L;
|
||||
private static final int userId = 1;
|
||||
private static final String processDefinitionName = "processDefinitionName";
|
||||
private static final long processDefinitionCode = 2L;
|
||||
private static final int processDefinitionVersion = 3;
|
||||
private static final int scheduleId = 3;
|
||||
private static final long environmentCode = 4L;
|
||||
private static final String startTime = "2220-01-01 12:13:14";
|
||||
private static final String endTime = "2220-02-01 12:13:14";
|
||||
private static final String crontab = "0 0 * * * ? *";
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ export const useForm = () => {
|
|||
timingFormRef: ref(),
|
||||
timingForm: {
|
||||
startEndTime: [
|
||||
new Date(year, month, day),
|
||||
new Date(year, month, day + 1),
|
||||
new Date(year + 100, month, day)
|
||||
],
|
||||
crontab: '0 0 * * * ? *',
|
||||
|
|
|
|||
Loading…
Reference in New Issue