From c386b6450008b6bee69c41445aed362be3badeaf Mon Sep 17 00:00:00 2001 From: JinyLeeChina <42576980+JinyLeeChina@users.noreply.github.com> Date: Sat, 3 Jul 2021 14:10:16 +0800 Subject: [PATCH] [Feature][JsonSplit-api] copy of processDefinition (#5740) * select-by-code of processDefinition * fix ut * prcessDefinition copy Co-authored-by: JinyLeeChina <297062848@qq.com> --- .../ProcessDefinitionController.java | 16 +- .../api/controller/ProjectController.java | 28 +- .../dolphinscheduler/api/enums/Status.java | 4 +- .../api/service/ProcessDefinitionService.java | 8 +- .../impl/ProcessDefinitionServiceImpl.java | 219 ++++++-------- .../ProcessDefinitionControllerTest.java | 9 +- .../api/controller/ProjectControllerTest.java | 272 +++++++----------- .../service/ProcessDefinitionServiceTest.java | 32 +-- .../dolphinscheduler/common/Constants.java | 4 + .../dao/entity/ProcessDefinition.java | 37 +++ .../service/process/ProcessService.java | 28 +- 11 files changed, 273 insertions(+), 384 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 55a7ea4acd..b2f5dbc675 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 @@ -136,14 +136,14 @@ public class ProcessDefinitionController extends BaseController { * * @param loginUser login user * @param projectName project name - * @param processDefinitionIds process definition ids - * @param targetProjectId target project id + * @param processDefinitionCodes process definition codes + * @param targetProjectName target project name * @return copy result code */ - @ApiOperation(value = "copyProcessDefinition", notes = "COPY_PROCESS_DEFINITION_NOTES") + @ApiOperation(value = "copy", notes = "COPY_PROCESS_DEFINITION_NOTES") @ApiImplicitParams({ - @ApiImplicitParam(name = "processDefinitionIds", value = "PROCESS_DEFINITION_IDS", required = true, dataType = "String", example = "3,4"), - @ApiImplicitParam(name = "targetProjectId", value = "TARGET_PROJECT_ID", required = true, dataType = "Int", example = "10") + @ApiImplicitParam(name = "processDefinitionCodes", value = "PROCESS_DEFINITION_CODES", required = true, dataType = "String", example = "3,4"), + @ApiImplicitParam(name = "targetProjectName", value = "TARGET_PROJECT_NAME", required = true, dataType = "String", example = "ddd") }) @PostMapping(value = "/copy") @ResponseStatus(HttpStatus.OK) @@ -151,10 +151,10 @@ public class ProcessDefinitionController extends BaseController { @AccessLogAnnotation(ignoreRequestArgs = "loginUser") public Result copyProcessDefinition(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser, @ApiParam(name = "projectName", value = "PROJECT_NAME", required = true) @PathVariable String projectName, - @RequestParam(value = "processDefinitionIds", required = true) String processDefinitionIds, - @RequestParam(value = "targetProjectId", required = true) int targetProjectId) { + @RequestParam(value = "processDefinitionCodes", required = true) String processDefinitionCodes, + @RequestParam(value = "targetProjectName", required = true) String targetProjectName) { return returnDataList( - processDefinitionService.batchCopyProcessDefinition(loginUser, projectName, processDefinitionIds, targetProjectId)); + processDefinitionService.batchCopyProcessDefinition(loginUser, projectName, processDefinitionCodes, targetProjectName)); } /** diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProjectController.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProjectController.java index 6279305ae7..76f9090ee4 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProjectController.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/controller/ProjectController.java @@ -23,7 +23,7 @@ import static org.apache.dolphinscheduler.api.enums.Status.IMPORT_PROCESS_DEFINE import static org.apache.dolphinscheduler.api.enums.Status.LOGIN_USER_QUERY_PROJECT_LIST_PAGING_ERROR; import static org.apache.dolphinscheduler.api.enums.Status.QUERY_AUTHORIZED_AND_USER_CREATED_PROJECT_ERROR; import static org.apache.dolphinscheduler.api.enums.Status.QUERY_AUTHORIZED_PROJECT; -import static org.apache.dolphinscheduler.api.enums.Status.QUERY_PROJECT_DETAILS_BY_ID_ERROR; +import static org.apache.dolphinscheduler.api.enums.Status.QUERY_PROJECT_DETAILS_BY_CODE_ERROR; import static org.apache.dolphinscheduler.api.enums.Status.QUERY_UNAUTHORIZED_PROJECT_ERROR; import static org.apache.dolphinscheduler.api.enums.Status.UPDATE_PROJECT_ERROR; @@ -73,7 +73,7 @@ public class ProjectController extends BaseController { /** * create project * - * @param loginUser login user + * @param loginUser login user * @param projectName project name * @param description description * @return returns an error if it exists @@ -97,8 +97,8 @@ public class ProjectController extends BaseController { /** * update project * - * @param loginUser login user - * @param projectCode project code + * @param loginUser login user + * @param projectCode project code * @param projectName project name * @param description description * @return update result code @@ -136,10 +136,10 @@ public class ProjectController extends BaseController { }) @GetMapping(value = "/query-by-code") @ResponseStatus(HttpStatus.OK) - @ApiException(QUERY_PROJECT_DETAILS_BY_ID_ERROR) + @ApiException(QUERY_PROJECT_DETAILS_BY_CODE_ERROR) @AccessLogAnnotation(ignoreRequestArgs = "loginUser") - public Result queryProjectById(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser, - @RequestParam("projectCode") Long projectCode) { + public Result queryProjectByCode(@ApiIgnore @RequestAttribute(value = Constants.SESSION_USER) User loginUser, + @RequestParam("projectCode") Long projectCode) { Map result = projectService.queryByCode(loginUser, projectCode); return returnDataList(result); } @@ -149,8 +149,8 @@ public class ProjectController extends BaseController { * * @param loginUser login user * @param searchVal search value - * @param pageSize page size - * @param pageNo page number + * @param pageSize page size + * @param pageNo page number * @return project list which the login user have permission to see */ @ApiOperation(value = "queryProjectListPaging", notes = "QUERY_PROJECT_LIST_PAGING_NOTES") @@ -201,7 +201,7 @@ public class ProjectController extends BaseController { * query unauthorized project * * @param loginUser login user - * @param userId user id + * @param userId user id * @return the projects which user have not permission to see */ @ApiOperation(value = "queryUnauthorizedProject", notes = "QUERY_UNAUTHORIZED_PROJECT_NOTES") @@ -223,7 +223,7 @@ public class ProjectController extends BaseController { * query authorized project * * @param loginUser login user - * @param userId user id + * @param userId user id * @return projects which the user have permission to see, Except for items created by this user */ @ApiOperation(value = "queryAuthorizedProject", notes = "QUERY_AUTHORIZED_PROJECT_NOTES") @@ -259,13 +259,13 @@ public class ProjectController extends BaseController { /** * import process definition * - * @param loginUser login user - * @param file resource file + * @param loginUser login user + * @param file resource file * @param projectName project name * @return import result code */ - @ApiOperation(value = "importProcessDefinition", notes= "EXPORT_PROCESS_DEFINITION_NOTES") + @ApiOperation(value = "importProcessDefinition", notes = "EXPORT_PROCESS_DEFINITION_NOTES") @ApiImplicitParams({ @ApiImplicitParam(name = "file", value = "RESOURCE_FILE", required = true, dataType = "MultipartFile") }) diff --git a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java index 9e06558f2d..268dd8ef25 100644 --- a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java +++ b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/enums/Status.java @@ -74,7 +74,7 @@ public enum Status { LIST_WORKERS_ERROR(10044, "list workers error", "查询worker列表错误"), LIST_MASTERS_ERROR(10045, "list masters error", "查询master列表错误"), UPDATE_PROJECT_ERROR(10046, "update project error", "更新项目信息错误"), - QUERY_PROJECT_DETAILS_BY_ID_ERROR(10047, "query project details by id error", "查询项目详细信息错误"), + QUERY_PROJECT_DETAILS_BY_CODE_ERROR(10047, "query project details by code error", "查询项目详细信息错误"), CREATE_PROJECT_ERROR(10048, "create project error", "创建项目错误"), LOGIN_USER_QUERY_PROJECT_LIST_PAGING_ERROR(10049, "login user query project list paging error", "分页查询项目列表错误"), DELETE_PROJECT_ERROR(10050, "delete project error", "删除项目错误"), @@ -189,7 +189,7 @@ public enum Status { DELETE_PROCESS_DEFINITION_VERSION_ERROR(10156, "delete process definition version error", "删除工作流历史版本出错"), QUERY_USER_CREATED_PROJECT_ERROR(10157, "query user created project error error", "查询用户创建的项目错误"), - PROCESS_DEFINITION_IDS_IS_EMPTY(10158, "process definition ids is empty", "工作流IDS不能为空"), + PROCESS_DEFINITION_CODES_IS_EMPTY(10158, "process definition codes is empty", "工作流CODES不能为空"), BATCH_COPY_PROCESS_DEFINITION_ERROR(10159, "batch copy process definition error", "复制工作流错误"), BATCH_MOVE_PROCESS_DEFINITION_ERROR(10160, "batch move process definition error", "移动工作流错误"), QUERY_WORKFLOW_LINEAGE_ERROR(10161, "query workflow lineage error", "查询血缘失败"), 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 045a9204bc..7ae7953540 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 @@ -120,13 +120,13 @@ public interface ProcessDefinitionService { * * @param loginUser loginUser * @param projectName projectName - * @param processDefinitionIds processDefinitionIds - * @param targetProjectId targetProjectId + * @param processDefinitionCodes processDefinitionCodes + * @param targetProjectName targetProjectName */ Map batchCopyProcessDefinition(User loginUser, String projectName, - String processDefinitionIds, - int targetProjectId); + String processDefinitionCodes, + String targetProjectName); /** * batch move process definition 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 907c7c3165..3617639f91 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 @@ -67,6 +67,7 @@ import org.apache.dolphinscheduler.dao.entity.Tenant; import org.apache.dolphinscheduler.dao.entity.User; import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionLogMapper; import org.apache.dolphinscheduler.dao.mapper.ProcessDefinitionMapper; +import org.apache.dolphinscheduler.dao.mapper.ProcessTaskRelationLogMapper; import org.apache.dolphinscheduler.dao.mapper.ProcessTaskRelationMapper; import org.apache.dolphinscheduler.dao.mapper.ProjectMapper; import org.apache.dolphinscheduler.dao.mapper.ScheduleMapper; @@ -107,7 +108,6 @@ import org.springframework.web.multipart.MultipartFile; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; @@ -157,6 +157,9 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro @Autowired private ProcessTaskRelationMapper processTaskRelationMapper; + @Autowired + private ProcessTaskRelationLogMapper processTaskRelationLogMapper; + @Autowired TaskDefinitionLogMapper taskDefinitionLogMapper; @@ -194,14 +197,11 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro String tenantCode, String taskRelationJson) { - Map result = new HashMap<>(); - Project project = projectMapper.queryByName(projectName); - // check project auth - Map checkResult = projectService.checkProjectAndAuth(loginUser, project, projectName); - Status resultStatus = (Status) checkResult.get(Constants.STATUS); - if (resultStatus != Status.SUCCESS) { - return checkResult; + Map result = checkProjectAndAuth(loginUser, projectName); + if (result.get(Constants.STATUS) != Status.SUCCESS) { + return result; } + long projectCode = (long) result.get(Constants.PROJECT_CODE); List taskRelationList = JSONUtils.toList(taskRelationJson, ProcessTaskRelationLog.class); Map checkRelationJson = checkTaskRelationList(taskRelationList, taskRelationJson); @@ -222,16 +222,23 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro putMsg(result, Status.CREATE_PROCESS_DEFINITION); return result; } + ProcessDefinition processDefinition = new ProcessDefinition(projectCode, name, processDefinitionCode, description, + globalParams, locations, connects, timeout, loginUser.getId(), tenant.getId()); - int insertVersion = processService.saveProcessDefine(loginUser, project, name, description, globalParams, - locations, connects, timeout, tenant.getId(), processDefinitionCode, 0, true); + return createProcessDefine(loginUser, result, taskRelationList, processDefinition); + } + private Map createProcessDefine(User loginUser, + Map result, + List taskRelationList, + ProcessDefinition processDefinition) { + int insertVersion = processService.saveProcessDefine(loginUser, processDefinition, true); if (insertVersion > 0) { - int insertResult = processService.saveTaskRelation(loginUser, project.getCode(), processDefinitionCode, insertVersion, taskRelationList); + int insertResult = processService.saveTaskRelation(loginUser, processDefinition.getProjectCode(), processDefinition.getCode(), insertVersion, taskRelationList); if (insertResult > 0) { putMsg(result, Status.SUCCESS); // return processDefinitionCode - result.put(Constants.DATA_LIST, processDefinitionCode); + result.put(Constants.DATA_LIST, processDefinition.getCode()); } else { putMsg(result, Status.CREATE_PROCESS_DEFINITION); } @@ -282,17 +289,11 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro */ @Override public Map queryProcessDefinitionList(User loginUser, String projectName) { - - HashMap result = new HashMap<>(); - Project project = projectMapper.queryByName(projectName); - - Map checkResult = projectService.checkProjectAndAuth(loginUser, project, projectName); - Status resultStatus = (Status) checkResult.get(Constants.STATUS); - if (resultStatus != Status.SUCCESS) { - return checkResult; + Map result = checkProjectAndAuth(loginUser, projectName); + if (result.get(Constants.STATUS) != Status.SUCCESS) { + return result; } - - List resourceList = processDefinitionMapper.queryAllDefinitionList(project.getCode()); + List resourceList = processDefinitionMapper.queryAllDefinitionList((long) result.get(Constants.PROJECT_CODE)); resourceList.forEach(processDefinition -> { ProcessData processData = processService.genProcessData(processDefinition); @@ -387,17 +388,12 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro @Override public Map queryProcessDefinitionByName(User loginUser, String projectName, String processDefinitionName) { - - Map result = new HashMap<>(); - Project project = projectMapper.queryByName(projectName); - - Map checkResult = projectService.checkProjectAndAuth(loginUser, project, projectName); - Status resultStatus = (Status) checkResult.get(Constants.STATUS); - if (resultStatus != Status.SUCCESS) { - return checkResult; + Map result = checkProjectAndAuth(loginUser, projectName); + if (result.get(Constants.STATUS) != Status.SUCCESS) { + return result; } - - ProcessDefinition processDefinition = processDefinitionMapper.queryByDefineName(project.getCode(), processDefinitionName); + long projectCode = (long) result.get(Constants.PROJECT_CODE); + ProcessDefinition processDefinition = processDefinitionMapper.queryByDefineName(projectCode, processDefinitionName); if (processDefinition == null) { putMsg(result, Status.PROCESS_DEFINE_NOT_EXIST, processDefinitionName); @@ -438,14 +434,11 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro int timeout, String tenantCode, String taskRelationJson) { - Map result = new HashMap<>(); - - Project project = projectMapper.queryByName(projectName); - Map checkResult = projectService.checkProjectAndAuth(loginUser, project, projectName); - Status resultStatus = (Status) checkResult.get(Constants.STATUS); - if (resultStatus != Status.SUCCESS) { - return checkResult; + Map result = checkProjectAndAuth(loginUser, projectName); + if (result.get(Constants.STATUS) != Status.SUCCESS) { + return result; } + long projectCode = (long) result.get(Constants.PROJECT_CODE); List taskRelationList = JSONUtils.toList(taskRelationJson, ProcessTaskRelationLog.class); Map checkRelationJson = checkTaskRelationList(taskRelationList, taskRelationJson); @@ -471,10 +464,11 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro return result; } - int insertVersion = processService.saveProcessDefine(loginUser, project, name, description, globalParams, - locations, connects, timeout, tenant.getId(), code, processDefinition.getId(), true); + processDefinition.set(projectCode, name, description, globalParams, locations, connects, timeout, tenant.getId()); + processDefinition.setUpdateTime(new Date()); + int insertVersion = processService.saveProcessDefine(loginUser, processDefinition, true); if (insertVersion > 0) { - int insertResult = processService.saveTaskRelation(loginUser, project.getCode(), code, insertVersion, taskRelationList); + int insertResult = processService.saveTaskRelation(loginUser, projectCode, code, insertVersion, taskRelationList); if (insertResult > 0) { putMsg(result, Status.SUCCESS); result.put(Constants.DATA_LIST, processDefinition); @@ -1453,51 +1447,24 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro } private Map copyProcessDefinition(User loginUser, - Integer processId, - Project targetProject) throws JsonProcessingException { + Long processCode, + long targetProjectCode) { Map result = new HashMap<>(); - String currentTimeStamp = DateUtils.getCurrentTimeStamp(); - ProcessDefinition processDefinition = processDefinitionMapper.selectById(processId); + ProcessDefinition processDefinition = processDefinitionMapper.queryByCode(processCode); if (processDefinition == null) { - putMsg(result, Status.PROCESS_DEFINE_NOT_EXIST, processId); + putMsg(result, Status.PROCESS_DEFINE_NOT_EXIST, processCode); return result; - } else { - ProcessData processData = processService.genProcessData(processDefinition); - List taskNodeList = processData.getTasks(); - String locations = processDefinition.getLocations(); - ObjectNode locationsJN = JSONUtils.parseObject(locations); - - for (TaskNode taskNode : taskNodeList) { - String suffix = "_copy_" + currentTimeStamp; - String id = taskNode.getId(); - String newName = locationsJN.path(id).path("name").asText() + suffix; - ((ObjectNode) locationsJN.get(id)).put("name", newName); - - List depList = taskNode.getDepList(); - List newDepList = depList.stream() - .map(s -> s + suffix) - .collect(Collectors.toList()); - - taskNode.setDepList(newDepList); - taskNode.setName(taskNode.getName() + suffix); - taskNode.setCode(0L); - } - processData.setTasks(taskNodeList); - String processDefinitionJson = JSONUtils.toJsonString(processData); - // TODO copy process - // return createProcessDefinition( - // loginUser, - // targetProject.getName(), - // processDefinition.getName() + "_copy_" + currentTimeStamp, - // processDefinitionJson, - // processDefinition.getDescription(), - // locationsJN.toString(), - // processDefinition.getConnects()); - // TODO remove + } + List taskRelationList = + processTaskRelationLogMapper.queryByProcessCodeAndVersion(processDefinition.getCode(), processDefinition.getVersion()); + if (taskRelationList.isEmpty()) { + putMsg(result, Status.PROCESS_TASK_RELATION_NOT_EXIST, processCode); return result; - } + processDefinition.setName(processDefinition.getName() + "_copy_" + DateUtils.getCurrentTimeStamp()); + processDefinition.setProjectCode(targetProjectCode); + return createProcessDefine(loginUser, result, taskRelationList, processDefinition); } /** @@ -1505,45 +1472,37 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro * * @param loginUser loginUser * @param projectName projectName - * @param processDefinitionIds processDefinitionIds - * @param targetProjectId targetProjectId + * @param processDefinitionCodes processDefinitionCodes + * @param targetProjectName targetProjectName */ @Override public Map batchCopyProcessDefinition(User loginUser, String projectName, - String processDefinitionIds, - int targetProjectId) { - Map result = new HashMap<>(); + String processDefinitionCodes, + String targetProjectName) { List failedProcessList = new ArrayList<>(); - - if (StringUtils.isEmpty(processDefinitionIds)) { - putMsg(result, Status.PROCESS_DEFINITION_IDS_IS_EMPTY, processDefinitionIds); - return result; - } - //check src project auth - Map checkResult = checkProjectAndAuth(loginUser, projectName); - if (checkResult != null) { - return checkResult; + Map result = checkProjectAndAuth(loginUser, projectName); + if (result.get(Constants.STATUS) != Status.SUCCESS) { + return result; } - - Project targetProject = projectMapper.queryDetailById(targetProjectId); - if (targetProject == null) { - putMsg(result, Status.PROJECT_NOT_FOUNT, targetProjectId); + if (StringUtils.isEmpty(processDefinitionCodes)) { + putMsg(result, Status.PROCESS_DEFINITION_CODES_IS_EMPTY, processDefinitionCodes); return result; } - - if (!(targetProject.getName()).equals(projectName)) { - Map checkTargetProjectResult = checkProjectAndAuth(loginUser, targetProject.getName()); - if (checkTargetProjectResult != null) { + long targetProjectCode = 0L; + if (!(targetProjectName).equals(projectName)) { + Map checkTargetProjectResult = checkProjectAndAuth(loginUser, targetProjectName); + if (checkTargetProjectResult.get(Constants.STATUS) != Status.SUCCESS) { return checkTargetProjectResult; + } else { + targetProjectCode = (long) checkTargetProjectResult.get(Constants.PROJECT_CODE); } } - String[] processDefinitionIdList = processDefinitionIds.split(Constants.COMMA); - doBatchCopyProcessDefinition(loginUser, targetProject, failedProcessList, processDefinitionIdList); - - checkBatchOperateResult(projectName, targetProject.getName(), result, failedProcessList, true); + String[] processDefinitionCodeList = processDefinitionCodes.split(Constants.COMMA); + doBatchCopyProcessDefinition(loginUser, targetProjectCode, failedProcessList, processDefinitionCodeList); + checkBatchOperateResult(projectName, targetProjectName, result, failedProcessList, true); return result; } @@ -1561,16 +1520,15 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro String projectName, String processDefinitionIds, int targetProjectId) { - Map result = new HashMap<>(); List failedProcessList = new ArrayList<>(); //check src project auth - Map checkResult = checkProjectAndAuth(loginUser, projectName); - if (checkResult != null) { - return checkResult; + Map result = checkProjectAndAuth(loginUser, projectName); + if (result.get(Constants.STATUS) != Status.SUCCESS) { + return result; } if (StringUtils.isEmpty(processDefinitionIds)) { - putMsg(result, Status.PROCESS_DEFINITION_IDS_IS_EMPTY, processDefinitionIds); + putMsg(result, Status.PROCESS_DEFINITION_CODES_IS_EMPTY, processDefinitionIds); return result; } @@ -1697,23 +1655,21 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro * batch copy process definition * * @param loginUser loginUser - * @param targetProject targetProject + * @param targetProjectCode targetProjectCode * @param failedProcessList failedProcessList - * @param processDefinitionIdList processDefinitionIdList + * @param processDefinitionCodeList processDefinitionCodeList */ - private void doBatchCopyProcessDefinition(User loginUser, Project targetProject, List failedProcessList, String[] processDefinitionIdList) { - for (String processDefinitionId : processDefinitionIdList) { + private void doBatchCopyProcessDefinition(User loginUser, long targetProjectCode, List failedProcessList, String[] processDefinitionCodeList) { + for (String processDefinitionCode : processDefinitionCodeList) { try { - Map copyProcessDefinitionResult = - copyProcessDefinition(loginUser, Integer.valueOf(processDefinitionId), targetProject); + Map copyProcessDefinitionResult = copyProcessDefinition(loginUser, Long.valueOf(processDefinitionCode), targetProjectCode); if (!Status.SUCCESS.equals(copyProcessDefinitionResult.get(Constants.STATUS))) { - setFailedProcessList(failedProcessList, processDefinitionId); + setFailedProcessList(failedProcessList, processDefinitionCode); logger.error((String) copyProcessDefinitionResult.get(Constants.MSG)); } } catch (Exception e) { - setFailedProcessList(failedProcessList, processDefinitionId); + setFailedProcessList(failedProcessList, processDefinitionCode); logger.error("copy processDefinition error: {}", e.getMessage(), e); - } } } @@ -1741,15 +1697,12 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro */ private Map checkProjectAndAuth(User loginUser, String projectName) { Project project = projectMapper.queryByName(projectName); - //check user access for project - Map checkResult = projectService.checkProjectAndAuth(loginUser, project, projectName); - Status resultStatus = (Status) checkResult.get(Constants.STATUS); - - if (resultStatus != Status.SUCCESS) { - return checkResult; + Map result = projectService.checkProjectAndAuth(loginUser, project, projectName); + if (result.get(Constants.STATUS) == Status.SUCCESS) { + result.put(Constants.PROJECT_CODE, project.getCode()); } - return null; + return result; } /** @@ -1811,13 +1764,9 @@ public class ProcessDefinitionServiceImpl extends BaseServiceImpl implements Pro return result; } - Project project = projectMapper.queryByName(projectName); - - // check project auth - Map checkResult = projectService.checkProjectAndAuth(loginUser, project, projectName); - Status resultStatus = (Status) checkResult.get(Constants.STATUS); - if (resultStatus != Status.SUCCESS) { - return checkResult; + result = checkProjectAndAuth(loginUser, projectName); + if (result.get(Constants.STATUS) != Status.SUCCESS) { + return result; } ProcessDefinition processDefinition = processDefinitionMapper.queryByCode(processDefinitionCode); 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 e0ee1dde71..98849ae018 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 @@ -67,7 +67,6 @@ public class ProcessDefinitionControllerTest { loginUser.setId(1); loginUser.setUserType(UserType.GENERAL_USER); loginUser.setUserName("admin"); - user = loginUser; } @@ -190,14 +189,14 @@ public class ProcessDefinitionControllerTest { public void testBatchCopyProcessDefinition() throws Exception { String projectName = "test"; - int targetProjectId = 2; - String id = "1"; + String targetProjectName = "test1"; + String code = "1"; Map result = new HashMap<>(); putMsg(result, Status.SUCCESS); - Mockito.when(processDefinitionService.batchCopyProcessDefinition(user, projectName, id, targetProjectId)).thenReturn(result); - Result response = processDefinitionController.copyProcessDefinition(user, projectName, id, targetProjectId); + Mockito.when(processDefinitionService.batchCopyProcessDefinition(user, projectName, code, targetProjectName)).thenReturn(result); + Result response = processDefinitionController.copyProcessDefinition(user, projectName, code, targetProjectName); Assert.assertTrue(response != null && response.isSuccess()); } diff --git a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProjectControllerTest.java b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProjectControllerTest.java index 0e01312bdc..9e116cec68 100644 --- a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProjectControllerTest.java +++ b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/controller/ProjectControllerTest.java @@ -17,220 +17,140 @@ package org.apache.dolphinscheduler.api.controller; -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 org.apache.dolphinscheduler.api.enums.Status; +import org.apache.dolphinscheduler.api.service.impl.ProjectServiceImpl; +import org.apache.dolphinscheduler.api.utils.PageInfo; import org.apache.dolphinscheduler.api.utils.Result; -import org.apache.dolphinscheduler.common.utils.JSONUtils; +import org.apache.dolphinscheduler.common.Constants; +import org.apache.dolphinscheduler.common.enums.UserType; +import org.apache.dolphinscheduler.dao.entity.Project; +import org.apache.dolphinscheduler.dao.entity.Resource; +import org.apache.dolphinscheduler.dao.entity.User; +import org.apache.dolphinscheduler.dao.mapper.ProjectMapper; + +import java.text.MessageFormat; +import java.util.HashMap; +import java.util.Map; -import org.junit.After; import org.junit.Assert; import org.junit.Before; -import org.junit.Ignore; import org.junit.Test; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.http.MediaType; -import org.springframework.test.web.servlet.MvcResult; -import org.springframework.util.LinkedMultiValueMap; -import org.springframework.util.MultiValueMap; - -import com.fasterxml.jackson.core.type.TypeReference; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; /** * project controller test */ -public class ProjectControllerTest extends AbstractControllerTest { - - private static Logger logger = LoggerFactory.getLogger(ProjectControllerTest.class); - - private String projectCode; - - @Before - public void before() throws Exception { - projectCode = testCreateProject("project_test11", "the test project"); - } - - @After - public void after() throws Exception { - testDeleteProject(projectCode); - } +@RunWith(MockitoJUnitRunner.Silent.class) +public class ProjectControllerTest { - private String testCreateProject(String projectName, String description) throws Exception { + @InjectMocks + private ProjectController projectController; - MultiValueMap paramsMap = new LinkedMultiValueMap<>(); - paramsMap.add("projectName",projectName); - paramsMap.add("description",description); + @Mock + private ProjectServiceImpl projectService; - MvcResult mvcResult = mockMvc.perform(post("/projects/create") - .header(SESSION_ID, sessionId) - .params(paramsMap)) - .andExpect(status().isCreated()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) - .andReturn(); + @Mock + private ProjectMapper projectMapper; - Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), new TypeReference>() {}); - Assert.assertEquals(Status.SUCCESS.getCode(), result.getCode().intValue()); - Assert.assertNotNull(result.getData()); - logger.info("create project return result:{}", mvcResult.getResponse().getContentAsString()); + protected User user; - return (String)result.getData(); + @Before + public void before() { + User loginUser = new User(); + loginUser.setId(1); + loginUser.setUserType(UserType.GENERAL_USER); + loginUser.setUserName("admin"); + user = loginUser; } @Test - public void testUpdateProject() throws Exception { - - MultiValueMap paramsMap = new LinkedMultiValueMap<>(); - paramsMap.add("projectCode", projectCode); - paramsMap.add("projectName","project_test_update"); - paramsMap.add("desc","the test project update"); - paramsMap.add("userName", "the project owner"); - - MvcResult mvcResult = mockMvc.perform(post("/projects/update") - .header(SESSION_ID, sessionId) - .params(paramsMap)) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) - .andReturn(); - - Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class); - Assert.assertEquals(Status.USER_NOT_EXIST.getCode(),result.getCode().intValue()); - logger.info("update project return result:{}", mvcResult.getResponse().getContentAsString()); - + public void testUpdateProject() { + Map result = new HashMap<>(); + putMsg(result, Status.SUCCESS); + result.put("projectId", 1); + + long projectCode = 1L; + String projectName = "test"; + String desc = ""; + String userName = "jack"; + Mockito.when(projectService.update(user, projectCode, projectName, desc, userName)).thenReturn(result); + Result response = projectController.updateProject(user, projectCode, projectName, desc, userName); + Assert.assertEquals(Status.SUCCESS.getCode(), response.getCode().intValue()); } @Test - public void testQueryProjectByCode() throws Exception { - - MultiValueMap paramsMap = new LinkedMultiValueMap<>(); - paramsMap.add("projectCode", projectCode); - - MvcResult mvcResult = mockMvc.perform(get("/projects/query-by-code") - .header(SESSION_ID, sessionId) - .params(paramsMap)) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) - .andReturn(); - - Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class); - Assert.assertEquals(Status.SUCCESS.getCode(), result.getCode().intValue()); - logger.info(mvcResult.getResponse().getContentAsString()); - logger.info("query project by code :{}, return result:{}", projectCode, mvcResult.getResponse().getContentAsString()); - + public void testQueryProjectByCode() { + Map result = new HashMap<>(); + putMsg(result, Status.SUCCESS); + long projectCode = 1L; + Mockito.when(projectMapper.queryByCode(projectCode)).thenReturn(getProject()); + Mockito.when(projectService.queryByCode(user, projectCode)).thenReturn(result); + Result response = projectController.queryProjectByCode(user, projectCode); + Assert.assertEquals(Status.SUCCESS.getCode(), response.getCode().intValue()); } @Test - public void testQueryProjectListPaging() throws Exception { - - MultiValueMap paramsMap = new LinkedMultiValueMap<>(); - paramsMap.add("searchVal","test"); - paramsMap.add("pageSize","2"); - paramsMap.add("pageNo","2"); - - MvcResult mvcResult = mockMvc.perform(get("/projects/list-paging") - .header(SESSION_ID, sessionId) - .params(paramsMap)) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) - .andReturn(); - - Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class); - Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue()); - logger.info("query list-paging project return result:{}", mvcResult.getResponse().getContentAsString()); - } - - @Test - public void testQueryUnauthorizedProject() throws Exception { + public void testQueryProjectListPaging() { + int pageNo = 1; + int pageSize = 10; + String searchVal = ""; - MultiValueMap paramsMap = new LinkedMultiValueMap<>(); - paramsMap.add("userId","2"); + Map result = new HashMap<>(); + putMsg(result, Status.SUCCESS); + result.put(Constants.DATA_LIST, new PageInfo(1, 10)); - MvcResult mvcResult = mockMvc.perform(get("/projects/unauth-project") - .header(SESSION_ID, sessionId) - .params(paramsMap)) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) - .andReturn(); + Mockito.when(projectService.queryProjectListPaging(user, pageSize, pageNo, searchVal)).thenReturn(result); + Result response = projectController.queryProjectListPaging(user, searchVal, pageSize, pageNo); - Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class); - Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue()); - logger.info("query unauth project return result:{}", mvcResult.getResponse().getContentAsString()); + Assert.assertTrue(response != null && response.isSuccess()); } @Test - public void testQueryAuthorizedProject() throws Exception { - - MultiValueMap paramsMap = new LinkedMultiValueMap<>(); - paramsMap.add("userId",String.valueOf(user.getId())); - - MvcResult mvcResult = mockMvc.perform(get("/projects/authed-project") - .header(SESSION_ID, sessionId) - .params(paramsMap)) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) - .andReturn(); - - Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class); - Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue()); - logger.info("query authed project return result:{}", mvcResult.getResponse().getContentAsString()); - + public void testQueryUnauthorizedProject() { + Map result = new HashMap<>(); + putMsg(result, Status.SUCCESS); + Mockito.when(projectService.queryUnauthorizedProject(user, 2)).thenReturn(result); + Result response = projectController.queryUnauthorizedProject(user, 2); + Assert.assertEquals(Status.SUCCESS.getCode(), response.getCode().intValue()); } @Test - public void testQueryAllProjectList() throws Exception { - - MultiValueMap paramsMap = new LinkedMultiValueMap<>(); - - MvcResult mvcResult = mockMvc.perform(get("/projects/query-project-list") - .header(SESSION_ID, sessionId) - .params(paramsMap)) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) - .andReturn(); - - Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class); - Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue()); - logger.info("query all project return result:{}", mvcResult.getResponse().getContentAsString()); - + public void testQueryAuthorizedProject() { + Map result = new HashMap<>(); + putMsg(result, Status.SUCCESS); + Mockito.when(projectService.queryAuthorizedProject(user, 2)).thenReturn(result); + Result response = projectController.queryAuthorizedProject(user, 2); + Assert.assertEquals(Status.SUCCESS.getCode(), response.getCode().intValue()); } - @Ignore @Test - public void testImportProcessDefinition() throws Exception { - - MultiValueMap paramsMap = new LinkedMultiValueMap<>(); - paramsMap.add("file","test"); - - MvcResult mvcResult = mockMvc.perform(post("/projects/import-definition") - .header(SESSION_ID, sessionId) - .params(paramsMap)) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.TEXT_PLAIN)) - .andReturn(); - - Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class); - Assert.assertEquals(Status.IMPORT_PROCESS_DEFINE_ERROR.getCode(),result.getCode().intValue()); - logger.info(mvcResult.getResponse().getContentAsString()); + public void testQueryAllProjectList() { + Map result = new HashMap<>(); + putMsg(result, Status.SUCCESS); + Mockito.when(projectService.queryAllProjectList()).thenReturn(result); + Result response = projectController.queryAllProjectList(user); + Assert.assertEquals(Status.SUCCESS.getCode(), response.getCode().intValue()); } - private void testDeleteProject(String projectCode) throws Exception { - - MultiValueMap paramsMap = new LinkedMultiValueMap<>(); - paramsMap.add("projectCode", projectCode); - - MvcResult mvcResult = mockMvc.perform(get("/projects/delete") - .header(SESSION_ID, sessionId) - .params(paramsMap)) - .andExpect(status().isOk()) - .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) - .andReturn(); - - Result result = JSONUtils.parseObject(mvcResult.getResponse().getContentAsString(), Result.class); - Assert.assertEquals(Status.SUCCESS.getCode(),result.getCode().intValue()); - logger.info("delete project return result:{}", mvcResult.getResponse().getContentAsString()); + private Project getProject() { + Project project = new Project(); + project.setCode(1L); + project.setId(1); + project.setName("test"); + project.setUserId(1); + return project; } + 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()); + } + } } 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 8cad1ea9bb..a0226c610f 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 @@ -387,6 +387,8 @@ public class ProcessDefinitionServiceTest { //instance exit Mockito.when(processDefineMapper.queryByDefineName(project.getCode(), "test")).thenReturn(getProcessDefinition()); + putMsg(result, Status.SUCCESS, projectName); + Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result); Map successRes = processDefinitionService.queryProcessDefinitionByName(loginUser, "project_test1", "test"); Assert.assertEquals(Status.SUCCESS, successRes.get(Constants.STATUS)); @@ -398,30 +400,32 @@ public class ProcessDefinitionServiceTest { String projectName = "project_test1"; Project project = getProject(projectName); User loginUser = new User(); - loginUser.setId(-1); + loginUser.setId(1); loginUser.setUserType(UserType.GENERAL_USER); + Mockito.when(projectMapper.queryByName(projectName)).thenReturn(getProject(projectName)); + Map result = new HashMap<>(); + putMsg(result, Status.SUCCESS, projectName); + Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result); // copy project definition ids empty test - Map map = processDefinitionService.batchCopyProcessDefinition(loginUser, projectName, StringUtils.EMPTY, 0); - Assert.assertEquals(Status.PROCESS_DEFINITION_IDS_IS_EMPTY, map.get(Constants.STATUS)); + Map map = processDefinitionService.batchCopyProcessDefinition(loginUser, projectName, StringUtils.EMPTY, "project_test2"); + Assert.assertEquals(Status.PROCESS_DEFINITION_CODES_IS_EMPTY, map.get(Constants.STATUS)); - Map result = new HashMap<>(); // project check auth fail putMsg(result, Status.PROJECT_NOT_FOUNT, projectName); - Mockito.when(projectMapper.queryByName(projectName)).thenReturn(getProject(projectName)); Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result); Map map1 = processDefinitionService.batchCopyProcessDefinition( - loginUser, projectName, String.valueOf(project.getId()), 0); + loginUser, projectName, String.valueOf(project.getId()), "project_test2"); Assert.assertEquals(Status.PROJECT_NOT_FOUNT, map1.get(Constants.STATUS)); // project check auth success, target project is null - putMsg(result, Status.SUCCESS, projectName); Mockito.when(projectMapper.queryByName(projectName)).thenReturn(getProject(projectName)); Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result); - Mockito.when(projectMapper.queryDetailById(0)).thenReturn(null); + putMsg(result, Status.PROJECT_NOT_FOUNT, "project_test2"); + Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result); Map map2 = processDefinitionService.batchCopyProcessDefinition( - loginUser, projectName, String.valueOf(project.getId()), 0); + loginUser, projectName, String.valueOf(project.getId()), "project_test2"); Assert.assertEquals(Status.PROJECT_NOT_FOUNT, map2.get(Constants.STATUS)); // project check auth success, target project name not equal project name, check auth target project fail @@ -430,21 +434,13 @@ public class ProcessDefinitionServiceTest { Mockito.when(projectService.checkProjectAndAuth(loginUser, project, projectName)).thenReturn(result); putMsg(result, Status.SUCCESS, projectName); - String projectName2 = "project_test2"; - Project project2 = getProject(projectName2); - Mockito.when(projectMapper.queryByName(projectName2)).thenReturn(project2); - Mockito.when(projectService.checkProjectAndAuth(loginUser, project2, projectName2)).thenReturn(result); - Mockito.when(projectMapper.queryDetailById(1)).thenReturn(project2); // instance exit ProcessDefinition definition = getProcessDefinition(); definition.setLocations("{\"tasks-36196\":{\"name\":\"ssh_test1\",\"targetarr\":\"\",\"x\":141,\"y\":70}}"); definition.setConnects("[]"); - Mockito.when(processDefineMapper.selectById(46)).thenReturn(definition); - Mockito.when(processService.genProcessData(Mockito.any())).thenReturn(getProcessData()); - Map map3 = processDefinitionService.batchCopyProcessDefinition( - loginUser, projectName, "46", 1); + loginUser, projectName, "46", projectName); Assert.assertEquals(Status.COPY_PROCESS_DEFINITION_ERROR, map3.get(Constants.STATUS)); } diff --git a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java index 59e65c578e..f18cfd5295 100644 --- a/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java +++ b/dolphinscheduler-common/src/main/java/org/apache/dolphinscheduler/common/Constants.java @@ -709,6 +709,10 @@ public final class Constants { * projectId */ public static final String PROJECT_ID = "projectId"; + /** + * projectCode + */ + public static final String PROJECT_CODE = "projectCode"; /** * processId */ diff --git a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessDefinition.java b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessDefinition.java index 98fe7eec04..d43667cd77 100644 --- a/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessDefinition.java +++ b/dolphinscheduler-dao/src/main/java/org/apache/dolphinscheduler/dao/entity/ProcessDefinition.java @@ -190,6 +190,43 @@ public class ProcessDefinition { public ProcessDefinition(){} + public ProcessDefinition(Long projectCode, + String name, + Long code, + String description, + String globalParams, + String locations, + String connects, + int timeout, + int userId, + int tenantId) { + set(projectCode, name, description, globalParams, connects, locations, timeout, tenantId); + this.code = code; + this.userId = userId; + Date date = new Date(); + this.createTime = date; + this.updateTime = date; + } + + public void set(long projectCode, + String name, + String description, + String globalParams, + String connects, + String locations, + int timeout, + int tenantId) { + this.projectCode = projectCode; + this.name = name; + this.description = description; + this.globalParams = globalParams; + this.locations = locations; + this.connects = connects; + this.timeout = timeout; + this.tenantId = tenantId; + this.flag = Flag.YES; + } + public String getName() { return name; } diff --git a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java index ddead50852..618451f16b 100644 --- a/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java +++ b/dolphinscheduler-service/src/main/java/org/apache/dolphinscheduler/service/process/ProcessService.java @@ -2205,36 +2205,20 @@ public class ProcessService { /** * save processDefinition (including create or update processDefinition) */ - public int saveProcessDefine(User operator, Project project, String name, String description, String globalParams, - String locations, String connects, int timeout, int tenantId, long processDefinitionCode, - int processDefinitionId, Boolean isFromProcessDefine) { - ProcessDefinitionLog processDefinitionLog = new ProcessDefinitionLog(); - Integer version = processDefineLogMapper.queryMaxVersionForDefinition(processDefinitionCode); + public int saveProcessDefine(User operator, ProcessDefinition processDefinition, Boolean isFromProcessDefine) { + ProcessDefinitionLog processDefinitionLog = new ProcessDefinitionLog(processDefinition); + Integer version = processDefineLogMapper.queryMaxVersionForDefinition(processDefinition.getCode()); int insertVersion = version == null || version == 0 ? 1 : version + 1; - processDefinitionLog.setUserId(operator.getId()); - processDefinitionLog.setCode(processDefinitionCode); processDefinitionLog.setVersion(insertVersion); - processDefinitionLog.setName(name); - processDefinitionLog.setFlag(Flag.YES); processDefinitionLog.setReleaseState(isFromProcessDefine ? ReleaseState.OFFLINE : ReleaseState.ONLINE); - processDefinitionLog.setProjectCode(project.getCode()); - processDefinitionLog.setDescription(description); - processDefinitionLog.setGlobalParams(globalParams); - processDefinitionLog.setLocations(locations); - processDefinitionLog.setConnects(connects); - processDefinitionLog.setTimeout(timeout); - processDefinitionLog.setTenantId(tenantId); processDefinitionLog.setOperator(operator.getId()); - Date now = new Date(); - processDefinitionLog.setOperateTime(now); - processDefinitionLog.setUpdateTime(now); - processDefinitionLog.setCreateTime(now); + processDefinitionLog.setOperateTime(processDefinition.getUpdateTime()); int insertLog = processDefineLogMapper.insert(processDefinitionLog); int result; - if (0 == processDefinitionId) { + if (0 == processDefinition.getId()) { result = processDefineMapper.insert(processDefinitionLog); } else { - processDefinitionLog.setId(processDefinitionId); + processDefinitionLog.setId(processDefinition.getId()); result = processDefineMapper.updateById(processDefinitionLog); } return (insertLog & result) > 0 ? insertVersion : 0;