This is an automated email from the ASF dual-hosted git repository.
jinyleechina pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/dolphinscheduler.git
The following commit(s) were added to refs/heads/dev by this push:
new f865c26 to #7000: implement deleteTaskProcessRelation (#7043)
f865c26 is described below
commit f865c26322c035e60564e3ab3976127cfa45a00e
Author: zwZjut <[email protected]>
AuthorDate: Mon Nov 29 20:11:47 2021 +0800
to #7000: implement deleteTaskProcessRelation (#7043)
* to #7000: implement deleteTaskProcessRelation
* to #7000: ! CollectionUtils.isEmpty -> CollectionUtils.isNotEmpty
* to #7000: fix bug
* to #7000: add UT
Co-authored-by: honghuo.zw <[email protected]>
---
.../impl/ProcessTaskRelationServiceImpl.java | 51 ++++++++++++++++++++--
.../service/ProcessTaskRelationServiceTest.java | 31 +++++++++++++
2 files changed, 78 insertions(+), 4 deletions(-)
diff --git
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessTaskRelationServiceImpl.java
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessTaskRelationServiceImpl.java
index 9a476c8..d4e79bf 100644
---
a/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessTaskRelationServiceImpl.java
+++
b/dolphinscheduler-api/src/main/java/org/apache/dolphinscheduler/api/service/impl/ProcessTaskRelationServiceImpl.java
@@ -22,6 +22,7 @@ import
org.apache.dolphinscheduler.api.exceptions.ServiceException;
import org.apache.dolphinscheduler.api.service.ProcessTaskRelationService;
import org.apache.dolphinscheduler.api.service.ProjectService;
import org.apache.dolphinscheduler.common.Constants;
+import org.apache.dolphinscheduler.common.enums.TaskType;
import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
import org.apache.dolphinscheduler.dao.entity.ProcessTaskRelation;
import org.apache.dolphinscheduler.dao.entity.ProcessTaskRelationLog;
@@ -191,15 +192,57 @@ public class ProcessTaskRelationServiceImpl extends
BaseServiceImpl implements P
/**
* delete process task relation
*
- * @param loginUser login user
- * @param projectCode project code
+ * @param loginUser login user
+ * @param projectCode project code
* @param processDefinitionCode process definition code
- * @param taskCode the post task code
+ * @param taskCode the post task code
* @return delete result code
*/
@Override
public Map<String, Object> deleteTaskProcessRelation(User loginUser, long
projectCode, long processDefinitionCode, long taskCode) {
- return null;
+ Project project = projectMapper.queryByCode(projectCode);
+ //check user access for project
+ Map<String, Object> result =
projectService.checkProjectAndAuth(loginUser, project, projectCode);
+ if (result.get(Constants.STATUS) != Status.SUCCESS) {
+ return result;
+ }
+ if (taskCode == 0) {
+ putMsg(result, Status.DELETE_TASK_PROCESS_RELATION_ERROR);
+ return result;
+ }
+ List<ProcessTaskRelation> downstreamList =
processTaskRelationMapper.queryByCode(projectCode, processDefinitionCode,
taskCode, 0L);
+ if (CollectionUtils.isNotEmpty(downstreamList)) {
+ Set<Long> postTaskCodes = downstreamList
+ .stream()
+ .map(ProcessTaskRelation::getPostTaskCode)
+ .collect(Collectors.toSet());
+ putMsg(result, Status.TASK_HAS_DOWNSTREAM,
org.apache.commons.lang.StringUtils.join(postTaskCodes, ","));
+ return result;
+ }
+
+ ProcessTaskRelationLog processTaskRelationLog = new
ProcessTaskRelationLog();
+ processTaskRelationLog.setProjectCode(projectCode);
+ processTaskRelationLog.setPreTaskCode(taskCode);
+ processTaskRelationLog.setProcessDefinitionCode(processDefinitionCode);
+ int deleteRelation =
processTaskRelationMapper.deleteRelation(processTaskRelationLog);
+ if (0 == deleteRelation) {
+ putMsg(result, Status.DELETE_TASK_PROCESS_RELATION_ERROR);
+ }
+
+ TaskDefinition taskDefinition =
taskDefinitionMapper.queryByCode(taskCode);
+ if (null == taskDefinition) {
+ putMsg(result, Status.DATA_IS_NULL, "taskDefinition");
+ return result;
+ }
+ if (TaskType.CONDITIONS.getDesc().equals(taskDefinition.getTaskType())
+ ||
TaskType.DEPENDENT.getDesc().equals(taskDefinition.getTaskType())
+ ||
TaskType.SUB_PROCESS.getDesc().equals(taskDefinition.getTaskType())) {
+ int deleteTaskDefinition =
taskDefinitionMapper.deleteByCode(taskCode);
+ if (0 == deleteTaskDefinition) {
+ putMsg(result, Status.DELETE_TASK_PROCESS_RELATION_ERROR);
+ }
+ }
+ return result;
}
/**
diff --git
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessTaskRelationServiceTest.java
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessTaskRelationServiceTest.java
index 55efbfe..2b7b5a7 100644
---
a/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessTaskRelationServiceTest.java
+++
b/dolphinscheduler-api/src/test/java/org/apache/dolphinscheduler/api/service/ProcessTaskRelationServiceTest.java
@@ -21,6 +21,7 @@ import org.apache.dolphinscheduler.api.enums.Status;
import
org.apache.dolphinscheduler.api.service.impl.ProcessTaskRelationServiceImpl;
import org.apache.dolphinscheduler.api.service.impl.ProjectServiceImpl;
import org.apache.dolphinscheduler.common.Constants;
+import org.apache.dolphinscheduler.common.enums.TaskType;
import org.apache.dolphinscheduler.common.enums.UserType;
import org.apache.dolphinscheduler.dao.entity.ProcessDefinition;
import org.apache.dolphinscheduler.dao.entity.ProcessTaskRelation;
@@ -461,4 +462,34 @@ public class ProcessTaskRelationServiceTest {
Map<String, Object> result1 =
processTaskRelationService.deleteUpstreamRelation(loginUser, projectCode,
"123", taskCode);
Assert.assertEquals(Status.SUCCESS, result1.get(Constants.STATUS));
}
+
+ @Test
+ public void testDeleteTaskProcessRelation() {
+ long projectCode = 1L;
+ long taskCode = 2L;
+ long processDefinitionCode = 3L;
+ long preTaskCode = 4L;
+ long postTaskCode = 5L;
+ Project project = getProject(projectCode);
+
Mockito.when(projectMapper.queryByCode(projectCode)).thenReturn(project);
+
+ User loginUser = new User();
+ loginUser.setId(-1);
+ loginUser.setUserType(UserType.GENERAL_USER);
+ Map<String, Object> result = new HashMap<>();
+ putMsg(result, Status.SUCCESS, projectCode);
+ Mockito.when(projectService.checkProjectAndAuth(loginUser, project,
projectCode)).thenReturn(result);
+ Mockito.when(processTaskRelationMapper.queryByCode(projectCode,
processDefinitionCode, preTaskCode,
postTaskCode)).thenReturn(Lists.newArrayList());
+ ProcessTaskRelationLog processTaskRelationLog = new
ProcessTaskRelationLog();
+ processTaskRelationLog.setProjectCode(projectCode);
+ processTaskRelationLog.setPreTaskCode(taskCode);
+ processTaskRelationLog.setProcessDefinitionCode(processDefinitionCode);
+
Mockito.when(processTaskRelationMapper.deleteRelation(processTaskRelationLog)).thenReturn(1);
+ TaskDefinition taskDefinition = new TaskDefinition();
+ taskDefinition.setTaskType(TaskType.CONDITIONS.getDesc());
+
Mockito.when(taskDefinitionMapper.queryByCode(taskCode)).thenReturn(taskDefinition);
+
Mockito.when(taskDefinitionMapper.deleteByCode(taskCode)).thenReturn(1);
+ result =
processTaskRelationService.deleteTaskProcessRelation(loginUser, projectCode,
processDefinitionCode, taskCode);
+ Assert.assertEquals(Status.SUCCESS, result.get(Constants.STATUS));
+ }
}