diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/SchedulerController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/SchedulerController.java index 20b668a641..5732027044 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/SchedulerController.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/SchedulerController.java @@ -65,7 +65,7 @@ import springfox.documentation.annotations.ApiIgnore; */ @Api(tags = "SCHEDULER_TAG") @RestController -@RequestMapping("/projects/{projectName}/schedule") +@RequestMapping("/projects/{projectCode}/schedule") public class SchedulerController extends BaseController { public static final String DEFAULT_WARNING_TYPE = "NONE"; @@ -81,8 +81,8 @@ public class SchedulerController extends BaseController { * create schedule * * @param loginUser login user - * @param projectName project name - * @param processDefinitionId process definition id + * @param projectCode project code + * @param processDefinitionCode process definition code * @param schedule scheduler * @param warningType warning type * @param warningGroupId warning group id @@ -93,7 +93,7 @@ public class SchedulerController extends BaseController { */ @ApiOperation(value = "createSchedule", notes = "CREATE_SCHEDULE_NOTES") @ApiImplicitParams({ - @ApiImplicitParam(name = "processDefinitionId", value = "PROCESS_DEFINITION_ID", required = true, dataType = "Int", example = "100"), + @ApiImplicitParam(name = "processDefinitionCode", value = "PROCESS_DEFINITION_CODE", required = true, dataType = "Long", example = "100"), @ApiImplicitParam(name = "schedule", value = "SCHEDULE", dataType = "String", example = "{'startTime':'2019-06-10 00:00:00','endTime':'2019-06-13 00:00:00','timezoneId':'America/Phoenix','crontab':'0 0 3/6 * * ? *'}"), @ApiImplicitParam(name = "warningType", value = "WARNING_TYPE", type = "WarningType"), @@ -107,15 +107,15 @@ public class SchedulerController extends BaseController { @ApiException(CREATE_SCHEDULE_ERROR) @AccessLogAnnotation(ignoreRequestArgs = "loginUser") public Result createSchedule(@ApiIgnore @RequestAttribute(value = SESSION_USER) User loginUser, - @ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable String projectName, - @RequestParam(value = "processDefinitionId") Integer processDefinitionId, + @ApiParam(name = "projectCode", value = "PROJECT_CODE", required = true) @PathVariable long projectCode, + @RequestParam(value = "processDefinitionCode") long processDefinitionCode, @RequestParam(value = "schedule") String schedule, @RequestParam(value = "warningType", required = false, defaultValue = DEFAULT_WARNING_TYPE) WarningType warningType, @RequestParam(value = "warningGroupId", required = false, defaultValue = DEFAULT_NOTIFY_GROUP_ID) int warningGroupId, @RequestParam(value = "failureStrategy", required = false, defaultValue = DEFAULT_FAILURE_POLICY) FailureStrategy failureStrategy, @RequestParam(value = "workerGroup", required = false, defaultValue = "default") String workerGroup, @RequestParam(value = "processInstancePriority", required = false, defaultValue = DEFAULT_PROCESS_INSTANCE_PRIORITY) Priority processInstancePriority) { - Map result = schedulerService.insertSchedule(loginUser, projectName, processDefinitionId, schedule, + Map result = schedulerService.insertSchedule(loginUser, projectCode, processDefinitionCode, schedule, warningType, warningGroupId, failureStrategy, processInstancePriority, workerGroup); return returnDataList(result); diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/SchedulerService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/SchedulerService.java index 18f3ebf55f..7b743c4eb5 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/SchedulerService.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/SchedulerService.java @@ -34,8 +34,8 @@ public interface SchedulerService { * save schedule * * @param loginUser login user - * @param projectName project name - * @param processDefineId process definition id + * @param projectCode project code + * @param processDefineCode process definition code * @param schedule scheduler * @param warningType warning type * @param warningGroupId warning group id @@ -44,8 +44,9 @@ public interface SchedulerService { * @param workerGroup worker group * @return create result code */ - Map insertSchedule(User loginUser, String projectName, - Integer processDefineId, + Map insertSchedule(User loginUser, + long projectCode, + long processDefineCode, String schedule, WarningType warningType, int warningGroupId, @@ -144,4 +145,4 @@ public interface SchedulerService { * @return the next five fire time */ Map previewSchedule(User loginUser, String projectName, String schedule); -} \ No newline at end of file +} diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/SchedulerServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/SchedulerServiceImpl.java index d83682f2b5..ef383e574d 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/SchedulerServiceImpl.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/SchedulerServiceImpl.java @@ -97,8 +97,8 @@ public class SchedulerServiceImpl extends BaseServiceImpl implements SchedulerSe * save schedule * * @param loginUser login user - * @param projectName project name - * @param processDefineId process definition id + * @param projectCode project name + * @param processDefineCode process definition code * @param schedule scheduler * @param warningType warning type * @param warningGroupId warning group id @@ -109,8 +109,9 @@ public class SchedulerServiceImpl extends BaseServiceImpl implements SchedulerSe */ @Override @Transactional(rollbackFor = RuntimeException.class) - public Map insertSchedule(User loginUser, String projectName, - Integer processDefineId, + public Map insertSchedule(User loginUser, + long projectCode, + long processDefineCode, String schedule, WarningType warningType, int warningGroupId, @@ -120,7 +121,7 @@ public class SchedulerServiceImpl extends BaseServiceImpl implements SchedulerSe Map result = new HashMap<>(); - Project project = projectMapper.queryByName(projectName); + Project project = projectMapper.queryByCode(projectCode); // check project auth boolean hasProjectAndPerm = projectService.hasProjectAndPerm(loginUser, project, result); @@ -129,8 +130,8 @@ public class SchedulerServiceImpl extends BaseServiceImpl implements SchedulerSe } // check work flow define release state - ProcessDefinition processDefinition = processService.findProcessDefineById(processDefineId); - result = executorService.checkProcessDefinitionValid(processDefinition, processDefineId); + ProcessDefinition processDefinition = processDefinitionMapper.queryByCode(processDefineCode); + result = executorService.checkProcessDefinitionValid(processDefinition, processDefineCode); if (result.get(Constants.STATUS) != Status.SUCCESS) { return result; } @@ -138,7 +139,7 @@ public class SchedulerServiceImpl extends BaseServiceImpl implements SchedulerSe Schedule scheduleObj = new Schedule(); Date now = new Date(); - scheduleObj.setProjectName(projectName); + scheduleObj.setProjectName(project.getName()); scheduleObj.setProcessDefinitionId(processDefinition.getId()); scheduleObj.setProcessDefinitionName(processDefinition.getName()); diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/AbstractControllerTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/AbstractControllerTest.java index b0c9616533..83d1ae8b06 100644 --- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/AbstractControllerTest.java +++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/AbstractControllerTest.java @@ -19,13 +19,17 @@ package org.apache.dolphinscheduler.api.controller; import static org.mockito.Mockito.doNothing; +import java.text.MessageFormat; +import java.util.Map; + import org.apache.dolphinscheduler.api.ApiApplicationServer; +import org.apache.dolphinscheduler.api.enums.Status; import org.apache.dolphinscheduler.api.service.SessionService; +import org.apache.dolphinscheduler.common.Constants; import org.apache.dolphinscheduler.common.enums.UserType; import org.apache.dolphinscheduler.common.utils.StringUtils; import org.apache.dolphinscheduler.dao.entity.User; import org.apache.dolphinscheduler.service.registry.RegistryClient; - import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -87,6 +91,14 @@ public class AbstractControllerTest { sessionId = session; Assert.assertTrue(StringUtils.isNotEmpty(session)); + } + public void putMsg(Map result, Status status, Object... statusParams) { + result.put(Constants.STATUS, status); + if (statusParams != null && statusParams.length > 0) { + result.put(Constants.MSG, MessageFormat.format(status.getMsg(), statusParams)); + } else { + result.put(Constants.MSG, status.getMsg()); + } } } diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/SchedulerControllerTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/SchedulerControllerTest.java index 6122c1ac7f..d37f1061cc 100644 --- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/SchedulerControllerTest.java +++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/SchedulerControllerTest.java @@ -17,22 +17,30 @@ package org.apache.dolphinscheduler.api.controller; +import static org.mockito.ArgumentMatchers.isA; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; +import java.util.HashMap; +import java.util.Map; + import org.apache.dolphinscheduler.api.enums.Status; +import org.apache.dolphinscheduler.api.service.SchedulerService; import org.apache.dolphinscheduler.api.utils.Result; +import org.apache.dolphinscheduler.common.Constants; import org.apache.dolphinscheduler.common.enums.FailureStrategy; import org.apache.dolphinscheduler.common.enums.Priority; import org.apache.dolphinscheduler.common.enums.WarningType; import org.apache.dolphinscheduler.common.utils.JSONUtils; - +import org.apache.dolphinscheduler.dao.entity.User; import org.junit.Assert; import org.junit.Test; +import org.mockito.Mockito; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MvcResult; import org.springframework.util.LinkedMultiValueMap; @@ -41,14 +49,17 @@ import org.springframework.util.MultiValueMap; /** * scheduler controller test */ -public class SchedulerControllerTest extends AbstractControllerTest{ +public class SchedulerControllerTest extends AbstractControllerTest { private static Logger logger = LoggerFactory.getLogger(SchedulerControllerTest.class); + @MockBean + private SchedulerService schedulerService; + @Test public void testCreateSchedule() throws Exception { MultiValueMap paramsMap = new LinkedMultiValueMap<>(); - paramsMap.add("processDefinitionId","40"); + paramsMap.add("processDefinitionCode","40"); paramsMap.add("schedule","{'startTime':'2019-12-16 00:00:00','endTime':'2019-12-17 00:00:00','crontab':'0 0 6 * * ? *'}"); paramsMap.add("warningType",String.valueOf(WarningType.NONE)); paramsMap.add("warningGroupId","1"); @@ -58,7 +69,15 @@ public class SchedulerControllerTest extends AbstractControllerTest{ paramsMap.add("workerGroupId","1"); paramsMap.add("processInstancePriority",String.valueOf(Priority.HIGH)); - MvcResult mvcResult = mockMvc.perform(post("/projects/{projectName}/schedule/create","cxc_1113") + Map serviceResult = new HashMap<>(); + putMsg(serviceResult, Status.SUCCESS); + serviceResult.put(Constants.DATA_LIST, 1); + + Mockito.when(schedulerService.insertSchedule(isA(User.class), isA(Long.class), isA(Long.class), + isA(String.class), isA(WarningType.class), isA(int.class), isA(FailureStrategy.class), + isA(Priority.class), isA(String.class))).thenReturn(serviceResult); + + MvcResult mvcResult = mockMvc.perform(post("/projects/{projectCode}/schedule/create",123) .header(SESSION_ID, sessionId) .params(paramsMap)) .andExpect(status().isCreated()) diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/WorkFlowLineageControllerTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/WorkFlowLineageControllerTest.java index 4666150115..4fa6ef7df7 100644 --- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/WorkFlowLineageControllerTest.java +++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/WorkFlowLineageControllerTest.java @@ -76,15 +76,6 @@ public class WorkFlowLineageControllerTest extends AbstractControllerTest { Assert.assertEquals(Status.SUCCESS.getCode(), response.getCode().intValue()); } - private void putMsg(Map result, Status status, Object... statusParams) { - result.put(Constants.STATUS, status); - if (statusParams != null && statusParams.length > 0) { - result.put(Constants.MSG, MessageFormat.format(status.getMsg(), statusParams)); - } else { - result.put(Constants.MSG, status.getMsg()); - } - } - @Test public void testQueryWorkFlowLineageByIds() { int projectId = 1; diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/timing.vue b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/timing.vue index 08e06cdad9..c8a3caf462 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/timing.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/definition/pages/list/_source/timing.vue @@ -240,7 +240,7 @@ msg = `${i18n.$t('Edit')}${i18n.$t('Success')},${i18n.$t('Please go online')}` } else { api = 'dag/createSchedule' - searchParams.processDefinitionId = this.timingData.item.id + searchParams.processDefinitionCode = this.timingData.item.code msg = `${i18n.$t('Create')}${i18n.$t('Success')}` } diff --git a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/list/_source/list.vue b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/list/_source/list.vue index 06ecfb032b..fe5086f984 100644 --- a/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/list/_source/list.vue +++ b/dolphinscheduler-ui/src/js/conf/home/pages/projects/pages/list/_source/list.vue @@ -89,11 +89,13 @@ }, methods: { ...mapActions('projects', ['deleteProjects']), - ...mapMutations('dag', ['setProjectId', 'setProjectName']), + ...mapMutations('dag', ['setProjectId', 'setProjectCode', 'setProjectName']), _switchProjects (item) { this.setProjectId(item.id) + this.setProjectCode(item.code) this.setProjectName(item.name) localStore.setItem('projectId', item.id) + localStore.setItem('projectCode', item.code) localStore.setItem('projectName', item.name) this.$router.push({ path: `/projects/${item.id}/index` }) }, diff --git a/dolphinscheduler-ui/src/js/conf/home/router/index.js b/dolphinscheduler-ui/src/js/conf/home/router/index.js index 36608522a6..35cb943b74 100644 --- a/dolphinscheduler-ui/src/js/conf/home/router/index.js +++ b/dolphinscheduler-ui/src/js/conf/home/router/index.js @@ -59,8 +59,10 @@ const router = new Router({ projectId: to.params.projectId }).then(res => { store.commit('dag/setProjectId', res.id) + store.commit('dag/setProjectCode', res.code) store.commit('dag/setProjectName', res.name) localStore.setItem('projectId', res.id) + localStore.setItem('projectCode', res.code) localStore.setItem('projectName', res.name) next() }).catch(e => { diff --git a/dolphinscheduler-ui/src/js/conf/home/store/dag/actions.js b/dolphinscheduler-ui/src/js/conf/home/store/dag/actions.js index 3cda9e311a..4166c1d068 100644 --- a/dolphinscheduler-ui/src/js/conf/home/store/dag/actions.js +++ b/dolphinscheduler-ui/src/js/conf/home/store/dag/actions.js @@ -555,7 +555,7 @@ export default { */ createSchedule ({ state }, payload) { return new Promise((resolve, reject) => { - io.post(`projects/${state.projectName}/schedule/create`, payload, res => { + io.post(`projects/${state.projectCode}/schedule/create`, payload, res => { resolve(res) }).catch(e => { reject(e) diff --git a/dolphinscheduler-ui/src/js/conf/home/store/dag/mutations.js b/dolphinscheduler-ui/src/js/conf/home/store/dag/mutations.js index 1a6dd2cd5c..010a860347 100755 --- a/dolphinscheduler-ui/src/js/conf/home/store/dag/mutations.js +++ b/dolphinscheduler-ui/src/js/conf/home/store/dag/mutations.js @@ -21,6 +21,9 @@ export default { setProjectId (state, payload) { state.projectId = payload }, + setProjectCode (state, payload) { + state.projectCode = payload + }, setProjectName (state, payload) { state.projectName = payload }, diff --git a/dolphinscheduler-ui/src/js/conf/home/store/dag/state.js b/dolphinscheduler-ui/src/js/conf/home/store/dag/state.js index 8bbbda8b2b..4843ad97e3 100644 --- a/dolphinscheduler-ui/src/js/conf/home/store/dag/state.js +++ b/dolphinscheduler-ui/src/js/conf/home/store/dag/state.js @@ -19,6 +19,7 @@ import localStore from '@/module/util/localStorage' // Get the project currently clicked const projectId = localStore.getItem('projectId') +const projectCode = localStore.getItem('projectCode') const projectName = localStore.getItem('projectName') export default { @@ -50,6 +51,8 @@ export default { isEditDag: false, // Current project id projectId: projectId, + // Current project code + projectCode: projectCode, // Current project name projectName: projectName || '', // Whether to go online the process definition