From c10deeeda6568d8efbb95c857d84d3059c48c6ed Mon Sep 17 00:00:00 2001 From: JiPeng Wang <103574007+WangJPLeo@users.noreply.github.com> Date: Sun, 18 Sep 2022 09:11:39 +0800 Subject: [PATCH] CP Workflow Definition Name Change Validation Optimization. (#11986) --- .../ProcessDefinitionController.java | 8 ++++--- .../api/python/PythonGateway.java | 2 +- .../api/service/ProcessDefinitionService.java | 4 +++- .../impl/ProcessDefinitionServiceImpl.java | 15 ++++++++---- .../ProcessDefinitionControllerTest.java | 4 ++-- .../service/ProcessDefinitionServiceTest.java | 6 ++--- .../modules/process-definition/index.ts | 7 ++++-- .../components/dag/dag-save-modal.tsx | 24 +++++++++++++++---- 8 files changed, 49 insertions(+), 21 deletions(-) diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java index b238044a16..de62c740f5 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionController.java @@ -179,7 +179,8 @@ public class ProcessDefinitionController extends BaseController { */ @ApiOperation(value = "verify-name", notes = "VERIFY_PROCESS_DEFINITION_NAME_NOTES") @ApiImplicitParams({ - @ApiImplicitParam(name = "name", value = "PROCESS_DEFINITION_NAME", required = true, type = "String") + @ApiImplicitParam(name = "name", value = "PROCESS_DEFINITION_NAME", required = true, dataTypeClass = String.class), + @ApiImplicitParam(name = "code", value = "PROCESS_DEFINITION_CODE", required = false, dataTypeClass = Long.class), }) @GetMapping(value = "/verify-name") @ResponseStatus(HttpStatus.OK) @@ -187,8 +188,9 @@ public class ProcessDefinitionController extends BaseController { @AccessLogAnnotation(ignoreRequestArgs = "loginUser") public Result verifyProcessDefinitionName(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser, @ApiParam(name = "projectCode", value = "PROJECT_CODE", required = true) @PathVariable long projectCode, - @RequestParam(value = "name", required = true) String name) { - Map result = processDefinitionService.verifyProcessDefinitionName(loginUser, projectCode, name); + @RequestParam(value = "name", required = true) String name, + @RequestParam(value = "code", required = false, defaultValue = "0") long processDefinitionCode) { + Map result = processDefinitionService.verifyProcessDefinitionName(loginUser, projectCode, name, processDefinitionCode); return returnDataList(result); } diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/python/PythonGateway.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/python/PythonGateway.java index 67cbeb81a8..b25feb13e4 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/python/PythonGateway.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/python/PythonGateway.java @@ -267,7 +267,7 @@ public class PythonGateway { * @param processDefinitionName process definition name */ private ProcessDefinition getProcessDefinition(User user, long projectCode, String processDefinitionName) { - Map verifyProcessDefinitionExists = processDefinitionService.verifyProcessDefinitionName(user, projectCode, processDefinitionName); + Map verifyProcessDefinitionExists = processDefinitionService.verifyProcessDefinitionName(user, projectCode, processDefinitionName, 0); Status verifyStatus = (Status) verifyProcessDefinitionExists.get(Constants.STATUS); ProcessDefinition processDefinition = null; diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java index a03b5cdbe6..4bcdfe22c6 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionService.java @@ -187,11 +187,13 @@ public interface ProcessDefinitionService { * @param loginUser login user * @param projectCode project code * @param name name + * @param processDefinitionCode processDefinitionCode * @return true if process definition name not exists, otherwise false */ Map verifyProcessDefinitionName(User loginUser, long projectCode, - String name); + String name, + long processDefinitionCode); /** * delete process definition by code diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java index 185878564f..003ec7f5e1 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessDefinitionServiceImpl.java @@ -666,7 +666,7 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro * @return true if process definition name not exists, otherwise false */ @Override - public Map verifyProcessDefinitionName(User loginUser, long projectCode, String name) { + public Map verifyProcessDefinitionName(User loginUser, long projectCode, String name, long processDefinitionCode) { Project project = projectMapper.queryByCode(projectCode); //check user access for project Map result = projectService.checkProjectAndAuth(loginUser, project, projectCode); @@ -676,9 +676,13 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro ProcessDefinition processDefinition = processDefinitionMapper.verifyByDefineName(project.getCode(), name.trim()); if (processDefinition == null) { putMsg(result, Status.SUCCESS); - } else { - putMsg(result, Status.PROCESS_DEFINITION_NAME_EXIST, name.trim()); + return result; } + if (processDefinitionCode != 0 && processDefinitionCode == processDefinition.getCode()) { + putMsg(result, Status.SUCCESS); + return result; + } + putMsg(result, Status.PROCESS_DEFINITION_NAME_EXIST, name.trim()); return result; } @@ -1126,8 +1130,9 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro // generate import processDefinitionName String processDefinitionName = recursionProcessDefinitionName(projectCode, processDefinition.getName(), 1); String importProcessDefinitionName = getNewName(processDefinitionName, IMPORT_SUFFIX); - //unique check - Map checkResult = verifyProcessDefinitionName(loginUser, projectCode, importProcessDefinitionName); + // unique check + Map checkResult = + verifyProcessDefinitionName(loginUser, projectCode, importProcessDefinitionName, 0); if (Status.SUCCESS.equals(checkResult.get(Constants.STATUS))) { putMsg(result, Status.SUCCESS); } else { diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionControllerTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionControllerTest.java index 398111fa8d..847a2448a6 100644 --- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionControllerTest.java +++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProcessDefinitionControllerTest.java @@ -127,9 +127,9 @@ public class ProcessDefinitionControllerTest { long projectCode = 1L; String name = "dag_test"; - Mockito.when(processDefinitionService.verifyProcessDefinitionName(user, projectCode, name)).thenReturn(result); + Mockito.when(processDefinitionService.verifyProcessDefinitionName(user, projectCode, name, 0)).thenReturn(result); - Result response = processDefinitionController.verifyProcessDefinitionName(user, projectCode, name); + Result response = processDefinitionController.verifyProcessDefinitionName(user, projectCode, name, 0); Assert.assertTrue(response.isStatus(Status.PROCESS_DEFINITION_NAME_EXIST)); } diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java index a6e1cd4476..96cfee49e0 100644 --- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java +++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessDefinitionServiceTest.java @@ -485,20 +485,20 @@ public class ProcessDefinitionServiceTest { putMsg(result, Status.PROJECT_NOT_FOUND, projectCode); Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectCode)).thenReturn(result); Map map = processDefinitionService.verifyProcessDefinitionName(loginUser, - projectCode, "test_pdf"); + projectCode, "test_pdf", 0); Assert.assertEquals(Status.PROJECT_NOT_FOUND, map.get(Constants.STATUS)); //project check auth success, process not exist putMsg(result, Status.SUCCESS, projectCode); Mockito.when(processDefineMapper.verifyByDefineName(project.getCode(), "test_pdf")).thenReturn(null); Map processNotExistRes = processDefinitionService.verifyProcessDefinitionName(loginUser, - projectCode, "test_pdf"); + projectCode, "test_pdf", 0); Assert.assertEquals(Status.SUCCESS, processNotExistRes.get(Constants.STATUS)); //process exist Mockito.when(processDefineMapper.verifyByDefineName(project.getCode(), "test_pdf")).thenReturn(getProcessDefinition()); Map processExistRes = processDefinitionService.verifyProcessDefinitionName(loginUser, - projectCode, "test_pdf"); + projectCode, "test_pdf", 0); Assert.assertEquals(Status.PROCESS_DEFINITION_NAME_EXIST, processExistRes.get(Constants.STATUS)); } diff --git a/dolphinscheduler-ui/src/service/modules/process-definition/index.ts b/dolphinscheduler-ui/src/service/modules/process-definition/index.ts index 9465c91798..e202f0ccf6 100644 --- a/dolphinscheduler-ui/src/service/modules/process-definition/index.ts +++ b/dolphinscheduler-ui/src/service/modules/process-definition/index.ts @@ -137,9 +137,12 @@ export function querySimpleList(code: number): any { }) } -export function verifyName(params: NameReq, code: number): any { +export function verifyName( + params: { name: string; workflowCode?: number }, + projectCode: number +): any { return axios({ - url: `/projects/${code}/process-definition/verify-name`, + url: `/projects/${projectCode}/process-definition/verify-name`, method: 'get', params }) diff --git a/dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag-save-modal.tsx b/dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag-save-modal.tsx index 8379da16fe..e4e3ab4f6a 100644 --- a/dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag-save-modal.tsx +++ b/dolphinscheduler-ui/src/views/projects/workflow/components/dag/dag-save-modal.tsx @@ -15,7 +15,15 @@ * limitations under the License. */ -import { defineComponent, PropType, ref, computed, onMounted, watch } from 'vue' +import { + defineComponent, + PropType, + ref, + computed, + onMounted, + watch, + getCurrentInstance +} from 'vue' import Modal from '@/components/modal' import { useI18n } from 'vue-i18n' import { @@ -136,8 +144,9 @@ export default defineComponent({ formRef.value.validate(async (valid: any) => { if (!valid) { const params = { - name: formValue.value.name - } + name: formValue.value.name, + code: props.definition?.processDefinition.code + } as { name: string; code?: number } if ( props.definition?.processDefinition.name !== formValue.value.name ) { @@ -172,6 +181,8 @@ export default defineComponent({ } } + const trim = getCurrentInstance()?.appContext.config.globalProperties.trim + onMounted(() => updateModalData()) watch( @@ -189,10 +200,15 @@ export default defineComponent({ > - +