Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug] [Server] Once click online schedule time, task will be automatically scheduled #13092

Merged
merged 4 commits into from
Dec 28, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -405,6 +405,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启动状态错误"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,13 +171,18 @@ public Map<String, Object> insertSchedule(User loginUser,
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 or time can not be null.");
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;
}
Expand Down Expand Up @@ -234,6 +239,10 @@ private void scheduleParamCheck(String scheduleParamStr) {
if (scheduleParam == null) {
throw new ServiceException(Status.PARSE_SCHEDULE_PARAM_ERROR, scheduleParamStr);
}
Date now = new Date();
if (now.after(scheduleParam.getStartTime())) {
throw new ServiceException(Status.START_TIME_BEFORE_CURRENT_TIME_ERROR);
}
if (DateUtils.differSec(scheduleParam.getStartTime(), scheduleParam.getEndTime()) == 0) {
throw new ServiceException(Status.SCHEDULE_START_TIME_END_TIME_SAME);
}
Expand Down Expand Up @@ -471,6 +480,13 @@ public Map<String, Object> setScheduleState(User loginUser,
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.warn("Only process definition state is {} can change schedule state, processDefinitionCode:{}.",
Expand Down Expand Up @@ -833,13 +849,18 @@ private void updateSchedule(Map<String, Object> result, Schedule schedule, Proce
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 or time can not be null.");
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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,8 +105,8 @@ public class SchedulerServiceTest extends BaseServiceTestTool {
private static final int processDefinitionVersion = 3;
private static final int scheduleId = 3;
private static final long environmentCode = 4L;
private static final String startTime = "2020-01-01 12:13:14";
private static final String endTime = "2020-02-01 12:13:14";
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 * * * ? *";

@BeforeEach
Expand Down Expand Up @@ -175,6 +175,8 @@ public void testCreateSchedulesV2() {
ScheduleCreateRequest scheduleCreateRequest = new ScheduleCreateRequest();
scheduleCreateRequest.setProcessDefinitionCode(processDefinitionCode);
scheduleCreateRequest.setEnvironmentCode(environmentCode);
scheduleCreateRequest.setStartTime(startTime);
scheduleCreateRequest.setEndTime(endTime);

// error process definition not exists
exception = Assertions.assertThrows(ServiceException.class,
Expand Down Expand Up @@ -208,16 +210,24 @@ public void testCreateSchedulesV2() {
Assertions.assertEquals(Status.QUERY_ENVIRONMENT_BY_CODE_ERROR.getCode(),
((ServiceException) exception).getCode());

// error schedule parameter same start time and end time
// error schedule parameter start time before current time
String badStartTime = "2020-01-01 12:13:14";
scheduleCreateRequest.setStartTime(badStartTime);
Mockito.when(environmentMapper.queryByEnvironmentCode(environmentCode)).thenReturn(this.getEnvironment());
exception = Assertions.assertThrows(ServiceException.class,
() -> schedulerService.createSchedulesV2(user, scheduleCreateRequest));
Assertions.assertEquals(Status.START_TIME_BEFORE_CURRENT_TIME_ERROR.getCode(),
((ServiceException) exception).getCode());

// error schedule parameter same start time and end time
scheduleCreateRequest.setStartTime(endTime);
exception = Assertions.assertThrows(ServiceException.class,
() -> schedulerService.createSchedulesV2(user, scheduleCreateRequest));
Assertions.assertEquals(Status.SCHEDULE_START_TIME_END_TIME_SAME.getCode(),
((ServiceException) exception).getCode());

// error schedule parameter same start time after than end time
scheduleCreateRequest.setEndTime(endTime);
String badStartTime = "2022-01-01 12:13:14";
// error schedule parameter start time after than end time
badStartTime = "2222-01-01 12:13:14";
scheduleCreateRequest.setStartTime(badStartTime);
exception = Assertions.assertThrows(ServiceException.class,
() -> schedulerService.createSchedulesV2(user, scheduleCreateRequest));
Expand Down Expand Up @@ -361,17 +371,25 @@ public void testUpdateSchedulesV2() {
() -> schedulerService.updateSchedulesV2(user, scheduleId, scheduleUpdateRequest));
Assertions.assertEquals(Status.SCHEDULE_NOT_EXISTS.getCode(), ((ServiceException) exception).getCode());

// error schedule parameter same start time and end time
// error schedule parameter start time before current time
String badStartTime = "2020-01-01 12:13:14";
scheduleUpdateRequest.setStartTime(badStartTime);
scheduleUpdateRequest.setEndTime(endTime);
scheduleUpdateRequest.setStartTime(endTime);
Mockito.when(scheduleMapper.selectById(scheduleId)).thenReturn(this.getSchedule());
exception = Assertions.assertThrows(ServiceException.class,
() -> schedulerService.updateSchedulesV2(user, scheduleId, scheduleUpdateRequest));
Assertions.assertEquals(Status.START_TIME_BEFORE_CURRENT_TIME_ERROR.getCode(),
((ServiceException) exception).getCode());

// error schedule parameter same start time and end time
scheduleUpdateRequest.setStartTime(endTime);
exception = Assertions.assertThrows(ServiceException.class,
() -> schedulerService.updateSchedulesV2(user, scheduleId, scheduleUpdateRequest));
Assertions.assertEquals(Status.SCHEDULE_START_TIME_END_TIME_SAME.getCode(),
((ServiceException) exception).getCode());

// error schedule parameter same start time after than end time
String badStartTime = "2022-01-01 12:13:14";
// error schedule parameter start time after than end time
badStartTime = "2222-01-01 12:13:14";
scheduleUpdateRequest.setStartTime(badStartTime);
exception = Assertions.assertThrows(ServiceException.class,
() -> schedulerService.updateSchedulesV2(user, scheduleId, scheduleUpdateRequest));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,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 * * * ? *',
Expand Down